오류 보고

이 가이드에서는 Google Stackdriver Error Reporting를 사용하여 Python Bookshelf 애플리케이션에서 처리되지 않은 예외를 보고하고 추적하는 방법을 보여줍니다.

Stackdriver Error Reporting은 애플리케이션의 오류를 집계합니다. 각 고유한 오류의 수, 스택 추적, 발생 내역을 보여주는 중앙 집중형 대시보드를 제공합니다. 또한 새로운 오류가 발생할 때 알림을 받도록 설정할 수도 있습니다.

이 페이지는 여러 페이지로 구성된 가이드의 일부입니다. 처음부터 시작하여 설정 안내를 보려면 Python Bookshelf 앱으로 이동하세요.

설정 구성

이 섹션에서는 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. 페이지 상단의 삭제 버튼을 클릭하여 앱 버전을 삭제합니다.

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

오류 시뮬레이션

Stackdriver Error Reporting의 실제 작동 모습을 보려면 의도적으로 코드에 오류를 삽입하여 Error Reporting 콘솔에서 예외를 볼 수 있습니다.

bookshelf/crud.py에서 정의되지 않은 변수에 액세스하는 작업을 추가하면 색인 뷰에서 ReferenceError가 발생합니다.

@crud.route("/")
def list():
    x[3]

이제 앱을 다시 배포합니다.

gcloud app deploy

색인 페이지에 액세스하여 오류를 발생시킵니다.

gcloud app browse

An internal error occurred가 표시됩니다.

Google Cloud Platform 콘솔에서 Stackdriver > 오류 신고를 선택합니다.

오류 신고로 이동

대시보드에 오류가 나열됩니다.

오류 보기

그런 다음 오류를 클릭하여 마지막으로 본 시간, 발생한 횟수, 발생 횟수에 대한 히스토그램, 스택 추적에 대한 세부정보를 볼 수 있습니다.

코드 이해하기

처리되지 않은 예외를 보고하기 위해 코드는 Flask errorhandler 데코레이터를 사용한 다음 Google Cloud Python 클라이언트를 사용하여 Stackdriver Error Reporting에 예외를 보고합니다.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

클라이언트는 자동으로 역추적 정보를 추가하고, 도우미 함수를 사용하여 Flask 요청에서 관련 요청 세부정보를 추출합니다. 이렇게 하면 애플리케이션에서 보고되지 않은 InternalServerError HTTP 500 예외에 대해 Error Reporting에서 관련 스택 추적 및 HTTP 컨텍스트를 제공합니다.

500 오류 핸들러는 앱이 DEBUG 모드가 아닐 때만 트리거됩니다. 앱을 배포할 때는 DEBUG가 사용 중지되지만, 기본적으로 DEBUG는 로컬에서 사용 가능하므로 예외가 Error Reporting에 보고되지 않습니다. 대신 스택 추적 정보가 브라우저에 직접 렌더링됩니다. main.py에서 로컬 디버그 설정을 변경할 수 있습니다.

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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