Python 스크립트를 사용하여 로그 항목 쓰기 및 쿼리

이 빠른 시작에서는 Cloud Logging의 몇 가지 기능을 소개하고 다음을 수행하는 방법을 보여줍니다.

  • Python 스크립트를 사용하여 로그 항목을 작성합니다.
  • Python 스크립트를 사용하여 로그 항목을 봅니다.
  • Python 스크립트를 사용하여 로그 항목을 삭제합니다.
  • Cloud Storage 버킷으로 로그를 라우팅합니다.

Logging은 로그 항목을 다음 대상으로 라우팅할 수 있습니다.

  • Cloud Storage 버킷
  • BigQuery 데이터 세트
  • Pub/Sub
  • Logging 버킷
  • Google Cloud 프로젝트

시작하기 전에

이 빠른 시작을 완료하려면 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 합니다. Google Cloud 프로젝트가 없거나 Google Cloud 프로젝트에 결제가 사용 설정되어 있지 않으면 다음을 수행하세요.
  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

이 빠른 시작에서는 Cloud Logging 및 Cloud Storage를 사용합니다. 이러한 리소스를 사용하면 비용이 발생할 수 있습니다. 빠른 시작을 마친 후에 계속 비용이 청구되지 않도록 하려면 만든 리소스를 삭제하면 됩니다. 자세한 내용은 이 페이지의 삭제를 참조하세요.

시작하기

Cloud Shell 환경이나 일반 Linux 환경을 사용해 이 빠른 시작을 완료할 수 있습니다. Python은 Cloud Shell에 사전 설치되어 있습니다.

Cloud Shell

  1. Cloud Shell을 열고 Google Cloud 프로젝트 구성을 확인합니다.

    1. Google Cloud 콘솔에서 Cloud Shell 활성화를 클릭합니다.

      Google Cloud 콘솔에서 Cloud Shell 아이콘을 클릭합니다.

      Cloud Shell이 창에서 열리고 환영 메시지가 표시됩니다.

      Cloud Shell 시작 메시지입니다.

    2. 시작 메시지에 구성된 Google Cloud 프로젝트 ID가 표시됩니다. 사용하려는 Google Cloud 프로젝트가 아니면 PROJECT_ID를 프로젝트 ID로 바꾼 후 다음 명령어를 실행합니다.

       gcloud config set project PROJECT_ID
      

Linux

  1. Python이 설치되어 있고 구성되었는지 확인합니다. Python 개발을 위해 머신을 준비하는 방법에 대한 자세한 내용은 Python 개발 환경 설정을 참조하세요.

  2. Cloud Logging 클라이언트 라이브러리를 설치합니다.

    pip install --upgrade google-cloud-logging
    
  3. Google Cloud 프로젝트에 대한 Identity and Access Management 권한을 설정합니다. 그 후 Google Cloud 프로젝트의 서비스 계정을 만든 다음, 파일을 만들고 Linux 워크스테이션에 다운로드합니다.

    1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

      서비스 계정으로 이동

      검색창을 사용하여 이 페이지를 찾은 경우 부제목이 IAM 및 관리자인 결과를 선택합니다.

    2. 빠른 시작 Google Cloud 프로젝트를 선택한 다음 서비스 계정 만들기를 클릭합니다.

      • 계정 이름을 입력합니다.
      • 계정 설명을 입력합니다.
      • 만들고 계속하기를 클릭합니다.
    3. 역할 선택 필드를 클릭하고 Logging 관리자를 선택합니다.

    4. 완료를 클릭하여 서비스 계정 만들기를 마칩니다.

    5. 키 파일을 만들고 워크스테이션에 다운로드합니다.

      • 서비스 계정에서 옵션 더보기를 클릭하고 키 관리를 선택합니다.
      • 창에서 키 추가를 클릭합니다.
      • 새 키 만들기를 클릭합니다.
      • 키 유형JSON을 선택한 후 만들기를 클릭합니다. 잠시 후 팝업 창에 아래와 비슷한 메시지가 표시됩니다.

        비공개 키가 컴퓨터에 저장됨

  4. Linux 워크스테이션에서 키 파일의 경로에 환경 변수 GOOGLE_APPLICATION_CREDENTIALS를 설정하여 애플리케이션에 사용자 인증 정보를 제공합니다. 예를 들면 다음과 같습니다.

     export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/FILE_NAME.json"
    

    이 환경 변수는 현재 셸 세션에만 적용되므로, 새 세션을 열면 변수를 다시 설정해야 합니다.

