Python으로 애플리케이션 이벤트 로깅

가이드의 이 부분에서는 앱에서 잠재적 문제를 감지, 디버깅, 모니터링하는 데 도움이 되는 상세 로깅을 통합하는 방법을 보여줍니다. 애플리케이션 이벤트를 로깅하면 개발 동안과 앱이 프로덕션 단계에 있을 때 문제를 파악하고 해결하는 데 도움이 됩니다.

이 페이지에서는 Bookshelf 애플리케이션을 앱 예로 사용합니다. Bookshelf 앱의 시작 부분에서 시작하려면 Python Bookshelf 앱으로 이동하세요. App Engine 가변형 환경, Google Compute Engine, Google Kubernetes Engine에 대한 코드 이해하기에서 소개한 Python 표준 로깅 핸들러를 사용할 수 있습니다.

설정 구성

이 섹션에서는 5-logging 디렉토리의 코드를 사용합니다. 이 디렉토리에서 파일을 수정하고 명령어를 실행하세요.

  1. 수정하기 위해 config.py를 엽니다.
  2. PROJECT_ID 값을 GCP 콘솔에 표시되는 프로젝트 ID로 설정합니다.
  3. DATA_BACKEND구조화된 데이터 사용 가이드에서 사용한 값과 같은 값으로 설정합니다.
  4. Cloud SQL 또는 MongoDB를 사용하는 경우, Cloud SQL 또는 Mongo 섹션의 값을 구조화된 데이터 사용 단계에서 사용한 값과 같은 값으로 설정합니다.
  5. CLOUD_STORAGE_BUCKET 값을 Cloud Storage 버킷 이름으로 설정합니다.

  6. OAuth2 configuration 섹션에서 GOOGLE_OAUTH2_CLIENT_IDGOOGLE_OAUTH2_CLIENT_SECRET 값을 이전에 만든 애플리케이션 클라이언트 ID 및 비밀번호로 설정합니다.

  7. config.py를 저장하고 닫습니다.

Cloud SQL을 사용하는 경우 다음을 수행합니다.

  1. 수정하기 위해 app.yaml을 엽니다.
  2. cloud_sql_instances 값을 config.py CLOUDSQL_CONNECTION_NAME에 사용한 값과 같은 값으로 설정합니다. project:region:cloudsql-instance 형식이어야 합니다. 이 전체 줄의 주석 처리를 삭제합니다.
  3. app.yaml을 저장하고 닫습니다.

종속 항목 설치

다음 명령어를 입력하여 가상 환경을 만들고 종속 항목을 설치합니다.

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

로컬 머신에서 앱 실행:

  1. 로컬 웹 서버를 시작합니다.

    python main.py
    
  2. 웹브라우저에서 다음 주소를 입력합니다.

    http://localhost:8080

작업자를 종료한 다음 로컬 웹 서버를 종료하려면 Control+C를 누르세요.

App Engine 가변형 환경에 앱 배포

  1. 샘플 앱을 배포합니다.

    gcloud app deploy
    
  2. 웹브라우저에서 다음 주소를 입력합니다. [YOUR_PROJECT_ID]를 프로젝트 ID로 바꿉니다.

    https://[YOUR_PROJECT_ID].appspot.com
    

앱을 업데이트하는 경우 앱을 처음 배포할 때 사용한 같은 명령어를 입력하여 업데이트된 버전을 배포할 수 있습니다. 새로 배포하면 앱의 새 버전을 만들고 기본 버전으로 승격합니다. 이전 버전의 앱은 연결된 VM 인스턴스와 마찬가지로 유지됩니다. 이러한 모든 앱 버전과 VM 인스턴스는 청구 가능한 리소스입니다.

기본 이외의 앱 버전을 삭제하여 비용을 줄일 수 있습니다.

앱 버전을 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 App Engine 버전 페이지로 이동합니다.

    버전 페이지로 이동

  2. 삭제할 표준이 아닌 앱 버전 옆의 확인란을 클릭합니다.
  3. 페이지 상단의 삭제 버튼을 클릭하여 앱 버전을 삭제합니다.

청구 가능한 리소스 삭제에 대한 자세한 내용은 이 가이드의 마지막 단계에서 삭제를 참조하세요.

코드 이해하기

앱을 배포한 후에 앱이 얼마나 잘 작동하는지 이해하는 것이 중요합니다. Google Cloud Platform은 Google Cloud Platform 콘솔에 내장된 로깅 및 모니터링 도구를 제공하므로 앱의 세부 활동을 신속하게 볼 수 있으므로 중요한 문제나 트렌드를 파악하는 데 도움이 됩니다.

Bookshelf 샘플은 Python의 표준 로깅 라이브러리를 사용하여 요청 및 오류 로깅을 관리합니다.

앱은 다음 코드를 사용하여 어디서나 중요한 이벤트를 로깅할 수도 있습니다.

logging.info("Something happened");
logging.error("Something bad happened");

샘플 앱이 가변형 환경에서 실행될 때 stderrstdout에 로깅된 데이터는 Stackdriver Logging에서 자동으로 수집되며, GCP Console의 로그 뷰어에서 확인, 검색, 내보내기 용도로 사용될 수 있습니다.

로그 보기

샘플 앱을 배포한 후에는 로깅 데이터가 수집됩니다. 이 데이터는 GCP 콘솔에 내장된 로그 모니터링 도구를 사용하여 분석할 수 있습니다. 다음 그림에서는 GCP 콘솔에 로깅되는 이벤트를 보여줍니다.

콘솔의 로깅

보다 자세한 분석이 필요한 경우 앱 로그를 BigQuery로 스트리밍 또는 가져오거나 Google Cloud Storage 버킷으로 내보낼 수 있습니다. 두 작업 모두 GCP 콘솔 내에서 바로 수행할 수 있습니다.

Python 로깅 핸들러 사용

기본적으로 stdoutstderr에서 캡처된 로그 메시지는 심각도와 같은 메타데이터와 함께 캡처되지 않습니다. WARN이 포함된 로그 구문을 쿼리할 수 있지만, 결과에는 로깅 호출의 심각도와 상관없이 WARN 단어가 있는 구문이 모두 포함됩니다. 그러나 메타데이터가 올바르게 보고되는 경우, WARN 이상 수준에서 로깅된 로그 구문만 반환하도록 metadata.severity >= WARN 로깅 필터로 심각도가 WARN인 로그 메시지를 필터링할 수 있습니다.

Google Cloud Python SDK에는 Python 표준 로깅 핸들러가 포함되어 있어서 모든 logging 문이 올바른 메타데이터와 함께 Stackdriver Logging에 보고되도록 합니다. 다음 코드가 배포 환경에 따라 달라지는 기본 Stackdriver Logging 핸들러를 루트 로거에 연결합니다. App Engine 가변형 환경에서 Logging은 런타임과 함께 제공되는 fluentd 에이전트를 통해 로그를 보고합니다. 자세한 내용은 Cloud Python SDK 문서를 참조하세요.

if not app.testing:
    client = google.cloud.logging.Client(app.config['PROJECT_ID'])
    # Attaches a Google Stackdriver logging handler to the root logger
    client.setup_logging(logging.INFO)
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...