다음을 통해 공유


Azure Monitor에서 Prometheus 메트릭에 대한 사용자 지정 구성 파일 만들기 및 유효성 검사

기본적으로 Azure Monitor Prometheus 에이전트에서 스크래핑하는 기본 스크랩 대상 외에도 다음 단계를 수행하여 configmap으로 추가 스크랩 구성을 에이전트에 제공합니다. Azure Monitor Prometheus 에이전트는 스크랩 구성에 대한 운영자 CRD를 이해하거나 처리하지 않고 대신 Prometheus 구성에 정의된 대로 네이티브 Prometheus 구성을 사용합니다.

사용자 지정 대상 스크래핑에 사용할 수 있는 configmap은 3개 있습니다.

  • ama-metrics-prometheus-config(권장) - 이 이름이 있는 configmap을 만들면 정의된 스크랩 작업은 클러스터에서 실행되는 Azure Monitor 메트릭 복제본 Pod에서 실행됩니다.
  • ama-metrics-prometheus-config-node(고급) - 이 이름이 있는 configmap을 만들면 정의된 스크랩 작업은 클러스터에서 실행되는 각 Linux DaemonSet Pod에서 실행됩니다. 자세한 내용은 고급 설정을 참조하세요.
  • ama-metrics-prometheus-config-node-windows(고급) - 이 이름이 있는 configmap을 만들면 정의된 스크랩 작업은 각 Windows DaemonSet에서 실행됩니다. 자세한 내용은 고급 설정을 참조하세요.

Prometheus 구성 파일 만들기

Prometheus 스크랩 구성 작업을 간편하게 작성할 수 있는 방법 하나는 다음과 같습니다.

  • 1단계: 구성 파일(yaml)을 사용하여 스크랩 작업 작성/정의
  • 2단계: (이 문서에 지정된 대로) 사용자 지정 도구를 사용하여 스크랩 구성 파일 유효성을 검사한 다음, 해당 구성 파일을 configmap으로 변환
  • 3단계: 구성 스크랩 파일을 클러스터에 configmap으로 배포

이렇게 하면 (공간에 매우 민감한) yaml 구성을 더 쉽게 작성하고 구성 맵 내에서 직접 스크랩 구성을 작성하여 의도하지 않은 공간을 추가하지 않게 됩니다.

이름이 prometheus-config인 Prometheus 스크랩 구성 파일을 만듭니다. 자세한 내용은 Prometheus용 스크랩 구성 작성 방법을 자세히 설명하는 구성 팁 및 예제를 참조하세요. Prometheus.io 스크랩 구성 참조를 확인할 수도 있습니다. scrape_configs 섹션의 구성 파일에는 스크랩 구성이 나열되고 필요한 경우 전역 섹션을 사용하여 전역 scrape_interval, scrape_timeoutexternal_labels를 설정할 수 있습니다.

전역 섹션을 변경하면 기본 구성 및 사용자 지정 구성에 영향을 미칩니다.

다음은 Prometheus 스크랩 구성 파일 샘플입니다.

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

스크랩 구성 파일 유효성 검사

에이전트는 사용자 지정 promconfigvalidator 도구를 사용하여 configmap을 통해 제공된 Prometheus 구성 유효성을 검사합니다. 구성이 유효하지 않으면 추가 항목 에이전트에서 제공된 사용자 지정 구성을 거부합니다. Prometheus 구성 파일이 있으면 필요에 따라promconfigvalidator 도구를 사용하여 에이전트가 사용하는 configmap을 만들기 전에 구성의 유효성을 검사할 수 있습니다.

promconfigvalidator 도구는 Azure Monitor 메트릭 추가 항목 Pod 내에 있습니다. 클러스터의 ama-metrics-node-* 네임스페이스의 kube-system Pod를 사용하여 유효성 검사를 위한 도구를 다운로드할 수 있습니다. kubectl cp를 사용하여 도구와 해당 구성을 다운로드합니다.

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

실행 파일과 yaml을 복사한 후 작성한 Prometheus 구성 파일의 경로를 찾습니다. 그런 다음, 명령에서 <config path>를 바꾸고 해당 명령으로 유효성 검사기를 실행합니다.

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

선택 사항인 merged-otel-config.yaml 매개 변수와 함께 경로가 제공되지 않은 상태에서 유효성 검사기를 실행하면 병합된 구성 파일 output이 생성됩니다. 이 자동 생성된 병합 파일은 도구 유효성 검사와 디버깅용으로만 사용되므로 이 파일을 메트릭 수집기 에이전트에 대한 구성으로 사용하지 마세요.

configmap으로 구성 파일 배포

