데이터 엔지니어링

GCP Cloud Logging으로 로그 관리하기

들어가며

안녕하세요. NNT Tech 팀입니다. Google Cloud Platform (GCP)은 탁월한 스케일링 및 관리 기능을 제공하는 클라우드 서비스입니다. 클라우드에서 애플리케이션을 운영할 때 가장 중요한 측면 중 하나는 로그를 수집하는 것입니다. 이 글에서는 GCP의 Cloud Logging과 Audit Logging 기능과 활용 방안에 대해 소개하겠습니다.

Cloud Logging 이란?

Cloud Logging은 GCP의 VM 인스턴스, 애플리케이션, 데이터베이스와 같은 다양한 소스에서 발생하는 로그 데이터를 쉽게 수집, 저장, 분석 및 액세스할 수 있는 로깅 관리 시스템입니다. 로그 데이터를 BigQuery, Cloud Storage, Pub/Sub 등으로 보낼 수 있는 기능을 제공하여 보다 복잡한 분석과 데이터 처리 작업을 가능하게 합니다.

Cloud Monitoring의 로그 탐색기에서 전체 로그를 확인할 수 있습니다.

Cloud Logging

로그 탐색기 주요 기능

1. 로그 데이터 수집 및 저장

Google Cloud의 로그 탐색기는 자동으로 다양한 서비스에서 생성된 로그 데이터를 수집하고 저장합니다. 예를 들어 Compute Engine, App Engine, Cloud Functions 등의 서비스에서 생성된 로그들이 이에 해당합니다. 또한, 사용자는 자신의 커스텀 로그 데이터를 API를 통해 직접 전송할 수도 있습니다. 다양한 애플리케이션의 로깅 요구사항을 유연하게 수용할 수 있도록 설계되어있기 때문에 사용자의 필요에 맞게 로그를 저장할 수 있습니다.

2. 실시간 로그 분석

로그 탐색기는 로그 데이터를 거의 실시간으로 분석합니다. 사용자는 로그에 대한 복잡한 쿼리를 실행하여 애플리케이션의 성능을 모니터링하고 문제를 신속하게 진단할 수 있습니다. 이 기능은 시스템의 성능을 실시간으로 파악하고, 필요한 조치를 즉각적으로 취할 수 있도록 지원하여 시스템의 안정성과 가용성을 높입니다.

3. 통합 대시보드

Cloud Logging과 Monitoring 서비스는 통합되어 있기 때문에 로그 데이터와 성능 메트릭을 동시에 볼 수 있는 통합 대시보드를 구성할 수 있습니다. 애플리케이션과 인프라의 성능을 관리하는 동시에 리소스 사용량을 모니터링할 수 있어서 비효율적인 리소스 사용이나 예상치 못한 비용 증가를 빠르게 감지하고 조치를 취할 수 있습니다. 이를 통해 리소스 사용 최적화와 비용 효율성을 도모할 수 있으며, 전체적인 클라우드 비용 관리를 개선하는 데 활용할 수 있습니다.

4. 로그 기반 알림

사용자는 특정 로그 이벤트에 대해 알림을 설정할 수 있으며, 시스템의 이상 상태, 에러 또는 기타 중요한 이벤트를 즉시 감지할 수 있습니다. 예를 들어 예상치 못한 에러 로그가 발생하거나, 트래픽 급증과 같은 비정상적인 행동을 감지할 때 자동으로 알림을 받을 수 있습니다. 알림 채널로는 이메일, SMS, Slack 등을 설정할 수 있으며, 이를 통해 신속하게 문제를 파악하고 해결할 수 있습니다.

5. 보안 및 컴플라이언스

로그 데이터는 Google Cloud의 고급 보안 기술에 의해 보호됩니다. 모든 로그 데이터는 암호화되어 저장되며, Google Cloud는 ISO/IEC 27001, GDPR 등 다양한 국제적인 보안 및 프라이버시 표준을 준수하고 있습니다. 이는 고객 데이터의 보안을 보장하고, 규제 준수 요구사항을 충족시키는데 중요한 역할을 합니다.

로그 탐색기 검색