소스 클론

이 빠른 시작에서 Cloud Shell을 구성하려면 다음을 수행하세요.

  1. GitHub 프로젝트 python-logging를 클론합니다.

      git clone https://github.com/googleapis/python-logging
    

    samples/snippets 디렉터리에는 빠른 시작에서 사용하는 2개의 스크립트가 포함되어 있습니다.

    • snippets.py를 이용하면 로그의 항목을 관리할 수 있습니다.
    • export.py를 이용하면 로그 내보내기를 관리할 수 있습니다.
  2. snippets 디렉터리로 변경합니다.

      cd python-logging/samples/snippets
    

로그 항목 쓰기

snippets.py 스크립트는 Python 클라이언트 라이브러리를 사용해 Logging에 로그 항목을 씁니다. 명령줄에 write 옵션이 지정되어 있으면 스크립트가 다음 로그 항목을 씁니다.

  • 구조화되지 않은 데이터를 포함하며 심각도 수준이 지정되지 않은 항목
  • 구조화되지 않은 데이터를 포함하며 심각도 수준이 ERROR인 항목
  • JSON 구조화된 데이터를 포함하며 심각도 수준이 지정되지 않은 항목

my-log 로그에 새 로그 항목을 쓰려면 snippets.py 스크립트를 write 옵션과 함께 실행하세요.

python snippets.py my-log write

로그 항목 보기

Cloud Shell에서 로그 항목을 보려면 snippets.py 스크립트를 list 옵션과 함께 실행하세요.

python snippets.py my-log list

이 명령어가 완료되고 다음과 같은 결과가 표시됩니다.

    Listing entries for logger my-log:
    * 2018-11-15T16:05:35.548471+00:00: Hello, world!
    * 2018-11-15T16:05:35.647190+00:00: Goodbye, world!
    * 2018-11-15T16:05:35.726315+00:00: {u'favorite_color': u'Blue', u'quest': u'Find the Holy Grail', u'name': u'King Arthur'}

결과에 항목이 표시되지 않으면 명령어를 다시 시도합니다. Logging에서 로그 항목을 수신하고 처리하는 데 몇 분 정도 소요됩니다.

또한 로그 탐색기를 사용하여 로그 항목을 볼 수 있습니다. 자세한 내용은 로그 탐색기를 사용하여 로그 보기를 참조하세요.

로그 항목 삭제

my-log 로그에서 모든 로그 항목을 삭제하려면 snippets.py 스크립트를 delete 옵션과 함께 실행하세요.

python snippets.py my-log delete

이 명령어가 완료되고 다음과 같은 결과가 표시됩니다.

Deleted all logging entries for my-log.

로그 라우팅

이 섹션에서는 다음과 같은 작업을 수행하게 됩니다.

  • 데이터의 대상으로 사용할 Cloud Storage 버킷을 만듭니다.
  • 대상에 새 로그 항목을 복사하는 싱크를 만듭니다.
  • Cloud Storage 버킷의 권한을 업데이트합니다.
  • Logging에 로그 항목을 작성합니다.
  • 원하는 경우 Cloud Storage 버킷의 콘텐츠를 확인합니다.

대상 만들기

이 빠른 시작에서 사용하는 내보내기 대상은 Cloud Storage 버킷입니다. Cloud Storage 버킷을 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 버킷 페이지로 이동합니다.

    버킷으로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Cloud Storage인 결과를 선택합니다.

  2. 버킷 만들기를 클릭합니다.
  3. 버킷 이름을 입력합니다.
  4. 위치 유형에서 지연 시간이 가장 짧은 버킷 위치를 선택하는 리전을 선택합니다.
  5. 기본 스토리지 클래스에서 표준을 선택합니다.
  6. 액세스 제어에서 세분화를 선택합니다.
  7. 보호 도구에서 없음을 선택한 후 만들기를 클릭합니다.

