Prometheus 사용

Prometheus는 Kubernetes에서 자주 사용되는 선택적인 모니터링 도구입니다. Prometheus 지원을 포함하여 Stackdriver Kubernetes Engine Monitoring을 구성하는 경우 Prometheus 데이터 모델에서 측정항목을 노출하는 서비스를 클러스터에서 내보내고, Stackdriver에 외부 측정항목으로 표시할 수 있습니다.

이 페이지에서는 Stackdriver Kubernetes Engine Monitoring과 함께 작동하는 Prometheus 클라이언트에서 Stackdriver가 데이터를 수집하는 메커니즘을 보여줍니다. 통합용 소스 코드는 무료로 제공됩니다.

시작하기 전에

여기에 설명된 Prometheus 지원은 Stackdriver Monitoring에 설명된 레거시 Stackdriver 지원과 함께 작동하지 않습니다.

수집기 설치

Stackdriver는 Prometheus 서버와 동일한 Kubernetes pod에서 사이드카로 배치해야 하는 수집기를 제공합니다. Stackdriver Kubernetes Engine Monitoring을 사용하는 새 클러스터에 Stackdriver 수집기를 설치하려면 다음과 같은 셸 명령어를 사용하세요.

클러스터에 로그인한 후 필수 환경 변수를 사용하여 다음 스크립트를 실행합니다.

  • KUBE_NAMESPACE: 스크립트를 실행할 네임스페이스
  • KUBE_CLUSTER: 사이드카의 클러스터 이름 매개변수
  • GCP_REGION: 사이드카의 GCP 리전 매개변수
  • GCP_PROJECT: 사이드카의 GCP 프로젝트 매개변수
  • DATA_DIR: 사이드카의 데이터 디렉토리
  • DATA_VOLUME: Prometheus의 데이터가 포함된 볼륨의 이름
  • SIDECAR_IMAGE_TAG: Prometheus 사이드카의 Docker 이미지 버전. Container Registry의 최신 출시 버전을 사용하는 것이 좋습니다.
#!/bin/sh

set -e
set -u

usage() {
  echo -e "Usage: $0 <deployment|statefulset> <name>\n"
}

