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_timeout
및 external_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']