사용자 지정 Prometheus 구성 파일은 kube-system 네임스페이스의 ama-metrics-prometheus-config (또는) ama-metrics-prometheus-config-node (또는) ama-metrics-prometheus-config-node-windows 메트릭 추가 항목 configmap 내에서 prometheus-config라는 필드로 사용됩니다. 사용자 지정 스크랩 작업 구성을 만들려는 configmap에 따라 Prometheus 구성 파일 이름을 prometheus-config로 바꾸고 다음 명령 중 하나 이상을 실행하여 위에서 만든 스크랩 구성 파일에서 configmap을 만들 수 있습니다.

예시: replicsset에서 사용할 configmap 만들기

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

그러면 kube-system 네임스페이스에 ama-metrics-prometheus-config라는 configmap이 생성됩니다. Azure Monitor 메트릭 복제본 Pod는 30~60초 후에 다시 시작하여 새 구성을 적용합니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 ama-metrics 복제본 Pod를 확인하면 됩니다.

예시: Linux DaemonSet에서 사용할 configmap 만들기

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

그러면 kube-system 네임스페이스에 ama-metrics-prometheus-config-node라는 configmap이 생성됩니다. Azure Monitor 메트릭 Linux DaemonSet Pod는 30~60초 후에 다시 시작하여 새 구성을 적용합니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 ama-metrics-node Linux DaemonSet Pod를 확인하면 됩니다.

예시: Windows DaemonSet에서 사용할 configmap 만들기

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

그러면 kube-system 네임스페이스에 ama-metrics-prometheus-config-node-windows라는 configmap이 생성됩니다. Azure Monitor 메트릭 Windows DaemonSet Pod는 30~60초 후에 다시 시작하여 새 구성을 적용합니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 ama-metrics-win-node Windows DaemonSet Pod를 확인하면 됩니다.

파일 이름이 configmap 설정 이름으로 사용되므로 다음 명령을 실행하기 전에 Prometheus 구성 파일의 이름을 prometheus-config로 지정해야 합니다.

그러면 kube-system 네임스페이스에 ama-metrics-prometheus-config라는 configmap이 생성됩니다. Azure Monitor 메트릭 Pod는 다시 시작하여 새 구성을 적용합니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 ama-metrics Pod를 확인하면 됩니다.

ama-metrics-prometheus-config configmap의 샘플은 여기에서 확인할 수 있습니다.

문제 해결

kube-system 네임스페이스에서 configmap(ama-metrics-prometheus-config 또는 ama-metrics-prometheus-config-node)을 성공적으로 만들었지만 사용자 지정 대상 스크래핑이 확인되지 않으면 kubectl 로그를 사용하여 ama-metrics-prometheus-config configmap의 경우 복제본 Pod 로그에서, ama-metrics-prometheus-config-node configmap의 경우 DaemonSet Pod 로그에서 오류를 확인하고 prometheus-config-merger 접두사가 있는 기본 및 사용자 지정 Prometheus 구성 병합 시작 섹션에 오류가 없는지 확인합니다.

참고 항목

고급 설정: DaemonSet에 대한 사용자 지정 Prometheus 스크랩 작업 구성

ama-metrics 복제본 Pod는 사용자 지정 Prometheus 구성을 사용하고 지정된 대상을 스크랩합니다. 노드와 Pod가 많고 스크랩할 메트릭이 많은 클러스터의 경우 적용 가능한 사용자 지정 스크랩 대상 중 일부를 단일 ama-metrics Replica Pod에서 ama-metrics DaemonSet Pod로 오프로드할 수 있습니다.

ama-metrics-prometheus-config-node configmap은 replica-set configmap과 유사하며, 각 노드에 정적 스크랩 구성을 포함하도록 만들 수 있습니다. 스크랩 구성은 단일 노드만 대상으로 해야 하며 서비스 검색/Pod 주석을 사용하지 않아야 합니다. 그렇지 않으면 각 노드는 모든 대상을 스크랩하려고 시도하고 Kubernetes API 서버를 많이 호출합니다.

사용자 지정 스크랩 대상은 대상과 함께 static_configs를 사용하고 $NODE_IP 환경 변수를 사용하고 스크랩할 포트를 지정하여 동일한 형식을 따를 수 있습니다. DaemonSet의 각 Pod는 구성을 가져오고 메트릭을 긁어 해당 노드로 보냅니다.

예제: 다음 node-exporter 구성은 DaemonSet Pod의 기본 대상 중 하나입니다. 모든 ama-metrics 추가 기능 컨테이너에 대해 이미 설정된 $NODE_IP 환경 변수를 사용하여 노드의 특정 포트를 대상으로 합니다.

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

다음 단계