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을 도입한다.

웹 애플리케이션


  • Python 3.8.6
  • 프레임워크 : Fast API

  • 또한 외부와의 통신을 시연하기 위해 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를 사용한다.
  • 대상 GCP 프로젝트의 Artifact Registry에서 Docker 리포지토리를 만듭니다. 리포지토리 이름은 "newrelictest"입니다.



  • 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
    
  • Cloud Run에 배포합니다. 이번에는 Artifact Registry 화면에서 배포한다.




  • 포트는 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_ENABLEDtrue 로 하고 있기 때문에 분산 트레이싱 정보에 대해서도 이와 같이 표시된다.


    기타 보고서에 대해서도 평소대로 수집된다.


    요약



    APM의 Docker 컨테이너에의 통상의 인스톨 방법과 변함없이, 에이전트를 Dockerfile에 기재해, 나머지는 런타임에 임의의 New Relic의 환경 변수를 설정하면 OK. 부담없이 도입할 수 있었다.

    좋은 웹페이지 즐겨찾기