Cloud Logging - Search

로그 탐색기에서 로그를 클릭하면 해당 로그의 필드들을 확인할 수 있습니다. 이 필드의 값을 이용해 로그를 검색할 수 있습니다.

Cloud Logging - Search

왼쪽의 로그 필드에서 원하는 요소를 선택할 수 있고, 오른쪽의 검색어 보기를 선택하면 쿼리 언어를 사용해 로그를 검색할 수 있습니다.

로깅 쿼리 언어

Logging 쿼리 언어를 사용하여 로그 탐색기에서 원하는 로그만 검색하여 볼 수 있습니다. 주로 사용되는 필드는 아래와 같습니다. 모든 필드는 본 공식 문서에서 확인할 수 있습니다.

1. httpRequest: 로그에 HTTP 요청에 관련된 세부 정보를 포함합니다. 이 필드는 요청 method, URL, 상태 코드, User Agent 등과 같은 HTTP 요청의 속성을 포함할 수 있습니다.
2. jsonPayload: JSON 형식의 로그 데이터를 포함합니다. 로그 이벤트에 대한 상세 정보를 제공합니다.
3. labels: 로그 레코드에 첨부된 key-value 쌍의 메타데이터를 포함합니다. 이러한 라벨을 사용해 로그를 필터링하거나 특정 리소스나 환경에 대한 로그를 구별할 수 있습니다.
4. logName: 로그의 고유한 이름입니다. 로그가 어떤 로그 스트림에 속하는지 식별하는 데 사용됩니다.
5. metadata: 로그에 대한 추가 메타데이터를 포함합니다. 예를 들어 로그가 작성된 시간, 리소스의 종류, 로그 레코드가 적용되는 프로젝트 등의 정보가 여기에 포함될 수 있습니다.
6. operation: 로그가 속한 연산 (API 요청 처리 등) 에 대한 정보를 제공합니다. 연산의 시작과 끝을 표시하고, 연관된 로그들을 그룹화하는 데 사용됩니다.
7. protoPayload: Protocol Buffers 형식의 메시지를 포함한 로그 데이터입니다. 이 필드는 특히 API 로그에서 자주 사용되며, 호출된 API와 관련된 매개변수 및 반환 값들을 포함합니다. Audit Log의 경우 이 필드에 AuditLog 객체가 포함됩니다.
8. severity: DEFAULT, DEBUG, INFO, WARNING, ERROR, CRITICAL 등 로그의 심각도 수준을 나타냅니다. 등호(=)와 부등호(>, > = 등)을 사용하여 심각도 수준을 필터링할 수 있습니다.
9. sourceLocation: 로그 이벤트가 발생한 소스 코드의 위치 정보를 포함합니다. 파일 이름, 라인 번호, 함수 이름 등을 나타내고 있어서 로그 이벤트가 발생한 코드의 위치를 파악하는 데 유용합니다.
10. textPayload: 사용자 정의 로그에서 사용자가 지정한 로그의 상세 내용을 나타냅니다. 이 필드를 통해 특정 상황에서 로그를 출력하고, 해당 로그를 탐지하여 알림을 보내는 용도로 활용할 수 있습니다.
11. SEARCH(“text”)키워드를 이용하면 로그의 텍스트에서 해당 문자열이 포함된 로그를 검색할 수 있습니다.

저장 및 추천 탭

저장
– 자주 사용하는 쿼리 언어를 저장해두고 사용할 수 있습니다. 쿼리 창에서 쿼리 입력 후 저장 버튼을 눌러 저장합니다. 이후 저장 탭에서 해당 쿼리 언어의 스트림을 확인하거나, 직접 실행할 수 있습니다.

Cloud Logging - Save
Cloud Logging - Save

추천
추천 탭에서 현재 프로젝트의 리소스를 기준으로 생성한 추천 쿼리를 볼 수 있습니다.

Cloud Logging - Recommend

로그 기반 알림 정책 생성

로그 탐색기의 알림 만들기 버튼을 클릭하여 로그 기반 알림 정책을 생성할 수 있습니다.

