로그 및 측정항목

이 페이지에서는 Google Distributed Cloud Connected가 작업에 대한 다양한 유형의 정보를 로깅하는 방법과 해당 정보를 열람하는 방법을 설명합니다. 일부 유형의 로그 및 측정항목을 수집하면 추가 요금이 발생합니다. 자세한 내용은 로그 및 측정항목 청구를 참고하세요.

로깅 및 모니터링 구성

로그와 측정항목을 수집하기 전에 다음을 수행해야 합니다.

  1. 다음 명령어를 사용하여 로깅 API를 사용 설정합니다.

    gcloud services enable opsconfigmonitoring.googleapis.com --project PROJECT_ID
    gcloud services enable logging.googleapis.com --project PROJECT_ID
    gcloud services enable monitoring.googleapis.com --project PROJECT_ID
    

    PROJECT_ID를 대상 Google Cloud 프로젝트의 ID로 바꿉니다.

  2. 로그 및 측정항목을 작성하는 데 필요한 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/opsconfigmonitoring.resourceMetadata.writer \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/metadata-agent]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/logging.logWriter \
         --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver-log-forwarder]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/monitoring.metricWriter \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/gke-metrics-agent]"
    

    PROJECT_ID를 대상 Google Cloud 프로젝트의 ID로 바꿉니다.

로그

이 섹션에는 Distributed Cloud에서 지원하는 Cloud Logging 리소스 유형이 나열되어 있습니다. Distributed Cloud 로그를 보려면 Google Cloud 콘솔에서 로그 탐색기를 사용하세요. Distributed Cloud 로깅은 항상 사용 설정되어 있습니다.

Distributed Cloud 연결 로깅된 리소스 유형은 다음 표준 Kubernetes 리소스입니다.

  • k8s_container
  • k8s_node

Cloud Logging API를 사용하여 Distributed Cloud 연결 로그를 캡처하고 검색할 수도 있습니다. 이 로깅 메커니즘을 구성하는 방법에 대한 자세한 내용은 Cloud Logging 클라이언트 라이브러리 문서를 참고하세요.

측정항목

이 섹션에는 Distributed Cloud에서 지원하는 Cloud Monitoring 측정항목이 나열되어 있습니다. Distributed Cloud 측정항목을 보려면Google Cloud 콘솔에서 측정항목 탐색기를 사용합니다.

Distributed Cloud Connected 클러스터 측정항목

Distributed Cloud(연결형) 클러스터의 경우 Distributed Cloud(연결형)는 Distributed Cloud(연결형) 노드에서 생성된 다음 유형의 측정항목을 제공합니다.

  • 리소스 측정항목은 CPU 부하 및 메모리 사용량과 같은 Distributed Cloud 연결 노드 및 포드 성능에 관한 정보를 제공합니다.
  • 시스템 애플리케이션 측정항목coredns와 같은 Distributed Cloud Connected 시스템 워크로드에 관한 정보를 제공합니다.

이러한 측정항목 목록은 Google Distributed Cloud 및 Google Distributed Cloud 측정항목을 참고하세요.

Distributed Cloud connected는 Distributed Cloud connected 클러스터와 연결된 Kubernetes 컨트롤 플레인에서 생성된 측정항목을 제공하지 않습니다.

Distributed Cloud Connected 하드웨어 측정항목

분산 클라우드 연결은 다음 리소스 유형을 사용하여 분산 클라우드 연결 하드웨어의 측정항목을 제공합니다.

  • edgecontainer.googleapis.com/Machine

Machine 리소스 측정항목

Distributed Cloud connected는 edgecontainer.googleapis.com/Machine 리소스에 대해 다음 Cloud Monitoring API 측정항목을 기록합니다.

측정항목 설명
/machine/cpu/total_cores
  • 종류: GAUGE
  • 유형: INT
머신에 있는 물리적 프로세서 코어의 총수입니다.
/machine/cpu/usage_time
  • 종류: CUMULATIVE
  • 유형: DOUBLE
  • 단위: Seconds
머신에 있는 모든 코어의 누적 CPU 사용 시간입니다. 유형은 workload (고객 워크로드) 또는 system (기타 모든 항목)일 수 있습니다.
/machine/cpu/utilization
  • 종류: GAUGE
  • 유형: DOUBLE
머신의 CPU 사용률입니다. 범위는 0~1입니다. 유형은 workload (고객 워크로드) 또는 system (기타 모든 항목)일 수 있습니다.
/machine/memory/total_bytes
  • 종류: GAUGE
  • 유형: INT64
머신의 총 메모리 바이트 수입니다.
/machine/memory/used_bytes
  • 종류: GAUGE
  • 유형: INT64
