LabHub

PCA — 프로메테우스 인증 어소시에이트 · 프로메테우스 구조와 데이터 모델 · 실습

스크레이프 설정과 릴레이블링

LabHub 에서 이어서 보기

목표

프로메테우스 스크레이프 설정을 처음부터 끝까지 직접 쓰고, 그 설정이 실제 클러스터의 파드를 어떻게 고르는지 확인합니다. 끝나면 남의 prometheus.yml 을 보고 어떤 타깃이 살아남고 어떤 메트릭이 버려지는지 말할 수 있습니다.

왜 중요한가

스크레이프 설정은 프로메테우스에서 유일하게 "무엇을 볼지"를 결정하는 자리입니다. 그 뒤의 모든 쿼리와 알림은 여기서 살아남은 데이터만 다룹니다. 릴레이블링이 어렵게 느껴지는 이유는 문법이 아니라 두 단계가 서로 다른 시점에 동작하기 때문입니다. relabel_configs 는 스크레이프 전에 타깃 목록을 다루고, metric_relabel_configs 는 스크레이프 후에 들어온 메트릭을 다룹니다. 앞 단계에서 버린 타깃은 요청 자체가 나가지 않으므로 비용이 0 이고, 뒤 단계에서 버린 메트릭은 이미 네트워크와 파싱 비용을 치른 뒤입니다. 이 차이가 대규모 클러스터에서 프로메테우스의 생사를 가릅니다. 가드레일도 같은 맥락입니다. sample_limit 이 없으면 카디널리티가 터진 서비스 하나가 전체 모니터링을 멈춥니다.

단계

1. /root/pca-scrape/prometheus.yml 을 만들고 global 블록을 씁니다. scrape_interval: 15s, evaluation_interval: 30s, scrape_timeout: 10s, 그리고 external_labels 아래 cluster: homelab.
2. scrape_configs 리스트의 첫 번째 항목에 job_name: prometheus-self 를 만들고 metrics_path: /metrics, static_configstargetslocalhost:9090 하나를 넣습니다.
3. 두 번째 항목에 job_name: checkout-api 를 만들고 scrape_interval: 30s, scrape_timeout: 20s, sample_limit: 20000, label_limit: 24, label_value_length_limit: 256 을 넣습니다.
4. 세 번째 항목에 job_name: kubernetes-pods 를 만들고 kubernetes_sd_configsrole: pod 를 지정한 뒤, namespaces.namespca-scrape 하나만 넣어 감시 범위를 좁힙니다.
5. 세 번째 잡의 relabel_configs 에 규칙 세 개를 넣습니다. (a) action: keep, source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape], regex: "true" (b) action: replace, source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port], target_label: __address__, replacement: '$1:$2' (c) action: replace, source_labels: [__meta_kubernetes_namespace], target_label: namespace.
6. 같은 잡에 action: labelmap, regex: __meta_kubernetes_pod_label_(.+) 규칙을 추가하고, metric_relabel_configs 에 두 규칙을 넣습니다. (a) action: drop, source_labels: [__name__], regex: 'go_gc_duration_seconds.*|python_gc_.*' (b) action: replace, source_labels: [__name__], regex: 'http_requests_total', target_label: user_id, replacement: ''.
7. 네임스페이스 pca-scrape 를 만들고, 그 안에 컨피그맵 prometheus-config 을 만듭니다. 키 이름은 prometheus.yml 이고 값은 방금 쓴 파일의 내용입니다.
8. 네임스페이스 pca-scrape 에 파드 checkout-api 를 만듭니다. 레이블 app: checkout-api, 어노테이션 prometheus.io/scrape: "true", prometheus.io/port: "8080", prometheus.io/path: "/metrics", 컨테이너 포트는 이름 metricscontainerPort: 8080.

참고

단계 8개

  1. global 블록 쓰기
  2. static_configs 잡 추가
  3. 가드레일 거는 잡
  4. kubernetes_sd 로 파드 찾기
  5. keep 으로 고르고 주소를 재조립
  6. labelmap 과 metric_relabel_configs
  7. 설정을 ConfigMap 으로 올리기
  8. keep 규칙이 살려 낼 파드 만들기