Cloud Logging - Alert
Cloud Logging - Alert

Choose logs to include in the alert 섹션에서 로깅 쿼리 언어를 사용하여 탐지할 로그를 선택합니다. Preview logs를 선택해 해당 쿼리 언어로 검색되는 로그들을 확인할 수 있습니다.

필요한 경우 알림 채널을 생성하여 해당 로그가 발생했을 때 원하는 채널로 알림을 발송할 수 있습니다.

저희 팀에서는 VM 인스턴스의 CPU 사용량이 기준치를 초과하거나, 서버가 다운되었을 때 알림을 보내고 있는데요, 일정 시간이 지나도 해당 알림 정책이 해결되지 않은 경우 로그를 출력하여 슬랙으로 2차 알림 메시지를 전송하는 데 사용하고 있습니다.

Cloud Logging - Alert

로그 기반 측정항목

로그 기반 측정항목을 생성하여 특정 메시지가 포함된 로그의 개수를 세거나, 로그에 기록된 지연 시간 정보 등을 추출할 수 있습니다. 로그 기반 측정항목에는 시스템 정의 측정항목사용자 정의 측정항목이 있습니다.

시스템 정의 측정항목: 로그 버킷에 저장된 로그 개수나 내보낸 바이트 수와 같은 사용량 값에 대한 측정항목 집합을 제공합니다.
사용자 정의 측정항목: 모든 로그 중 특정 필터와 일치하는 로그의 개수를 세는 등 사용자가 직접 측정항목을 정의하여 생성합니다.

데이터 유형

로그 기반 측정항목의 데이터 유형으로는 아래 두 가지가 있습니다.

Counter: 특정 기간 내에 지정된 필터와 일치하는 로그 항목 개수를 카운트합니다.
– 예를 들어 user USERNAME called OPERATION 이라는 패턴을 정의했다면, 이후 USERNAME과 OPERATION이라는 라벨에 대해 “sallyupdate 작업을 몇 번 호출했나요?’, “몇 명이 read 작업을 호출했나요?” 등과 같은 질문을 생성할 수 있습니다.

Distribution: 지정된 필터와 일치하는 로그 항목에서 숫자 데이터를 수집합니다. 지연 시간과 같은 ‘값’을 추출하기 위해 사용합니다.
– 분산 측정항목은 특정 필터와 일치하는 로그 항목의 숫자 데이터를 누적합니다. 예를 들어 분산에 있는 값의 수, 여러 값의 평균 등을 포함할 수 있습니다.
– 일반적인 용도는 지연 시간을 추적하는 것입니다. 각 로그 항목이 수신될 때 지연 시간 값이 추출되어 분산에 추가됩니다. 누적된 분산이 일정한 간격으로 Cloud Monitoring에 기록됩니다.

대부분의 시스템 정의 측정항목은 Counter 유형이며, 사용자 정의 측정항목은 Counter 또는 Distribution을 사용하여 생성할 수 있습니다. 필터와 일치하는 로그가 수신될 때마다 로그 기반 측정항목에 관한 정보를 수집하여 Cloud Monitoring으로 전송합니다.

저희 팀에서는 Counter 유형을 활용하여 두 가지 로그 기반 측정항목을 생성하였습니다. 데이터를 수집하는 Cloud Tasks에서 3번 이상의 재시도가 발생하는 경우와, 서버 배포가 성공적으로 끝난 경우를 확인하는데 사용하고 있습니다.

Cloud Logging - Measure

Cloud Monitoring의 차트 및 알림 정책

Cloud Monitoring에서 로그 기반 측정항목을 사용하여 차트와 알림 정책을 생성할 수 있습니다.

1. 차트

대시보드 구성 방법은 본 문서에서 확인할 수 있습니다.

Cloud Monitoring에서 대시보드에 들어가면 커스텀 대시보드를 구성할 수 있습니다. 위젯 추가를 눌러 생성한 측정항목을 위젯으로 측정해 모니터링할 수 있습니다.

Cloud Logging - Chart
Cloud Logging - Chart

2. 알림 정책