머신에서 사용된 메모리의 바이트 수입니다. memory_typeevictable (커널에서 회수 가능) 또는 non-evictable (회수 불가능)입니다.
/machine/memory/utilization
  • 종류: GAUGE
  • 유형: DOUBLE
머신의 메모리 사용률입니다. 범위는 0~1입니다. memory_typeevictable (커널에서 회수 가능) 또는 non-evictable (회수 불가능)입니다.
/machine/network/up
  • 종류: GAUGE
  • 유형: BOOL
네트워크 인터페이스가 작동 중인지 여부를 나타냅니다. 기본 카드, 보조 카드, 포트를 포함합니다.
/machine/network/link_speed
  • 종류: GAUGE
  • 유형: DOUBLE
  • 단위: 초당 바이트 수
기본 네트워크 인터페이스 카드의 링크 속도입니다.
/machine/network/received_bytes_count
  • 종류: CUMULATIVE
  • 유형: DOUBLE
기본 네트워크 인터페이스 카드의 수신된 바이트 수입니다.
/machine/network/sent_bytes_count
  • 종류: CUMULATIVE
  • 유형: DOUBLE
기본 네트워크 인터페이스 카드의 전송된 바이트 수입니다.
/machine/network/connectivity
  • 종류: GAUGE
  • 유형: BOOL
기본 네트워크 인터페이스 카드가 인터넷에 연결되어 있는지 여부를 나타냅니다.
/machine/disk/total_bytes
  • 종류: GAUGE
  • 유형: INT64
머신의 총 디스크 공간의 바이트 수입니다.
/machine/disk/used_bytes
  • 종류: GAUGE
  • 유형: INT64
머신에서 사용된 디스크 공간의 바이트 수입니다.
/machine/disk/utilization
  • 종류: GAUGE
  • 유형: DOUBLE
머신의 디스크 공간 사용률입니다. 범위는 0~1입니다.
/machine/restart_count
  • 종류: CUMULATIVE
  • 유형: INT
머신이 다시 시작된 횟수입니다.
/machine/uptime
  • 종류: GAUGE
  • 유형: INT
  • 단위: Seconds
마지막으로 다시 시작한 후 머신 가동 시간입니다.
/machine/connected
  • 종류: GAUGE
  • 유형: INT64
머신이 Google Cloud에 연결되어 있는지 여부를 나타냅니다.

가상 머신 백업 작업 측정항목

Distributed Cloud connected는 가상 머신 백업 에이전트와 관련된 다음 측정항목을 수집하고 내보냅니다.

측정항목 설명
gdc_backup_backups_completed
  • 종류: COUNTER
성공적으로 완료된 가상 머신 백업 수입니다.
gdc_backup_backups_latency
  • 종류: HISTOGRAM
가상 머신 백업의 지연 시간(분)입니다.
gdc_backup_volume_backups_created
  • 종류: COUNTER
지금까지 생성된 볼륨 백업 수입니다.
gdc_backup_volume_backups_completed
  • 종류: COUNTER
지금까지 완료된 볼륨 백업 수입니다.
gdc_backup_restores_completed
  • 종류: COUNTER
지금까지 완료된 가상 머신 복원 수입니다.
gdc_backup_restores_latency
  • 종류: HISTOGRAM
가상 머신 복원의 지연 시간(분)입니다.
gdc_backup_volume_restores_created
  • 종류: COUNTER
지금까지 생성된 볼륨 복원 수입니다.
gdc_backup_volume_restores_completed
  • 종류: COUNTER
지금까지 완료된 볼륨 복원 수입니다.

Distributed Cloud connected는 가상 머신 백업 컨트롤 플레인과 관련된 다음 측정항목을 수집하고 내보냅니다.

측정항목 설명
gdc_backup_controlplane_live
  • 종류: GAUGE
백업 컨트롤 플레인이 작동하는지 여부를 나타냅니다.
gdc_backup_backup_repositories_attached
  • 종류: GAUGE
연결된 백업 저장소의 수입니다.
gdc_backup_backups_created
  • 종류: COUNTER
지금까지 생성된 가상 머신 백업 수입니다.
gdc_backup_backups_deleted
  • 종류: COUNTER
지금까지 삭제된 가상 머신 백업 수입니다.
gdc_backup_restores_created
  • 종류: COUNTER
지금까지 생성된 가상 머신 복원 수입니다.
gdc_gdc_backup_backups_pile_up
  • 종류: GAUGE
백업 계획이 진행 중인 백업 수 한도에 도달했는지 여부를 나타냅니다.

Distributed Cloud connected는 가상 머신 백업 기능의 청구와 관련된 다음 측정항목을 수집하고 내보냅니다.

측정항목 설명
metering_protected_resources_total
  • 소스: VM 백업 에이전트
  • 종류: COUNTER
현재까지 백업된 가상 머신의 총수입니다.
metering_deleted_resources_total
  • 소스: VM 백업 컨트롤 플레인
  • 종류: COUNTER
