워크플로에서 로그 수집

에어갭이 적용된 Google Distributed Cloud (GDC) 어플라이언스에서 로그를 수집하면 모니터링 및 문제 해결을 위해 워크플로에서 운영 이벤트를 집계할 수 있습니다. 관리 API 서버의 프로젝트 네임스페이스에 LoggingTarget 커스텀 리소스를 배포하여 서비스 구성요소에서 로그를 가져오고, 색인을 생성하고, 라벨을 지정합니다.

로그 수집을 구성한 후 Grafana 사용자 인터페이스에서 로그를 쿼리하고 볼 수 있습니다. 계측 권장사항은 Kubernetes 로깅 가이드라인을 참조하세요.

시작하기 전에

LoggingTarget 커스텀 리소스를 관리하는 데 필요한 권한을 얻으려면 조직 IAM 관리자 또는 프로젝트 IAM 관리자에게 연결된 LoggingTarget 역할 중 하나를 부여해 달라고 요청하세요.

필요한 액세스 및 권한 수준에 따라 조직 또는 프로젝트에서 이 리소스에 대한 생성자, 편집자 또는 뷰어 역할을 얻을 수 있습니다. 자세한 내용은 IAM 권한 준비를 참조하세요.

  • 애플리케이션 운영자: 관리 API 서버의 프로젝트에서 LoggingTarget 커스텀 리소스를 관리하는 데 필요한 권한을 얻으려면 프로젝트 IAM 관리자에게 프로젝트 네임스페이스에서 다음 역할 중 하나를 부여해 달라고 요청하세요.

    • LoggingTarget Creator: LoggingTarget 커스텀 리소스를 만듭니다. thought LoggingTarget 생성자 (loggingtarget-creator) 역할을 요청합니다.
    • LoggingTarget 편집자: LoggingTarget 커스텀 리소스를 수정합니다. LoggingTarget 편집자 (loggingtarget-editor) 역할을 요청합니다.
    • LoggingTarget 뷰어: LoggingTarget 커스텀 리소스를 봅니다. LoggingTarget 뷰어 (loggingtarget-viewer) 역할을 요청합니다.
  • 플랫폼 관리자: 관리 API 서버의 platform-obs 네임스페이스에서 LoggingTarget 커스텀 리소스를 관리하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 platform-obs 네임스페이스에서 다음 클러스터 역할 중 하나를 부여해 달라고 요청하세요.

    • LoggingTarget PA Creator: LoggingTarget 커스텀 리소스를 만듭니다. LoggingTarget PA 생성자 (loggingtarget-pa-creator) 클러스터 역할을 요청합니다.
    • LoggingTarget PA 편집자: LoggingTarget 커스텀 리소스를 수정하거나 변경합니다. LoggingTarget PA 편집자 (loggingtarget-pa-editor) 클러스터 역할을 요청합니다.
    • LoggingTarget PA 뷰어: LoggingTarget 커스텀 리소스를 봅니다. LoggingTarget PA 뷰어 (loggingtarget-pa-viewer) 클러스터 역할을 요청합니다.

운영 로그 수집

운영 로그는 GDC의 애플리케이션 및 서비스에서 진행 중인 작업을 관리할 때 조건, 변경사항, 작업을 기록합니다. LoggingTarget 커스텀 리소스를 Management API 서버에 배포하여 프로젝트 수준에서 특정 서비스의 운영 로그를 수집하는 시스템 로깅 파이프라인을 구성합니다.

서비스에서 운영 로그를 수집하려면 다음 단계를 완료하세요.

  1. Management API 서버에서 LoggingTarget 커스텀 리소스를 구성하여 운영 로그를 수집할 선택된 포드, 프로젝트 네임스페이스, 추가 설정을 지정합니다. LoggingTarget의 모양을 알아보려면 LoggingTarget 커스텀 리소스 구성을 참조하세요.
  2. Management API 서버의 프로젝트 네임스페이스에 LoggingTarget 커스텀 리소스를 배포합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f LOGGING_TARGET_NAME
    

    다음을 바꿉니다.

    • MANAGEMENT_API_SERVER: 영역 관리 API 서버의 kubeconfig 경로입니다.
    • LOGGING_TARGET_NAME: LoggingTarget 커스텀 리소스의 이름입니다(예: my-service-logging-target.yaml).

    파이프라인이 프로젝트의 추가 구성요소에서 로그를 수집하기 시작합니다.

  3. 프로젝트의 Grafana 인스턴스에서 로그를 쿼리합니다. 자세한 내용은 로그 쿼리 및 보기를 참조하세요.

서비스의 다양한 로그 수준에 Grafana의 기본 제공 색상 코딩 기능을 사용합니다. 로그 수준 값 설정에 대한 자세한 내용은 https://grafana.com/docs/grafana/latest/explore/logs-integration/을 참조하세요.

LoggingTarget 커스텀 리소스 구성

LoggingTarget 커스텀 리소스는 GDC 프로젝트 내의 특정 서비스에서 로그를 수집하도록 로깅 파이프라인에 지시합니다. 로그를 수집할 대상, 로그 파서, 액세스 수준, 추가 설정을 지정할 수 있습니다.