로그 기반 측정항목에서 생성된 측정항목을 선택하여 측정항목 알림 생성을 선택합니다.

Cloud Logging - Alert

해당 측정항목에 대한 알림 정책을 생성합니다.

Cloud Logging - Alert

업타임 체크 기능

Cloud Monitoring의 업타임 체크 기능을 활용하면 애플리케이션의 동작 여부를 모니터링할 수 있습니다.

Cloud Monitoring - Uptime Check
Cloud Monitoring - Uptime Check

URL, Internal IP, Load Balancer, App Engine, Instance 등 여러 리소스에 대해 업타임 체크를 생성할 수 있습니다.

Cloud Monitoring - Uptime Check
Cloud Monitoring - Uptime Check

설정한 경로에 Check Frequency마다 요청을 보내 원하는 응답이 발생하는지 확인합니다.

Cloud Monitoring - Uptime Check

업타임 체크를 생성하면 자동으로 알림 정책이 생성되어, 설정한 알림 채널로 즉시 알림을 받아 신속하게 문제를 파악할 수 있습니다.

Audit Logging

Audit Logging은 사용자와 시스템이 Google Cloud 리소스에 수행한 작업을 실시간으로 기록합니다. 이는 보안 및 규정 준수를 위한 필수적인 도구로, 누가, 언제, 무엇을 했는지에 대한 상세한 로그를 제공합니다. GCP에서 제공하는 Admin Activity, Data Access, System Event, Policy Denied 로그 유형을 통해 세밀한 감사 추적과 분석이 가능합니다. 기업 내에서 Audit Log를 활용하여 더 높은 수준의 운영 효율성과 보안을 갖출 수 있습니다.

1. 관리자 활동 (Admin Activity)

API 호출이나 리소스의 구성 또는 메타데이터를 수정하는 등의 관리 작업과 관련된 로그 항목이 포함됩니다. 예를 들어 VM 인스턴스를 생성하거나, IAM 권한을 변경하면 로그가 기록됩니다. 관리자 활동 로그는 항상 기록되며, 사용자가 구성하거나 사용 중지할 수 없습니다. 물론 요금도 청구되지 않습니다.

관리자 활동 로그를 보려면 roles/logging.viewer 권한을 갖고 있어야 합니다.

2. 데이터 접근 (Data Access)

리소스의 구성 또는 메타데이터를 읽는 API 호출뿐만 아니라, 사용자가 제공한 리소스 데이터를 생성, 수정 또는 읽는 사용자 주도 API 호출을 포함하는 로그입니다. 공개적으로 공유되거나 Google Cloud에 로그인하지 않고도 접근할 수 있는 리소스의 데이터 접근 작업은 로그에 기록되지 않습니다. 데이터 접근 로그는 기본적으로 사용 중지되어 있으며, 사용을 설정하면 사용량에 따른 요금이 청구됩니다.

데이터 접근 로그를 보려면 roles/logging.privateLogViewer 권한을 갖고 있어야 합니다.

3. 시스템 이벤트 (System Event)

리소스 구성을 수정하는 관리 작업의 로그 항목을 포함합니다. 시스템 이벤트 로그는 Google 시스템에서 생성되며, 사용자의 직접적인 작업을 통해 생성되지 않습니다. 시스템 이벤트 로그는 항상 기록되며, 사용자가 구성하거나 사용 중지할 수 없습니다. 요금도 청구되지 않습니다.

시스템 이벤트 로그를 보려면 roles/logging.viewer 권한을 갖고 있어야 합니다.

4. 정책 거부 (Policy Denied)

보안 정책 위반으로 인해 Google Cloud 서비스가 사용자 또는 서비스 계정에 대해 액세스를 거부할 때 기록되는 로그입니다. 정책 거부 로그는 항상 기록되고, 사용 중지할 수 없습니다. 로그 스토리지에 대한 요금이 청구됩니다. 하지만, 제외 필터를 사용하여 정책 거부 로그가 Cloud Logging에 저장되지 않게 할 수 있습니다.

정책 거부 로그를 보려면 roles/logging.viewer 권한을 갖고 있어야 합니다.

Audit Log 확인