현재까지 삭제된 가상 머신 백업의 총수입니다.

맞춤 애플리케이션 로그 및 측정항목 내보내기

Distributed Cloud connected는 Distributed Cloud connected 워크로드에서 실행되는 애플리케이션의 로그를 자동으로 내보냅니다. Distributed Cloud 연결 워크로드에서 실행되는 애플리케이션의 측정항목을 내보내려면 다음 섹션에 설명된 대로 주석을 달아야 합니다.

측정항목 내보내기를 사용 설정하도록 워크로드에 주석 추가

애플리케이션에서 커스텀 측정항목 수집을 사용 설정하려면 다음 주석을 애플리케이션의 서비스 또는 배포 매니페스트에 추가합니다.

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "ENDPOINT_PATH". ENDPOINT_PATH을 타겟 애플리케이션의 측정항목 엔드포인트의 전체 경로로 바꿉니다.
  • prometheus.io/port: "PORT_NUMBER": 애플리케이션의 측정항목 엔드포인트가 연결을 리슨하는 포트입니다.

예시 애플리케이션 실행

이 섹션에서는 커스텀 로그를 작성하고 커스텀 측정항목 엔드포인트를 노출하는 애플리케이션을 만듭니다.

  1. 다음 서비스 및 배포 매니페스트를 my-app.yaml 파일에 저장합니다. 서비스에는 prometheus.io/scrape: "true" 주석이 있습니다.

    kind: Service
    apiVersion: v1
    metadata:
      name: "monitoring-example"
      namespace: "default"
      annotations:
        prometheus.io/scrape: "true"
    spec:
      selector:
        app: "monitoring-example"
      ports:
        - name: http
          port: 9090
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. 배포와 서비스를 만듭니다.

    kubectl --kubeconfig apply -f my-app.yaml

애플리케이션 로그 보기

콘솔

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 리소스를 클릭합니다.

  3. 모든 리소스 유형 목록에서 Kubernetes Container를 선택합니다.

  4. 클러스터 이름에서 사용자 클러스터의 이름을 선택합니다.

  5. 네임스페이스 이름default을 선택합니다.

  6. 추가를 클릭한 다음 쿼리 실행을 클릭합니다.

  7. 쿼리 결과 섹션에서 monitoring-example 배포의 로그 항목을 볼 수 있습니다. 예를 들면 다음과 같습니다.

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud

  1. gcloud logging read 명령어를 사용합니다.

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  2. 출력에서 monitoring-example 배포의 로그 항목을 볼 수 있습니다. 예를 들면 다음과 같습니다.

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

애플리케이션 측정항목 보기

예시 애플리케이션은 example_monitoring_up이라는 커스텀 측정항목을 노출합니다. Google Cloud 콘솔에서 해당 측정항목의 값을 볼 수 있습니다.

  1. Google Cloud 콘솔에서 측정항목 탐색기 페이지로 이동합니다.

    측정항목 탐색기로 이동

  2. 리소스 유형으로 Kubernetes Pod를 선택합니다.

  3. 측정항목에서 external/prometheus/example_monitoring_up를 선택합니다.

  4. 차트에서 example_monitoring_up의 반복되는 값이 1인 것을 알 수 있습니다.

Prometheus로 측정항목 수집

Distributed Cloud connected는 Distributed Cloud connected 워크로드의 측정항목을 수집하기 위한 Prometheus 측정항목 솔루션을 지원합니다.

이를 위해 Distributed Cloud Connected는 Distributed Cloud Connected 클러스터를 만들 때 prom-monitoring이라는 이름의 관리되지 않는 네임스페이스를 만듭니다. 이 네임스페이스를 사용하여 Prometheus를 배포하는 것이 좋습니다. prom-monitoring 네임스페이스에서 원하는 네임스페이스로 필요한 리소스를 복사하고 거기에 Prometheus를 배포할 수도 있습니다.

Prometheus 측정항목 스크래핑 구성

Prometheus로 Distributed Cloud 연결 측정항목을 수집하려면 Prometheus 측정항목 스크레이핑을 구성해야 합니다. 이렇게 하려면 Prometheus 포드에 prometheus-scrape-config ConfigMap을 마운트하고 ConfigMap의 스크랩 구성을 Prometheus 구성에 추가합니다. 예를 들면 다음과 같습니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-local-rolebinding
  namespace: prom-monitoring
subjects:
- kind: ServiceAccount
  name: prometheus-scrape
  namespace: prom-monitoring
