kubernetes prometheus-operator(kube-prometheus-stack) 초기 모니터링 Target 현황
우리는 보통 POD에 아래와 같이 prometheus.io/scrape
와 prometheus.io/port
annotations이 있다면 자동으로 Prometheus가 메트릭을 수집해줄 것이라고 믿고 있다.
prometheus.io/port: 10254
prometheus.io/scrape: true

그러나 Prometheus의 Webui에서 Target(메뉴 -> Status -> Target)을 보면 모니터링 대상에서 빠져있다.

이유는 몇가지 설정이 빠져있기 때문인데, prometheus.io/scrape
annotations이 있는 경우 모니터링 할 수 있도록 수정하는 방법을 구성해본다.
Prometheus scrape 구성 방법
annotations이 있는 경우, metric을 scrape하도록 구성하는 방법에는 몇가지 있는, additionalScrapeConfigs과 additionalScrapeConfigsSecret이 있는데 각각의 장단점이 있다.
additionalScrapeConfigs - 설정 변경이 필요한 경우 helm으로 재배포
additionalScrapeConfigsSecret - 설정 변경이 필요한 경우 secret만 변경하는 방법
이런 경우 난이도가 좀 있는 "additionalScrapeConfigsSecret"로 진행한다.
scrape-config의 경우 아래 레퍼런스를 참고한다.
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config
아래 설정으로 kube-prometheus-stack
아래와 같이 설정을 추가하고 template 파일을 생성한다.
# helm template prometheus kube-prometheus-stack \
--repo https://prometheus-community.github.io/helm-charts \
--dependency-update --include-crds --skip-tests \
--set alertmanager.service.type=LoadBalancer \
--set alertmanager.service.port=80 \
--set prometheus.service.type=LoadBalancer \
--set prometheus.service.port=80 \
--set grafana.service.type=LoadBalancer \
--set prometheus.prometheusSpec.additionalScrapeConfigsSecret.enabled=true \
--set prometheus.prometheusSpec.additionalScrapeConfigsSecret.name=prometheus-additional-scrape-configs-secret \
--set prometheus.prometheusSpec.additionalScrapeConfigsSecret.key=additional-scrape-configs.yaml > prometheus-deploy.yaml
template 배포
# kubectl apply -f prometheus-deploy.yaml --server-side
POD를 scrape하도록 secret 생성 및 적용
위 template 설정에서 secret 이름과 key 몇칭을 정리했다.
secret name : prometheus-additional-scrape-configs-secret
additional-scrape-configs.yaml
이를 기반으로 secret를 생성한다.
additional-scrape-configs.yaml
- job_name: 'autoscrape-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
해당 파일을 기반으로 secret를 생성한다.
# kubectl create secret generic prometheus-additional-scrape-configs-secret --from-file=additional-scrape-configs.yaml --dry-run=client -oyaml > prometheus-additional-scrape-configs-secret.yaml
생성된 prometheus-additional-scrape-configs-secret.yaml
파일 내용은 아래와 같다.
apiVersion: v1
data:
additional-scrape-configs.yaml: LSBqb2JfbmFtZTogJ2F1dG9zY3JhcGUtcG9kcycKICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6CiAgLSByb2xlOiBwb2QKICByZWxhYmVsX2NvbmZpZ3M6CiAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGVdCiAgICBhY3Rpb246IGtlZXAKICAgIHJlZ2V4OiB0cnVlCiAgLSBzb3VyY2VfbGFiZWxzOiBbX19hZGRyZXNzX18sIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydF0KICAgIGFjdGlvbjogcmVwbGFjZQogICAgcmVnZXg6IChbXjpdKykoPzo6XGQrKT87KFxkKykKICAgIHJlcGxhY2VtZW50OiAkMTokMgogICAgdGFyZ2V0X2xhYmVsOiBfX2FkZHJlc3NfXwo=
kind: Secret
metadata:
creationTimestamp: null
name: prometheus-additional-scrape-configs-secret
이를 시스템에 적용한다.
# kubectl apply -f prometheus-additional-scrape-configs-secret.yaml
kubernetes_sd_configs
레퍼런스
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config
Prometheus에서 POD scrape 현황
Webui Target에서 보면 모니터링되는 POD가 보이기 시작한다.

ingress-nginx pod는 "10.233.71.7" IP를 할당받고 있는 것이고, 해당 IP로 메트릭을 수집하고 있다.
아래와 같이 수집된 메트릭을 검색해서 확인이 가능하다.