로그 탐색기에서 아래 쿼리를 실행합니다.

protoPayload.”@type”=”type.googleapis.com/google.cloud.audit.AuditLog”
logName=~”activity”

protoPayload 필드에서 AuditLog 객체를 검색하고 , logName에 activity 가 포함된 로그를 찾습니다. 각 감사 로그의 logName은 아래와 같습니다.

– 관리자 활동 로그: activity
– 데이터 접근 로그: data_access
– 시스템 이벤트 로그: system_event
– 정책 거부 로그: policy

로그 필드의 리소스 유형에서 “감사를 받은 리소스”를 선택하여 검색하는 방법도 있습니다.

예를 들어 아래 로그와 같이 알림 정책을 수정한 작업에 대한 로그를 확인할 수 있습니다.

Audit Logging

더욱 심화된 감사 로그에 대한 설명은 본 문서에서 확인할 수 있습니다.

주요 사용 사례

1. 보안 모니터링 및 사고 대응

Audit Log는 보안 사고가 의심되거나 발생했을 때 중요한 정보를 제공합니다. 특정 시간대에 어떤 사용자가 어떤 작업을 수행했는지 파악할 수 있으며, 이는 비정상적인 활동을 탐지하고 조사하는 데 유용합니다. 의심스러운 API 호출이 감지되었을 때, Audit Log를 검토하여 해당 API 호출을 한 사용자, 시간, 실행된 명령어 및 그 결과를 확인할 수 있습니다.

2. 구성 변경 추적

Audit Log는 GCP 리소스에 대한 모든 구성 변경 사항을 기록합니다. 이 정보를 통해 리소스가 언제 어떻게 변경되었는지 추적할 수 있으며, 문제가 발생했을 때 변경 사항을 되돌릴 수 있습니다. 예를 들어, 클라우드 스토리지 버킷의 권한 설정이 변경되었을 때, 누가 언제 해당 사항을 변경했는지 파악하고, 필요한 경우 조치를 취할 수 있습니다.

3. 규정 준수 보고 및 감사

조직 내에서 업계 규정 준수 요구 사항을 충족하기 위해 운영 내역을 기록하고 보고해야 하는 경우가 있을 것입니다. 이때 Audit Log의 기록을 활용할 수 있습니다. 예를 들어, 금융 서비스 기업이 PCI-DSS 또는 HIPAA와 같은 규정 준수 요구 사항을 만족하기 위해 모든 데이터 액세스 기록을 유지해야 할 경우, Audit Log를 사용하여 이러한 정보를 체계적으로 기록하고 검토할 수 있습니다.

4. 리소스 사용 분석

Audit Log는 리소스 사용 패턴을 분석하는 데 사용할 수 있습니다. 이를 활용하여 시스템의 효율성을 평가하고, 필요한 경우 리소스를 조정하여 비용을 절감할 수 있습니다. 예를 들어, Cloud Functions의 실행 횟수와 사용된 컴퓨팅 자원을 분석하여 자원 할당을 최적화하고 비용을 관리하는 데 사용할 수 있습니다.

5. 자동화된 경고 및 알림

Audit Log와 통합된 Cloud Monitoring을 사용하여 특정 이벤트 또는 활동이 발생했을 때 자동으로 알림을 생성하여 즉각적인 조치를 취할 수 있습니다. 예를 들어, 비정상적인 리소스 삭제나 생성 시 즉시 이메일이나 SMS로 알림을 받도록 설정할 수 있습니다.

Conclusion

Cloud Logging과 Audit Logging은 구글 클라우드 플랫폼에서 운영 효율성을 높이고 보안을 강화하는 데 핵심적인 역할을 합니다. Cloud Logging은 실시간 로그 분석을 통해 문제를 빠르게 파악하고 대응할 수 있게 도와주며, Audit Logging은 사용자의 활동을 기록하여 보안 문제에 신속하게 대응할 수 있게 합니다. 로깅 시스템을 적극적으로 활용함으로써, 더 안정적이고 신뢰할 수 있는 서비스 환경을 구축할 수 있습니다.

Share this post

About the author

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다