Kubernetes 클러스터에서 Prometheus 메트릭의 컬렉션을 사용하도록 설정하면 기본 컬렉션을 사용하여 수집할 메트릭을 결정합니다. 이 문서에서는 특정 모니터링 요구 사항을 충족하도록 이 컬렉션을 사용자 지정하는 방법을 설명합니다.
ConfigMap
다음 ConfigMap은 메트릭 추가 기능에 대한 스크랩 구성 및 기타 설정을 구성하는 데 사용됩니다. 관리되는 Prometheus를 사용하는 경우 이 ConfigMap은 기본적으로 클러스터에 존재하지 않습니다.
| ConfigMap | 설명 |
|---|---|
ama-metrics-settings-configmap |
다음 기본 설정을 포함합니다. - 클러스터 별칭입니다. 클러스터에서 수집된 cluster 모든 메트릭의 레이블 값을 변경합니다.- 기본 스크랩 대상을 사용/사용하지 않도록 설정합니다. - 네임스페이스당 Pod 주석 기반 스크래핑을 사용하도록 설정합니다. - 메트릭 유지 목록. 각 기본 대상에서 허용되는 메트릭을 제어합니다. - 미리 정의된 대상에 대한 간격을 긁습니다. - 누락된 메트릭 문제를 식별하는 디버그 모드입니다. 문제 해결을 참조하세요. |
아래 지침에 따라 ConfigMap의 설정을 수정한 다음, 다음 명령을 사용하여 적용합니다. AMA-Metrics Pod는 설정을 받아 2-3분 후에 재시작하여 지정된 구성 설정을 적용합니다.
kubectl apply -f .\ama-metrics-settings-configmap.yaml
기본 대상 사용 및 사용 안 함
Azure Monitor의 기본 Prometheus 메트릭 구성 에는 Kubernetes 클러스터에서 기본적으로 수집되는 기본 대상 및 메트릭이 나열됩니다. 다음 대상의 스크랩핑을 활성화하거나 비활성화하려면 ConfigMap의 default-scrape-settings-enabled 섹션에서 대상 true에 대한 설정을 false로 업데이트합니다.
예를 들어 기본적으로 사용하지 않도록 설정된 스크래핑을 coredns 사용하도록 설정하려면 다음과 같이 설정을 업데이트합니다.
default-scrape-settings-enabled: |-
kubelet = true
coredns = true
cadvisor = true
kubeproxy = false
...
스크랩 간격 설정
모든 기본 대상의 기본 스크랩 간격은 30초입니다. 대상에 대해 이 간격을 수정하려면 ConfigMap 섹션의 설정을 default-targets-scrape-interval-settings 업데이트할 수 있습니다.
예를 들어 스크래핑 간격 kubelet 을 60초로 변경하려면 다음과 같이 설정을 업데이트합니다.
default-targets-scrape-interval-settings: |-
kubelet = "60s"
coredns = "30s"
cadvisor = "30s"
...
Pod 주석 기반 스크랩핑 사용
사용자 지정 Prometheus 구성을 만들지 않고 애플리케이션 Pod를 수집하기 위해 클러스터의 Pod에 주석을 추가합니다. 특정 주석이 있는 Pod를 스크래핑할 수 있도록 하려면, 해당 주석을 수집하려는 Pod가 있는 네임스페이스의 정규 표현식을 ConfigMap의 podannotationnamespaceregexpodannotationnamespaceregex 섹션에 추가합니다.
예를 들어 다음 설정은 네임스페이스 kube-system 및 my-namespace에만 주석이 있는 Pod를 스크랩합니다.
pod-annotation-based-scraping: |-
podannotationnamespaceregex = "kube-system|my-namespace"
ConfigMap 섹션에 metadata 주석을 추가합니다.
prometheus.io/scrape: "true"은 Pod를 긁어내는 데 필요하며, prometheus.io/path은 경로를, prometheus.io/port은 메트릭이 Pod에서 호스팅되는 포트를 나타냅니다. 다음 샘플에서는 <pod IP>:8080/metrics에서 메트릭을 호스팅하는 파드(pod)에 대한 주석을 정의합니다.
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/metrics'
prometheus.io/port: '8080'
경고
많은 네임스페이스에서 Pod 주석을 스크래핑하면 주석이 있는 Pod 수에 따라 매우 많은 양의 메트릭이 생성될 수 있습니다.
기본 대상에서 수집한 메트릭 사용자 지정
Azure Monitor의 Prometheus 메트릭에 대한 최소 수집 프로필에 설명된 대로 기본 대상에 대해 최소 메트릭만 수집됩니다. 기본 대상에서 모든 메트릭을 수집하려면 ConfigMap의 minimalingestionprofile 섹션에서 false을(를) default-targets-metrics-keep-list으로 설정하십시오.
minimalingestionprofile = false
또는 default-targets-metrics-keep-list에서 보관 목록을 업데이트하여 네이티브 대상에 대해 수집할 메트릭을 추가할 수 있습니다.
예를 들어 kubelet은 기본 대상 kubelet에 대한 메트릭 필터링 설정입니다. 다음 스크립트를 사용하여 regex 기반 필터링을 사용하여 기본 대상에 대해 수집된 메트릭을 필터링합니다.
kubelet = "metricX|metricY"
apiserver = "mymetric.*"
참고
정규식에서 따옴표나 백슬래시를 사용하는 경우 "test\'smetric\"s\"" 및 testbackslash\\* 예와 같이 백슬래시를 사용하여 이스케이프 처리해야 합니다.
컬렉션 빈도 또는 레이블과 같은 속성을 변경하도록 기본 대상을 추가로 사용자 지정하려면 해당 값을 false으로 설정하여 해당 대상을 사용하지 않도록 설정합니다. 그런 다음 , Azure Monitor에서 Prometheus 메트릭의 스크래핑 사용자 지정에 설명된 대로 대상에 대한 사용자 지정 작업을 만듭니다.
클러스터 별칭
클러스터 리소스 ID의 마지막 부분은 데이터를 고유하게 식별하기 위해 모든 시계열에 추가됩니다. 예를 들어 리소스 ID가 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-name/providers/Microsoft.ContainerService/managedClusters/myclustername인 경우 클러스터 레이블은 myclustername입니다. 이 클러스터 레이블을 재정의하려면 cluster_alias을(를) prometheus-collector-settings에서 업데이트합니다.
참고
영숫자 문자만 허용됩니다. 다른 모든 문자는 _로 바꿔집니다.
기록 및 경고 규칙을 사용하도록 설정하는 경우 규칙이 작동하려면 규칙 온보딩 템플릿의 클러스터 이름 매개 변수에서 클러스터 별칭 이름을 사용해야 합니다.
prometheus-collector-settings: |-
cluster_alias = ""
디버그 모드
디버깅을 위해 스크래핑되는 모든 메트릭을 보려면, enabled 설정에서 true을(를) debug-mode으로 업데이트하여 메트릭 애드온 에이전트를 디버그 모드에서 실행되도록 구성할 수 있습니다.
경고
이 모드는 성능에 영향을 줄 수 있으며 디버깅 목적으로 짧은 시간 동안만 사용하도록 설정해야 합니다.
Kube-state-metrics
관리되는 Prometheus 사용 설정의 일부로 설치된 kube-state-metrics 배포(ama-metrics-ksm)의 기본 시작 매개 변수(리소스, 메트릭 레이블 허용 목록 및 메트릭 주석 허용 목록)를 재정의하려면 ama-metrics-settings-configmap을 사용합니다.
labels_allow_list 및 annotations_allow_list 대한 구성맵의 설정은 ksm-metrics-labels-allow-list 및 ksm-metrics-annotations-allow-list에 대해 온보딩하는 동안 설정된 매개 변수를 재정의합니다.
configmap의 리소스 설정은 ama-metrics-ksm 배포를 위한 기본 수집기를 재정의합니다.
아래는 yaml 구성입니다.
ksm-config: |-
resources:
secrets: {}
configmaps: {}
labels_allow_list: # object name and label names
pods:
- app8
annotations_allow_list: # object name and annotation names
namespaces:
- kube-system
- default
참고
이러한 값을 사용자 지정하면 kube-state-metrics 작업의 일부로 수집된 기본 데이터에 영향을 줄 수 있으며 특정 대시보드에서 데이터를 로드하지 않을 수 있습니다.
ama-metrics-ksm 배포를 다시 생성해야 하는 경우, 설정 구성맵에서 전체 섹션(ksm-config)을 삭제해야 합니다. ama-metrics-ksm Pod를 삭제하거나 kubectl 롤아웃 다시 시작 배포/ama-metrics -n kube-system을 수행하여 이 작업을 수행할 수 있습니다.
필요한 경우 이러한 3개 매개 변수만 사용자 지정하는 것이 좋습니다. 추가 매개 변수를 재정의로 설정하는 것은 지원되지 않는 시나리오입니다. 가능하지만 주의해서 사용해야 합니다.
다음 단계
Prometheus 메트릭에 대한 경고 설정
Prometheus 메트릭 쿼리
Prometheus 메트릭 수집에 대해 자세히 알아보기