GKE 로그 관리

이 페이지에서는 Google Kubernetes Engine(GKE)에서 사용할 수 있는 로깅 옵션을 간략하게 설명합니다.

개요

클러스터에서 Cloud LoggingCloud Monitoring과 Kubernetes Engine Operations를 통합하면 로그가 전용 영구 데이터스토어에 저장됩니다. GKE는 자체적으로 로그를 저장하지만 이러한 로그는 영구적으로 저장되지 않습니다. 예를 들어 GKE 컨테이너 로그는 호스트 pod가 제거될 때, 로그가 저장된 디스크 공간이 부족할 때 또는 로그가 새 로그로 교체될 때 제거됩니다. 시스템 로그는 새 로그 공간을 확보하기 위해 주기적으로 제거됩니다. 클러스터 이벤트는 1시간 후에 제거됩니다.

컨테이너 로그와 시스템 로그의 경우, GKE는 기본적으로 컨테이너 로그를 읽고 유용한 메타데이터를 추가한 다음 저장하는 노드별 로깅 에이전트를 배포합니다. 로깅 에이전트는 다음 소스에서 컨테이너 로그를 확인합니다.

  • 컨테이너식 프로세스의 표준 출력 및 표준 오류 로그

  • kubelet 및 컨테이너 런타임 로그

  • VM 시작 스크립트 등 시스템 구성요소의 로그

이벤트의 경우, GKE는 이벤트를 자동으로 수집해 Logging으로 전송하는 kube-system 네임스페이스의 배포를 사용합니다.

수집되는 로그

기본적으로 GKE는 클러스터에 배포된 시스템 및 애플리케이션 워크로드의 로그를 수집합니다.

  • 시스템 로그 – 이러한 로그에는 관리자 활동 로그, 데이터 액세스 로그, 이벤트 로그를 비롯한 클러스터의 감사 로그가 포함됩니다. GKE의 감사 로그에 대한 자세한 내용은 GKE의 감사 로그 문서를 참조하세요. 일부 시스템 로그는 kube-system과 같이 컨테이너로 실행되며 애플리케이션 로그 수집 제어에 설명되어 있습니다.

  • 애플리케이션 로그 – Kubernetes 컨테이너가 STDOUTSTDERR에 작성된 워크로드의 로그를 수집합니다.

로그 수집

새 GKE 클러스터를 만들면 Cloud Logging 및 Cloud Monitoring과의 Kubernetes Engine Operations 통합이 기본적으로 사용 설정됩니다.

기존 Cloud Logging의 경우 Logging 통합을 사용 설정하거나 사용 중지하는 방법에 대한 문서를 따르세요.

로깅 기본값

사용 설정되면 전용 에이전트가 자동으로 배포 및 관리됩니다. GKE 노드에서 실행되어 로그를 수집하고 컨테이너, pod, 클러스터에 대한 유용한 메타데이터를 추가한 다음 로그를 Cloud Logging으로 전송합니다. 그러면 시스템 로그와 워크로드의 애플리케이션 로그가 모두 Cloud Logging의 로그 라우터에 전달됩니다.

그러면 로그가 Cloud Logging으로 내부 데이터화되거나 제외됩니다. 로그 라우터는 BigQuery, Pub/Sub 또는 Cloud Storage로 로그를 내보내는 선택적 단계를 제공합니다.

시스템 로그 전용 로그 수집 맞춤설정

GKE 버전 1.15.7부터 Kubernetes Engine Operations에서 시스템 로그만 캡처하고 애플리케이션 로그는 수집하지 않도록 구성할 수 있습니다.

커스텀 fluentd를 사용한 로그 수집

GKE의 기본 로깅 에이전트는 클러스터의 로그를 Cloud Logging으로 전송하는 에이전트를 배포하고 관리하는 관리형 솔루션을 제공합니다. fluentd 에이전트의 기본 동작을 변경하려면 맞춤설정된 fluentd 에이전트를 실행하면 됩니다.

일반적인 사용 사례는 다음과 같습니다.

  • 로그에서 민감한 정보 삭제

  • STDOUT 또는 STDERR에 기록되지 않은 추가 로그 수집

