본문 바로가기

Observability/Prometheus

[Prometheus](GCP)Stackdriver-exporter에 원하는 metrics 추가하기

Stackdriver-exporter 설치 방법 참고
[Prometheus](GCP)Install Stackdriver-exporter for monitoring GCP with helm chart

Concept

stackdriver-exporter를 사용하면 GCP에서 사용중인 리소스를 모니터링할 수 있다.

다만, GCP 콘솔에서와 달리 공식문서에서 제공해주는 metrics 값들이 모두 모니터링 가능한 것은 아니라 필요한 데이터 수집에 대한 테스트가 필요하다.

아래는 stackdriver-exporter helm chart의 metrics에서 사용하는 option에 대한 설명이다

수집 가능한 metrics 확인하는 방법

1. GCP doc - Metrics list

공식문서 참고
https://cloud.google.com/monitoring/api/metrics_gcp?hl=ko

위와 같이 공식문서 상에서 원하는 metric 값을 확인 한뒤 stackdriver-exporter helm chart에 내용을 추가한다 (아래에서 설명)

metrics: compute.googleapis.com/firewall/dropped_bytes_count

❗여기서 데이터를 확인할 수 있다해도 stackdriver-exporter에서는 수집하지 못할 수 있으니 실제 데이터 수집에 대한 테스트가 필요하다

2. Reading metrics with python

코드 작성법 참고
https://cloud.google.com/monitoring/custom-metrics/reading-metrics?hl=ko#monitoring_read_timeseries_fields-python

Monitoring API timeSeries.list사용해 metric값을 확인한다.

from google.cloud import monitoring_v3

client = monitoring_v3.MetricServiceClient()
project = jmhan-int-220517
project_name = f"projects/{project}"

"""
모니터링 리소스 나열 > 모니터링할 수 있는 클라우드 항목"""
resource_descriptors = client.list_monitored_resource_descriptors(name=project_name)
for descriptor in resource_descriptors:
    print(descriptor.type)

"""
클라우드 항목 중 세부 metric 유형 나열"""
for descriptor in client.list_metric_descriptors(name=project_name):
    print(descriptor.type)

모니터링할 수 있는 클라우드 항목 → 세부 metric 항목 확인 순으로 진행하여 원하는 metric 값을 확인한다.

❗여기서 데이터를 확인할 수 있다해도 stackdriver-exporter에서는 수집하지 못할 수 있으니 실제 데이터 수집에 대한 테스트가 필요하다

Option

아래는 stackdriver-exporter helm chart의 metrics에서 사용하는 option에 대한 설명이다.

  • projectId: The Google Project ID to gather metrics for, serviceAccountSecret와 일치하는 Project명을 작성해야한다. 여기에 작성한 내용이 prometheus에서 label로 들어간다.
  • serviceAccountSecret: An existing secret which contains credentials.json, GCP의 Service Account를 이용하여 프로젝트를 모니터링 한다.
  • metrics
    • typePrefixes: The prefixes to gather metrics for, 수집하고자 하는 데이터의 metric 값을 입력한다.
    • interval: The frequency to request
    • offset: How far into the past to offset

metircs 추가 - Example

stackdriver:
  # The Google Project ID to gather metrics for
  projectId: "jmhan-int"
  # An existing secret which contains credentials.json
  serviceAccountSecret: ""
  # Provide custom key for the existing secret to load credentials.json from
  serviceAccountSecretKey: ""
  # A service account key JSON file. Must be provided when no existing secret is used, in this case a new secret will be created holding this service account
  serviceAccountKey: ""
  # Max number of retries that should be attempted on 503 errors from Stackdriver
  maxRetries: 0
  # How long should Stackdriver_exporter wait for a result from the Stackdriver API
  httpTimeout: 10s
  # Max time between each request in an exp backoff scenario
  maxBackoff: 5s
  # The amount of jitter to introduce in an exp backoff scenario
  backoffJitter: 1s
  # The HTTP statuses that should trigger a retry
  retryStatuses: 503
  # Drop metrics from attached projects and fetch `project_id` only
  dropDelegatedProjects: false
  metrics:
    # The prefixes to gather metrics for, we default to just CPU metrics.
    typePrefixes: 'compute.googleapis.com/instance/cpu/utilization,compute.googleapis.com/instance/cpu/reserved_cores,compute.googleapis.com/instance/memory/'
    # The frequency to request
    interval: '5m'
    # How far into the past to offset
    offset: '0s'
    # Offset for the Google Stackdriver Monitoring Metrics interval into the past by the ingest delay from the metric's metadata.
    ingestDelay: false

Google Cloud metrics
https://cloud.google.com/monitoring/api/metrics_gcp

Google Cloud Agent metrics
https://cloud.google.com/monitoring/api/metrics_agent#agent

stackdriver exporter github
https://github.com/prometheus-community/stackdriver_exporter

결과 확인

stackdriver-exporter에 들어가서 metric에 등록한 값을 확인한다.