roleRef:
  kind: ClusterRole
  name: gke-metrics-agent
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: prom-monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 5s
      evaluation_interval: 5s
    rule_files:
    scrape_config_files:
    - /etc/prometheus/scrape/*.yml
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: prom-monitoring
spec:
  selector:
    app: prom-monitoring
  ports:
  - port: 9090
    targetPort: 9090
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: prom-monitoring
  labels:
    app: prom-monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prom-monitoring
  template:
    metadata:
      labels:
        app: prom-monitoring
    spec:
      serviceAccountName: prometheus-scrape
      containers:
        - name: prometheus
          image: prom/prometheus:main
          args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            - "--storage.tsdb.path=/prometheus/"
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-scrape-config-volume
              mountPath: /etc/prometheus/scrape/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
            - name: prometheus-scrape-token
              mountPath: /var/run/secrets/kubernetes.io/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-scrape-cert
              mountPath: /certs/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-etcd-scrape
              mountPath: /stackdriver-prometheus-etcd-scrape
      volumes:
        - name: prometheus-storage-volume
          emptyDir: {}
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-config
        - name: prometheus-scrape-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-scrape-config
        - name: prometheus-scrape-token
          secret:
            defaultMode: 420
            secretName: prometheus-scrape
        - name: stackdriver-prometheus-scrape-cert
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-scrape-cert
        - name: stackdriver-prometheus-etcd-scrape
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-etcd-scrape

Prometheus로 워크로드 측정항목을 수집하려면 타겟 워크로드를 실행하는 서비스와 포드에 다음과 같이 주석을 추가해야 합니다.

  • Cloud Monitoring과 Prometheus 모두에 측정항목을 보내려면 커스텀 로그 및 측정항목 내보내기에 설명된 주석을 사용하세요.

  • Prometheus에만 측정항목을 전송하려면 다음 주석을 사용하세요.

prometheus.io/unmanaged_scrape: "true"
prometheus.io/unmanaged_path: "ENDPOINT_PATH"
prometheus.io/unmanaged_port: "PORT_NUMBER"

Kafka로 로그 수집

Distributed Cloud Connected는 Distributed Cloud Connected 배포에서 실행되는 워크로드의 로그를 수집하기 위한 Apache Kafka 솔루션을 지원합니다.

이 섹션의 단계를 완료하려면 작동하는 Kafka 배포가 있어야 합니다. Kafka 브로커는 PLAINTEXT 모드로 리스너를 광고해야 합니다. SSL/SASL 관련 변수는 지원되지 않습니다.

Kafka 로깅을 위해 클러스터를 구성하려면 클러스터에서 실행할 부가기능을 구성하는 JSON 파일을 만들어야 합니다. --system-addons-config 플래그를 사용하여 클러스터를 만들 때 이 파일을 지정합니다. Kafka 구성을 수정해야 하는 경우 새 Kafka 설정으로 클러스터를 삭제하고 다시 만들어야 합니다.

시스템 부가기능 구성 파일에 다음 섹션을 추가합니다.

{
        "systemAddonsConfig": {
          "unmanagedKafkaConfig": {
            "brokers": "BROKERS",
            "topics": "TOPICS"
     "topic_key": "TOPIC_KEY, 
          }
      }
}

다음을 바꿉니다.

  • BROKERS: ip_address:port 형식의 브로커 IP 주소 및 포트 쌍의 쉼표로 구분된 목록입니다.
  • TOPICS: 쉼표로 구분된 Kafka 주제 목록입니다.
  • TOPIC_KEY: Kafka 주제 키입니다. 이를 통해 주제가 여러 개 있는 경우 Kafka가 주제를 선택할 수 있습니다.

Distributed Cloud 연결된 클러스터를 만든 후 Kafka가 로그를 수집하지 않는 경우 다음을 확인하세요.

  • 서버 측: Kafka 배포의 오류 로그에서 문제의 징후를 확인합니다.
  • 클라이언트 측: Google 지원팀에 문의하여 시스템 포드 로그를 가져오고 검사합니다.

외부 처리를 위해 원시 워크로드 로그 수집

Distributed Cloud 연결을 구성하여 처리되지 않고 태그가 지정되지 않은 원시 워크로드 포드 로그를 /var/logs/export로 내보낼 수 있습니다. 이렇게 하면 로그 처리를 위해 자체 로그 수집기를 사용할 수 있습니다.

원시 워크로드 로그 내보내기를 구성하려면 다음 콘텐츠로 LogExport 커스텀 리소스를 만든 다음 클러스터에 적용합니다.

apiVersion: gdc.addons.gke.io/v1
kind: LogExport
metadata:
  name: my-log-export
spec:
  namespaces:
  - namespace1
  - namespace2
  - namespace3

namespaces 필드에 원시 포드 로그를 내보내려는 워크로드 네임스페이스를 나열합니다. 이 필드에서는 관리 네임스페이스 제한사항에 나열된 것과 같은 시스템 네임스페이스를 허용하지 않습니다.

다음 단계