이 페이지에서는 Google Distributed Cloud Connected가 작업에 대한 다양한 유형의 정보를 로깅하는 방법과 해당 정보를 열람하는 방법을 설명합니다. 일부 유형의 로그 및 측정항목을 수집하면 추가 요금이 발생합니다. 자세한 내용은 로그 및 측정항목 청구를 참고하세요.
로깅 및 모니터링 구성
로그와 측정항목을 수집하기 전에 다음을 수행해야 합니다.
다음 명령어를 사용하여 로깅 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로 바꿉니다.로그 및 측정항목을 작성하는 데 필요한 역할을 부여합니다.
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_containerk8s_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/Machineedgecontainer.googleapis.com/Rack
Machine 리소스 측정항목
Distributed Cloud connected는 edgecontainer.googleapis.com/Machine 리소스에 대해 다음 Cloud Monitoring API 측정항목을 기록합니다.
| 측정항목 | 설명 |
|---|---|
/machine/cpu/total_cores
|
머신에 있는 물리적 프로세서 코어의 총수입니다. |
/machine/cpu/usage_time
|
머신에 있는 모든 코어의 누적 CPU 사용 시간입니다. 유형은 workload (고객 워크로드) 또는 system (기타 모든 항목)일 수 있습니다. |
/machine/cpu/utilization
|
머신의 CPU 사용률입니다. 범위는 0~1입니다. 유형은 workload (고객 워크로드) 또는 system (기타 모든 항목)일 수 있습니다. |
/machine/memory/total_bytes
|
머신의 총 메모리 바이트 수입니다. |
/machine/memory/used_bytes
|
머신에서 사용된 메모리의 바이트 수입니다. memory_type은 evictable (커널에서 회수 가능) 또는 non-evictable (회수 불가능)입니다. |
/machine/memory/utilization
|
머신의 메모리 사용률입니다. 범위는 0~1입니다.
memory_type는 evictable (커널에서 회수 가능) 또는 non-evictable (회수 불가능)입니다. |
/machine/network/up
|
네트워크 인터페이스가 작동 중인지 여부를 나타냅니다. 기본 카드, 보조 카드, 포트를 포함합니다. |
/machine/network/link_speed
|
기본 네트워크 인터페이스 카드의 링크 속도입니다. |
/machine/network/received_bytes_count
|
기본 네트워크 인터페이스 카드의 수신된 바이트 수입니다. |
/machine/network/sent_bytes_count
|
기본 네트워크 인터페이스 카드의 전송된 바이트 수입니다. |
/machine/network/connectivity
|
기본 네트워크 인터페이스 카드가 인터넷에 연결되어 있는지 여부를 나타냅니다. |
/machine/disk/total_bytes
|
머신의 총 디스크 공간의 바이트 수입니다. |
/machine/disk/used_bytes
|
머신에서 사용된 디스크 공간의 바이트 수입니다. |
/machine/disk/utilization
|
머신의 디스크 공간 사용률입니다. 범위는 0~1입니다. |
/machine/restart_count
|
머신이 다시 시작된 횟수입니다. |
/machine/uptime
|
마지막으로 다시 시작한 후 머신 가동 시간입니다. |
/machine/connected
|
머신이 Google Cloud에 연결되어 있는지 여부를 나타냅니다. |
Rack 리소스 측정항목
Distributed Cloud connected는 edgecontainer.googleapis.com/Rack 리소스에 대해 다음 Cloud Monitoring API 측정항목을 기록합니다.
| 측정항목 | 설명 |
|---|---|
/router/bgp_up
|
라우터의 BGP 피어링 세션이 실행 중이고 정상인지 여부를 나타냅니다.
router_id는 특정 라우터 (랙당 최대 2개)를 식별합니다. |
/router/connected
|
BGP 라우터가 Google Cloud에 연결되어 있는지 여부를 나타냅니다.
router_id는 특정 라우터 (랙당 최대 2개)를 식별합니다. |
맞춤 애플리케이션 로그 및 측정항목 내보내기
Distributed Cloud connected는 Distributed Cloud connected 워크로드에서 실행되는 애플리케이션의 로그를 자동으로 내보냅니다. Distributed Cloud 연결 워크로드에서 실행되는 애플리케이션의 측정항목을 내보내려면 다음 섹션에 설명된 대로 주석을 달아야 합니다.
측정항목 내보내기를 사용 설정하도록 워크로드에 주석 추가
애플리케이션에서 커스텀 측정항목 수집을 사용 설정하려면 다음 주석을 애플리케이션의 서비스 또는 배포 매니페스트에 추가합니다.
prometheus.io/scrape: "true"prometheus.io/path: "ENDPOINT_PATH".ENDPOINT_PATH을 타겟 애플리케이션의 측정항목 엔드포인트의 전체 경로로 바꿉니다.prometheus.io/port: "PORT_NUMBER": 애플리케이션의 측정항목 엔드포인트가 연결을 리슨하는 포트입니다.
예시 애플리케이션 실행
이 섹션에서는 커스텀 로그를 작성하고 커스텀 측정항목 엔드포인트를 노출하는 애플리케이션을 만듭니다.
다음 서비스 및 배포 매니페스트를
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배포와 서비스를 만듭니다.
kubectl --kubeconfig apply -f my-app.yaml
애플리케이션 로그 보기
콘솔
Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
리소스를 클릭합니다.
모든 리소스 유형 목록에서
Kubernetes Container를 선택합니다.클러스터 이름에서 사용자 클러스터의 이름을 선택합니다.
네임스페이스 이름에
default을 선택합니다.추가를 클릭한 다음 쿼리 실행을 클릭합니다.
쿼리 결과 섹션에서
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
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로 바꿉니다.출력에서
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 콘솔에서 해당 측정항목의 값을 볼 수 있습니다.
Google Cloud 콘솔에서 측정항목 탐색기 페이지로 이동합니다.
리소스 유형으로
Kubernetes Pod를 선택합니다.측정항목에서
external/prometheus/example_monitoring_up를 선택합니다.차트에서
example_monitoring_up의 반복되는 값이 1인 것을 알 수 있습니다.
Prometheus로 측정항목 수집
Distributed Cloud connected는 클러스터가 생존 가능 모드에 있는 동안 로컬 컨트롤 플레인 클러스터에서 실행되는 워크로드의 측정항목을 수집하기 위한 Prometheus 측정항목 솔루션을 지원합니다. 이 통합은 클라우드 컨트롤 플레인 클러스터에서 사용할 수 없습니다.
이를 위해 Distributed Cloud Connected는 로컬 제어 영역 클러스터를 만들 때 prom-monitoring이라는 이름의 관리되지 않는 네임스페이스를 만듭니다. 이 네임스페이스를 사용하여 Prometheus를 배포하는 것이 좋습니다. prom-monitoring 네임스페이스에서 원하는 네임스페이스로 필요한 리소스를 복사하고 거기에 Prometheus를 배포할 수도 있습니다.
Prometheus로 Distributed Cloud(연결형) 측정항목 수집
Prometheus로 Distributed Cloud 연결 측정항목을 수집하려면 Prometheus 측정항목 스크레이핑을 구성해야 합니다. 이렇게 하려면 Prometheus 포드에 prometheus-scrape-config ConfigMap을 마운트하고 ConfigMap의 스크랩 구성을 Prometheus 구성에 추가합니다. 예를 들면 다음과 같습니다.
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:
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: metrics-providers-ca
mountPath: /certs/metrics-providers
- 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
secretName: stackdriver-prometheus-scrape-cert
- name: metrics-providers-ca
secret:
defaultMode: 420
items:
- key: ca.crt
path: ca.crt
secretName: metrics-providers-ca
- name: stackdriver-prometheus-etcd-scrape
secret:
defaultMode: 420
optional: true
secretName: stackdriver-prometheus-etcd-scrape
Prometheus로 워크로드 측정항목 수집
Prometheus로 워크로드 측정항목을 수집하려면 타겟 워크로드를 실행하는 서비스와 포드에 다음과 같이 주석을 추가해야 합니다.
Cloud Monitoring과 Prometheus 모두에 측정항목을 보내려면 커스텀 로그 및 측정항목 내보내기에 설명된 주석을 사용하세요.
Prometheus에만 측정항목을 전송하려면 다음 주석을 사용하세요.
prometheus.io/unmanaged_scrape: "true"
prometheus.io/unmanaged_path: "ENDPOINT_PATH"
prometheus.io/unmanaged_port: "PORT_NUMBER"