이 빠른 시작에서는 Cloud Storage 버킷 이름인 myloggingproject-1을 사용합니다.

싱크 만들기

싱크란 Logging에서 새로 도착한 로그 항목을 대상으로 라우팅할지 여부를 결정하는 규칙입니다. 싱크에는 3가지 속성이 있습니다.

  • 이름
  • 대상
  • 필터

싱크에 관한 자세한 내용은 싱크를 참조하세요.

새로 도착한 로그 항목이 쿼리 조건을 충족하면 해당 로그 항목을 대상으로 라우팅합니다.

export.py 스크립트는 Python 클라이언트 라이브러리를 이용해 싱크를 만들고, 나열하고, 수정하고, 삭제합니다. 심각도가 INFO 이상인 모든 로그 항목을 Cloud Storage 버킷 myloggingproject-1로 내보내는 mysink 싱크를 만들려면 다음 명령어를 실행하세요.

python export.py create mysink myloggingproject-1 "severity>=INFO"

싱크를 보려면 export.py 스크립트를 list 옵션과 함께 실행하세요.

python export.py list

스크립트는 다음을 반환합니다.

    mysink: severity>=INFO -> storage.googleapis.com/myloggingproject-1

대상 권한 업데이트

export.py 스크립트를 사용하여 싱크를 만들어도 대상(이 경우, Cloud Storage 버킷)의 권한이 수정되지 않습니다. 싱크에 쓰기 권한을 부여하도록 Cloud Storage 버킷의 권한 설정을 변경해야 합니다. 서비스 계정, 액세스 범위, Identity and Access Management 역할에 대한 자세한 내용은 서비스 계정을 참조하세요.

Cloud Storage 버킷의 권한을 업데이트하는 방법은 다음과 같습니다.

  1. 싱크의 작성자 ID를 확인합니다.

    1. Google Cloud 콘솔에서 로그 라우터 페이지로 이동합니다.

      로그 라우터로 이동

      검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Logging인 결과를 선택합니다.

      싱크의 요약 표가 표시됩니다.

    2. 테이블에서 싱크를 찾고 메뉴를 선택한 다음 싱크 세부정보 보기를 선택합니다.

    3. 작성자 ID를 클립보드에 복사합니다.

  2. Google Cloud 콘솔에서 버킷 페이지로 이동합니다.

    버킷으로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Cloud Storage인 결과를 선택합니다.

  3. 버킷 이름을 클릭해 세부정보 뷰를 엽니다.

  4. 권한을 선택하고 액세스 권한 부여를 클릭합니다.

  5. 작성자 ID를 새 주 구성원 상자에 붙여넣습니다. 작성자 ID 주소에서 serviceAccount: 프리픽스를 삭제합니다.

  6. 역할Storage Object Creator로 설정한 후 저장을 클릭합니다.

자세한 내용은 대상 권한 설정을 참조하세요.

싱크 검증

