Cloud Run(전체 관리)에 New Relic APM 넣기
소개
Cloud Run에서 실행되는 웹 애플리케이션을 New Relic APM으로 추적해 본 이야기.
'Cloud Run'은 Google Cloud의 컴퓨팅 서비스 중 하나로 Knative 기반의 완전 관리형 컨테이너 실행 서버리스 플랫폼 컨테이너로 패키징된 웹 앱을 부담없이 배포 및 공개할 수 있다.
Cloud Run에는 「풀 매니지드」와 「for Anthos」의 2종류가 있어, 이번은 「풀 매니지드」의 Cloud Run에 New Relic APM을 도입했다.
참고 : Cloud Run for Anthos에 배포하는 방법은 New Relic 님의 Blog에 나와 있습니다.
구현
데모를 위해 웹 애플리케이션을 구현하고 추적하기 위한 New Relic APM을 도입한다.
웹 애플리케이션
데모를 위해 웹 애플리케이션을 구현하고 추적하기 위한 New Relic APM을 도입한다.
웹 애플리케이션
또한 외부와의 통신을 시연하기 위해 htt 항공편. 오 rg을 활용한다.
이하, 이번 샘플 코드
app.py
from fastapi import FastAPI
import requests
app = FastAPI()
@app.get("/")
def get_root():
return {"Hello": "World"}
@app.get("/delay/{sec}")
def get_delay(sec: int):
"""
sec秒遅延させる
"""
requests.get("https://httpbin.org/delay/{}".format(sec))
return {"sec": sec}
@app.post("/anything")
def post_anything():
"""
情報を返す
"""
r = requests.post("https://httpbin.org/anything")
return r.json()
동작 확인 실행
pip install fastapi
pip install uvicorn
pip install requests
uvicorn app:app --reload --host 0.0.0.0 --port 8000
New Relic APM 설정
설치 방법은 Docker 컨테이너에 일반적인 설치 방법과 동일합니다.
Install the Python agent for Docker
newrelic
모듈을 설치하고 newrelic-admin run-program
를 시작하여 실행하면 APM 에이전트에 의해 추적됩니다.Dockerfile은 다음과 같습니다.
Dockerfile
FROM python:3.8.6-alpine
# Allow statements and log messages to immediately appear in the Knative logs
ENV PYTHONUNBUFFERED True
WORKDIR /opt/app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["newrelic-admin", "run-program", "uvicorn", "app:app", "--reload", "--host", "0.0.0.0", "--port", "8000"]
샘플 코드
Cloud Run에 배포
Docker 리포지토리에는 최근 GA가 된 Artifact Resistry를 사용한다.
Docker에 대한 인증 설정 수행
docker build -t newrelic-cloudrun-python .
docker tag newrelic-cloudrun-python asia-northeast1-docker.pkg.dev/{GCP ProjectID}/newrelictest/newrelic-cloudrun-python
docker push asia-northeast1-docker.pkg.dev/{GCP ProjectID}/newrelictest/newrelic-cloudrun-python
포트는 8000으로 설정.
환경 변수에 New Relic 설정용의 파라미터를 지정.
파라미터(예)
이름
설명
NEW_RELIC_LICENSE_KEY
라이센스 키(필수)
NEW_RELIC_APP_NAME
앱 이름(필수)
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
분산 트레이싱 ON/OFF (선택 사항)
참고
이번은 미인증(공개)으로 설정.
배포.
배포 성공.
생성 된 URL에 몇 가지 요청을 보내십시오.
curl https://newrelic-cloudrun-python-xxxxxx-an.a.run.app
curl https://newrelic-cloudrun-python-xxxxxx-an.a.run.app/delay/4
curl https://newrelic-cloudrun-python-xxxxxx-an.a.run.app/anything -X POST
APM 화면
트레이스 정보가 New Relic로 보내지고 있는지, New Relic APM의 화면을 확인한다.
다음과 같은 형태로 요청 이벤트가 추적되고 정보가 표시됩니다.
호스트명은 localhost로 인식되는 모양
이번에는 NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
를 true
로 하고 있기 때문에 분산 트레이싱 정보에 대해서도 이와 같이 표시된다.
기타 보고서에 대해서도 평소대로 수집된다.
요약
APM의 Docker 컨테이너에의 통상의 인스톨 방법과 변함없이, 에이전트를 Dockerfile에 기재해, 나머지는 런타임에 임의의 New Relic의 환경 변수를 설정하면 OK. 부담없이 도입할 수 있었다.
Reference
이 문제에 관하여(Cloud Run(전체 관리)에 New Relic APM 넣기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mmclsntr/items/c230dac8cf732a4ca422
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
APM의 Docker 컨테이너에의 통상의 인스톨 방법과 변함없이, 에이전트를 Dockerfile에 기재해, 나머지는 런타임에 임의의 New Relic의 환경 변수를 설정하면 OK. 부담없이 도입할 수 있었다.
Reference
이 문제에 관하여(Cloud Run(전체 관리)에 New Relic APM 넣기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mmclsntr/items/c230dac8cf732a4ca422텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)