이 리소스는 다음 구성을 정의합니다.

  • 대상: 로그를 수집할 포드 및 컨테이너를 선택하는 기준입니다. 클러스터 이름, 포드 이름 프리픽스, 컨테이너 이름 프리픽스를 지정할 수 있습니다.
  • 로그 분석기: 로그 항목을 해석하고, 로그 출력을 라벨에 매핑하고, 관련 필드를 추출하는 사전 정의된 파서입니다.
  • 서비스 식별: 더 쉽게 식별하고 필터링할 수 있도록 로그 항목에 라벨로 적용되는 서비스 이름입니다.
  • 승인: 로그 항목의 액세스 수준으로, 수집된 로그를 볼 수 있는 사용자를 제어합니다.

LoggingTarget 커스텀 리소스 내에서 이러한 매개변수를 구성하면 서비스에서 로그 수집 및 구성을 정확하게 제어할 수 있습니다.

서비스에서 운영 로그를 수집하려면 다음 단계를 따르세요.

  1. 로그를 수집할 GDC 프로젝트를 결정합니다.
  2. LoggingTarget 구성에서 운영 로그를 수집할 포드, 프로젝트 네임스페이스, 추가 설정을 지정합니다.

    다음 YAML 파일은 my-project-namespace의 LoggingTarget 구성 예시를 보여줍니다. 여기서 로그를 수집할 포드 이름 프리픽스는 my-pod-prefix이고, 로그 항목의 액세스 수준은 애플리케이션 운영자 (ao)에게 부여되며, 서비스 이름은 my-service-name이고, 로그 형식은 JSON입니다.

    # Configures a log scraping job
    apiVersion: logging.gdc.goog/v1
    kind: LoggingTarget
    metadata:
      # Choose a namespace that matches the namespace of the workload pods.
      namespace: my-project-namespace
      name: my-service-logging-target
    spec:
      selector:
        matchPodNames:
          - my-pod-prefix
      parser: json
      logAccessLevel: ao
      serviceName: my-service-name
    

    추가 필드 및 옵션은 전체 LoggingTarget 사양 및 API 참고 문서를 참조하세요.

  3. 대상 포드와 동일한 네임스페이스 내의 Management API 서버에 LoggingTarget 구성을 적용합니다.

    kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yaml
    

    다음을 바꿉니다.

    • KUBECONFIG_PATH: Management API 서버의 kubeconfig 파일 경로
    • LOGGING_TARGET_NAME: LoggingTarget 정의 파일의 이름입니다(예: my-service-logging-target).

    로깅 파이프라인이 프로젝트의 추가 구성요소에서 로그를 수집하기 시작합니다.

Grafana 사용자 인터페이스 또는 Log Query API를 사용하여 수집된 로그를 쿼리할 수 있습니다. 자세한 내용은 로그 쿼리 및 보기를 참조하세요.

Grafana를 사용하여 로그를 쿼리하는 경우 서비스의 다양한 로그 수준에 기본 제공되는 색상 코딩 기능을 사용할 수 있습니다. 로그 수준 값 설정에 대한 자세한 내용은 https://grafana.com/docs/grafana/latest/explore/logs-integration/을 참조하세요.

LoggingTarget 사양 완료

다음 YAML 파일은 LoggingTarget 커스텀 리소스의 전체 사양에 대한 예시를 보여줍니다. 자세한 내용과 필드에 대한 전체 설명은 API 참고 문서를 참조하세요.

# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
  # Choose a namespace that matches the namespace of the workload pods.
  namespace: PROJECT_NAMESPACE
  name: LOGGING_TARGET_NAME
spec:
  # Choose a matching pattern that identifies the pods for this job.
  # Optional.
  # Relationship between different selectors: 'AND'
  selector:
    # The clusters to collect logs from.
    # The default configuration is to collect logs from all clusters.
    # The relationship between different clusters is an 'OR' relationship.
    # Optional
    matchClusters:
    - my-cluster
    - another-cluster

    # The pod name prefixes to collect logs from.
    # The logging platform scrapes all pods with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchPodNames:
      - my-pod-prefix
      - another-pod-prefix

    # The container name prefixes to collect logs from.
    # The logging platform scrapes all containers with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchContainerNames:
      - my-container-prefix
      - another-container-prefix

  # Choose the predefined parser for log entries.
  # Use parsers to map the log output to labels and extract fields.
  # Specify the log format.
  # Optional.
  # Options: klog_text, klog_json, klogr, gdch_json, json
  parser: klog_text

  # Specify an access level for log entries.
  # The default value is 'ao'.
  # Optional.
  # Options: ao, pa, io
  logAccessLevel: ao

  # Specify a service name to be applied as a label.
  # For user workloads consider this field as a workload name.
  # Required.
  serviceName: my-service-name

  # The additional static fields to apply to log entries.
  # The field is a key-value pair, where the field name is the key and
  # the field value is the value.
  # Optional.
  additionalFields:
    app: workload2
    key: value

다음을 바꿉니다.

  • PROJECT_NAMESPACE: 프로젝트 네임스페이스입니다.
  • LOGGING_TARGET_NAME: LoggingTarget 정의 파일의 이름입니다.