if [  $# -le 1 ]; then
  usage
  exit 1
fi

# Override to use a different Docker image name for the sidecar.
export SIDECAR_IMAGE_NAME=${SIDECAR_IMAGE_NAME:-'gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar'}

kubectl -n "${KUBE_NAMESPACE}" patch "$1" "$2" --type strategic --patch "
spec:
  template:
    spec:
      containers:
      - name: sidecar
        image: ${SIDECAR_IMAGE_NAME}:${SIDECAR_IMAGE_TAG}
        imagePullPolicy: Always
        args:
        - \"--stackdriver.project-id=${GCP_PROJECT}\"
        - \"--prometheus.wal-directory=${DATA_DIR}/wal\"
        - \"--stackdriver.kubernetes.location=${GCP_REGION}\"
        - \"--stackdriver.kubernetes.cluster-name=${KUBE_CLUSTER}\"
        #- \"--stackdriver.generic.location=${GCP_REGION}\"
        #- \"--stackdriver.generic.namespace=${KUBE_CLUSTER}\"
        ports:
        - name: sidecar
          containerPort: 9091
        volumeMounts:
        - name: ${DATA_VOLUME}
          mountPath: ${DATA_DIR}
"

구성 유효성 검사

Prometheus를 구성한 후 다음 명령어를 실행하여 설치 유효성을 검사합니다.

kubectl -n "${KUBE_NAMESPACE}" get <deployment|statefulset> <name> -o=go-template='{{$output := "stackdriver-prometheus-sidecar does not exists."}}{{range .spec.template.spec.containers}}{{if eq .name "stackdriver-prometheus-sidecar"}}{{$output = (print "stackdriver-prometheus-sidecar exists. Image: " .image)}}{{end}}{{end}}{{printf $output}}{{"\n"}}'

Prometheus 사이드카가 성공적으로 설치되면 스크립트 출력에 다음이 표시됩니다.

stackdriver-prometheus-sidecar exists. Image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.3.2

Prometheus 사이드카가 성공적으로 설치되지 않으면 스크립트 출력에 다음이 표시됩니다.

stackdriver-prometheus-sidecar does not exist.

작업 부하가 최신 상태이며 사용 가능한지 확인하려면 다음을 실행합니다.

kubectl -n "${KUBE_NAMESPACE}" get <deployment|statefulset> <name>

구성 업데이트

수집기가 성공적으로 설치되었는지 확인한 후 클러스터 구성을 업데이트하여 변경사항을 영구적으로 적용하세요.

  1. Prometheus Server가 공유 볼륨에 쓰고 있는지 확인합니다.

    1. Prometheus pod에 공유 볼륨이 있는지 확인합니다.

      volumes:
        - name: data-volume
          emptyDir: {}
      
    2. Prometheus가 /data 아래에 볼륨을 마운트하도록 합니다.

      volumeMounts:
      - name: data-volume
        mountPath: /data
      
    3. /data의 공유 볼륨에 쓰도록 Prometheus 서버에 지시합니다. 컨테이너 args에 다음을 추가합니다.

      --storage.tsdb.path=/data
      
  2. 수집기 컨테이너를 사이드카로 추가합니다.

    - name: sidecar
      image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:[SIDECAR_IMAGE_TAG]
      args:
      - "--stackdriver.project-id=[GCP_PROJECT]"
      - "--prometheus.wal-directory=/data/wal"
      - "--stackdriver.kubernetes.location=[GCP_REGION]"
      - "--stackdriver.kubernetes.cluster-name=[KUBE_CLUSTER]"
      ports:
      - name: sidecar
        containerPort: 9091
      volumeMounts:
      - name: data-volume
        mountPath: /data
    

수집기에 대한 추가 구성 세부정보는 Stackdriver Prometheus 사이드카 문서를 참조하세요.

측정항목 보기

설치한 Prometheus 소프트웨어는 Monitoring에 측정항목을 외부 측정항목으로 내보내도록 미리 구성되어 있습니다. 이는 Stackdriver > 리소스 > 측정항목 탐색기에서 확인할 수 있습니다.

측정항목 탐색기로 이동

모니터링 리소스 유형 Kubernetes 컨테이너(k8s_container)에서 이름이 external/prometheus/...인 측정항목을 찾습니다. 관련 데이터가 포함된 측정항목은 external/prometheus/go_memstats_alloc_bytes입니다. 작업공간에 클러스터가 2개 이상 있는 경우, 다음 스크린샷에 표시된 것처럼 클러스터 이름으로 차트를 필터링할 수 있습니다.

Prometheus 차트

Prometheus 통합 문제

Stackdriver에 데이터가 표시되지 않습니다.

설치 단계를 수행한 후 Stackdriver에 데이터가 표시되지 않으면 수집기 로그에서 문제를 암시하는 오류 메시지가 있는지 살펴봅니다.

로그에 명백한 오류 메시지가 포함되어 있지 않으면 디버그 로깅을 사용 설정하기 위해 -log.level=debug 플래그를 수집기에 전달합니다. 수집기를 다시 시작하면 문제의 원인을 알려주는 새 메시지가 표시될 수 있습니다.

기록 규칙을 사용 중인데 Stackdriver에 측정항목이 표시되지 않습니다.

기록 규칙에 특수 처리가 필요합니다. 가능한 경우 Stackdriver 및 Stackdriver Monitoring의 기능에 원시 측정항목을 수집하여 쿼리 시 데이터를 집계하는 것이 좋습니다(차트, 대시보드 등).

원시 측정항목을 수집할 수 없다면 수집기의 구성(docs)에 static_metadata 항목을 추가하면 됩니다. 이 옵션을 사용하려면 job 라벨과 instance 라벨을 보존해야 합니다. 예를 들어 현재 구성은 유효합니다.

Prometheus 서버 구성:

groups:
- name: my-groups
  rules:
  - record: backlog_avg_10m
    expr: avg_over_time(backlog_k8s[10m])
  - record: backlog_k8s
    expr: sum(total_lag) by (app, job, instance)

Stackdriver Prometheus 수집기 구성:

static_metadata:
  - metric: backlog_avg_10m
    type: gauge

현재 job 또는 instance 라벨을 변경하거나 삭제하는 기록 규칙은 지원되지 않습니다.

측정항목에 jobinstance Prometheus 라벨이 없습니다.

Stackdriver Prometheus 수집기는 잘 알려진 Prometheus 라벨로 Kubernetes 객체의 Stackdriver MonitoredResource를 생성합니다. 라벨 설명자를 실수로 변경한 경우, 수집기가 측정항목을 Stackdriver에 쓸 수 없습니다.

로그에 '중복 시계열' 또는 '쓰기 순서가 맞지 않음' 오류가 표시됩니다.

이러한 오류는 동일한 시계열에 측정항목 데이터를 두 번 쓸 때 발생할 수 있습니다. 이러한 경우는 Prometheus 엔드포인트가 단일 Stackdriver 모니터링 리소스에서 동일한 측정항목 데이터(동일한 측정항목 라벨 값 집합)를 두 번 노출할 때 발생합니다.

예를 들어 Kubernetes 컨테이너는 여러 포트에 Prometheus 측정항목을 노출할 수 있습니다. Stackdriver k8s_container 모니터링 리소스는 포트를 기준으로 리소스를 구분하지 않으므로 Stackdriver는 사용자가 동일한 시계열에 2개의 포인트를 기록하고 있음을 감지합니다. 시계열을 구분하는 측정항목 라벨을 Prometheus에 추가하면 문제가 해결됩니다. 예를 들어 컨테이너를 다시 시작해도 계속 남아 있는 __meta_kubernetes_pod_annotation_prometheus_io_port 라벨을 사용할 수 있습니다.

로그에 '측정항목 종류는 X여야 하지만 Y입니다'라는 오류가 표시됩니다.

이러한 오류는 게이지, 카운터, 기타 항목 사이의 소스 코드에서 Prometheus 측정항목 유형을 변경하면 발생할 수 있습니다. 데이터 의미 체계가 유형에 따라 달라지므로 Stackdriver 측정항목은 엄격하게 유형이 지정되고 Stackdriver는 엄격하게 이를 적용합니다.

측정항목 유형을 변경하려면 해당하는 측정항목 설명을 삭제해야 합니다. 그러면 기존 시계열 데이터에 액세스할 수 없게 됩니다.

전에 Prometheus 측정항목 유형을 분명히 본 적이 있는데 지금은 찾을 수 없습니다.

설치된 Prometheus 소프트웨어는 Stackdriver Monitoring에 측정항목을 외부 측정항목으로 내보내도록 미리 구성되어 있습니다. 데이터를 내보내면 Monitoring이 외부 측정항목에 대한 적절한 측정항목 설명을 만듭니다. 그 후 해당 측정항목 유형의 데이터가 6주 이상 기록되지 않으면 측정항목 설명이 삭제될 수 있습니다.

사용되지 않은 측정항목 설명이 6주 후에 삭제된다는 보장은 없지만 Monitoring은 지난 6주 동안 사용되지 않은 Prometheus 측정항목 설명을 삭제할 권한이 있습니다.

지원 중단 정책

Stackdriver-Prometheus 통합에는 Stackdriver 에이전트 지원 중단 정책이 적용됩니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Stackdriver Monitoring
도움이 필요하시나요? 지원 페이지를 방문하세요.