GKE 노드의 Linux auditd 로그 수집

컨테이너 최적화 OS를 실행하는 Google Kubernetes Engine 노드에서 상세 운영체제 감사 로그를 사용 설정할 수 있습니다. 노드의 운영체제 로그는 오류 메시지, 로그인 시도, 바이너리 실행과 같은 클러스터 및 워크로드 상태의 중요한 정보를 제공합니다. 이 정보를 사용하여 문제를 디버깅하거나 보안 이슈를 조사할 수 있습니다.

자세한 내용은 GKE 노드에서 Linux 감사 로그 사용 설정을 참조하세요.

GKE 감사 로그

Kubernetes 클러스터 및 GKE 클러스터 작업 리소스 유형에 적용되는 로그 항목에 대한 자세한 내용은 감사 로깅을 참조하세요.

로깅 액세스 제어

로깅 액세스 제어의 두 가지 측면은 애플리케이션 액세스와 사용자 액세스입니다. Cloud Logging은 적절한 액세스 권한을 부여하는 데 사용할 수 있는 IAM 역할을 제공합니다.

애플리케이션 액세스

애플리케이션에 IAM 역할을 사용하려면 애플리케이션의 서비스 계정에 IAM 역할 roles/logging.logWriter를 할당하면서 부여된 로그를 작성할 수 있어야 합니다. GKE 클러스터를 만들면 roles/logging.logWriter 역할이 기본적으로 사용 설정됩니다.

사용자 보기 액세스

프로젝트에서 로그를 보려면 roles/logging.viewer 역할이 있어야 합니다. 데이터 액세스 로그에 액세스해야 하는 경우 logging.privateLogViewer IAM 권한이 있어야 합니다.

권한 및 역할에 대한 자세한 내용은 액세스 제어 가이드를 참조하세요. Cloud 감사 로그 권장사항 문서도 살펴보세요. 이 문서는 일반적으로 Cloud Logging에도 적용됩니다.

사용자 관리자 액세스

IAM 역할 roles/logging.configWriterroles/logging.admin은 관리 기능을 제공합니다. 로그를 특정 또는 중앙 집중식 프로젝트로 보내는 데 일반적으로 사용되는 로깅 싱크를 만들려면 roles/logging.configWriter IAM 역할이 필요합니다. 예를 들어 로깅 필터와 함께 로깅 싱크를 사용하여 네임스페이스의 모든 로그를 중앙 집중식 로깅 버킷으로 전달할 수 있습니다.

자세한 내용은 Cloud Logging의 액세스 제어 가이드를 참조하세요.

권장사항

  • 구조화된 로깅: 표준 출력이나 표준 오류에 쓰인 한 줄짜리 JSON 문자열은 구조화된 로그 항목으로 Google Cloud의 작업 제품군에 읽힙니다. 자세한 내용은 구조화된 로깅을 참조하세요. 고급 로그 필터를 사용하여 필드를 기반으로 로그를 필터링할 수 있습니다.
  • 심각도: 기본적으로 표준 출력에 쓰이는 로그는 INFO 수준이고, 표준 오류에 쓰이는 로그는 ERROR 수준입니다. 구조화된 로그에는 로그의 심각도를 정의하는 severity 필드가 포함될 수 있습니다.
  • BigQuery로 내보내기: 추가 분석을 위해 BigQuery 또는 Pub/Sub와 같은 외부 서비스로 로그를 내보낼 수 있습니다. BigQuery로 내보낸 로그는 형식과 구조를 유지합니다. 자세한 내용은 로그 내보내기 개요를 참조하세요.
  • 알림: 로그 기반 측정항목을 사용하여 Logging에서 예상치 못한 동작을 로깅할 때 알림 정책을 설정할 수 있습니다. 예시는 카운터 측정항목에 관한 간단한 알림 정책 만들기를 참조하세요. 로그 기반 측정항목에 대한 자세한 내용은 로그 기반 측정항목 개요를 참조하세요.
  • 오류 보고: Error Reporting을 사용하여 클러스터에서 발생한 오류를 수집할 수 있습니다.