싱크 및 대상이 올바르게 구성되었는지 확인하려면 다음을 수행합니다.

  1. my-log 로그에 새 로그 항목을 씁니다.

    python snippets.py my-log write
    
  2. Cloud Storage 버킷의 콘텐츠를 봅니다.

    1. Google Cloud 콘솔에서 버킷 페이지로 이동합니다.

      버킷으로 이동

      검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Cloud Storage인 결과를 선택합니다.

    2. 버킷 이름을 클릭해 세부정보 뷰를 엽니다. 세부정보 뷰에는 데이터가 포함된 폴더 목록이 표시됩니다. 버킷에 데이터가 없으면 다음 메시지가 표시됩니다.

      There are no live objects in this bucket.

      늦게 도착하는 로그 항목에 설명된 대로 첫 번째 항목이 대상에 나타나거나 구성 오류 알림을 받을 때까지 2~3시간이 걸릴 수 있습니다.

      버킷에 데이터가 수신되면 세부 보기에 다음과 유사한 결과가 표시됩니다.

      버킷 콘텐츠 상세 뷰

    3. 각 폴더의 데이터는 폴더 형태로 정리되며, 각 폴더는 로그 이름을 포함하는 최상위 폴더와 연도, 월, 일의 순서로 라벨이 지정되어 있습니다. 싱크에서 내보낸 데이터를 보려면 my-log라는 폴더 이름을 클릭한 후 json으로 끝나는 파일이 나올 때까지 연도, 월, 일 하위 폴더를 계속해서 클릭합니다.

      버킷 콘텐츠 하위 폴더 보기입니다.

    4. JSON 파일에는 Cloud Storage 버킷으로 내보낸 로그 항목이 들어 있습니다. 콘텐츠를 확인할 JSON 파일 이름을 클릭합니다. 다음과 유사한 콘텐츠가 표시됩니다.

       {"insertId":"yf1cshfoivz48",
       "logName":"projects/loggingproject-222616/logs/my-log",
       "receiveTimestamp":"2018-11-15T23:06:14.738729911Z",
       "resource":{"labels":{"project_id":"loggingproject-222616"},"type":"global"},
       "severity":"ERROR",
       "textPayload":"Goodbye, world!",
       "timestamp":"2018-11-15T23:06:14.738729911Z"}
      

      ERRORINFO보다 심각도 수준이 높으므로 'Goodbye, world!'라는 문자열을 포함한 로그 항목을 싱크 대상으로 내보냅니다. 작성된 다른 로그 항목은 INFO보다 낮은 심각도 수준이 기본값으로 설정되어 있기 때문에 대상으로 내보내지 않습니다.

문제 해결

Cloud Storage 버킷이 비어 있는 이유는 다음과 같습니다.

  • 버킷에서 데이터를 수신하지 않았습니다. 첫 번째 항목이 대상에 나타나거나 구성 오류 알림을 받을 때까지 2~3시간이 걸릴 수 있습니다. 자세한 내용은 로그 항목의 전달 지연을 참조하세요.

  • 구성 오류가 발생했습니다. 이 경우 다음 제목과 유사한 이메일 메시지를 받게 됩니다.

     [ACTION REQUIRED] Logging export config error in myloggingproject.

    이메일 본문의 콘텐츠에 구성 문제가 설명되어 있습니다. 예를 들어 대상 권한을 업데이트하지 않으면 이메일에 다음과 같은 오류 코드가 표시됩니다.

     bucket_permission_denied

    이러한 특정 조건을 수정하려면 이 페이지의 대상 권한 업데이트를 참조하세요.

  • 싱크가 생성된 후에는 로그 항목이 기록되지 않았습니다. 싱크는 새로 도착한 로그 항목에만 적용됩니다. 이 상황을 해결하려면 다음 명령어로 새 로그 항목을 작성하세요.

     python snippets.py my-log write
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. (선택사항) 만들었던 로그 항목을 삭제합니다. 로그 항목을 삭제하지 않으면 로그 항목이 만료된 후에 삭제됩니다. 할당량 및 한도를 참조하세요.

    my-log 로그에서 모든 로그 항목을 삭제하려면 다음 명령어를 실행하세요.

     python snippets.py my-log delete
    
  2. Google Cloud 프로젝트를 삭제하거나 빠른 시작 리소스를 삭제합니다.

    • Google Cloud 프로젝트를 삭제하려면 Google Cloud 콘솔 프로젝트 정보 창에서 프로젝트 설정으로 이동을 클릭한 후 종료를 클릭합니다.

    • 빠른 시작 리소스를 삭제하는 방법은 다음과 같습니다.

      1. 다음 명령어를 실행해 싱크를 삭제합니다.

        python export.py delete mysink
        
      2. Cloud Storage 버킷을 삭제합니다. Google Cloud 콘솔로 이동하여 스토리지 > 버킷을 클릭합니다. 버킷 이름 옆의 체크박스를 선택한 후 삭제를 클릭합니다.

다음 단계