프로메테우스 외부 클러스터 서비스 발견 구성

프로메테우스 이진 파일 배치

이 섹션에서는 프로메테우스 이진 파일을 배치하는 과정을 다룹니다. 기존 문서를 참고하거나 직접 검색하여 진행하시기 바랍니다.

API 서버 접근을 위한 토큰 생성

1. 토큰 획득

먼저, 프로메테우스가 API 서버에 접근할 수 있는 서비스 계정 토큰을 생성해야 합니다.

# 모니터링 네임스페이스에 생성된 서비스 계정 확인
kubectl get sa -n monitoring prometheus-service

# 서비스 계정의 YAML 정보 확인
kubectl get sa -n monitoring prometheus-service -o yaml

# 토큰이 포함된 시크릿에서 토큰 값 추출
kubectl get secrets -n monitoring prometheus-service-token-xyz123 -o jsonpath='{.data.token}'

2. 토큰 유효성 검증

생성된 토큰이 실제로 API 서버에 접근 가능한지 확인합니다.

# 토큰 디코딩
TOKEN=$(kubectl get secrets -n monitoring prometheus-service-token-xyz123 -o jsonpath='{.data.token}' | base64 -d)

# API 서버 노드 메트릭 접근 테스트
curl --cacert /etc/kubernetes/pki/ca.crt -H "Authorization: Bearer ${TOKEN}" https://192.168.10.89:6443/api/v1/nodes/k8s-node1/proxy/metrics/cadvisor | head

위 명령 실행 시 다음과 같은 메트릭 정보가 표시되어야 합니다:

# TYPE cadvisor_version_info gauge
cadvisor_version_info{cadvisorRevision="",cadvisorVersion="",dockerVersion="",kernelVersion="3.10.0-1160.108.1.el7.x86_64",osVersion="CentOS Linux 7 (Core)"} 1
# HELP container_blkio_device_usage_total Blkio Device bytes usage
# TYPE container_blkio_device_usage_total counter
container_blkio_device_usage_total{container="",device="/dev/vda",id="/",image="",major="253",minor="0",name="",namespace="",operation="Async",pod=""} 3.12744192e+09 1725501954356

3. 토큰 파일로 저장

검증된 토큰을 파일로 저장하여 프로메테우스 서버로 전송합니다.

# 토큰 파일로 저장
kubectl get secrets -n monitoring prometheus-service-token-xyz123 -o jsonpath='{.data.token}' | base64 -d > k8s-cluster.token

# 프로메테우스 서버로 파일 전송
scp -P 15678 k8s-cluster.token 192.168.10.91:/usr/local/prometheus/

프로메테우스 수집 작업 구성

1. API 서버 메트릭 수집

프로메테우스가 Kubernetes API 서버의 메트릭을 수집하도록 구성합니다.

- job_name: 'kubernetes-apiservers'
  metrics_path: /metrics
  scheme: https
  tls_config:
    insecure_skip_verify: true
  bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  kubernetes_sd_configs:
  - role: endpoints
    api_server: https://192.168.10.89:6443
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: default;kubernetes;https
  - target_label: __address__
    replacement: 192.168.10.89:6443

2. 노드 메트릭 수집

클러스터 노드의 메트릭을 수집하도록 프로메테우스를 구성합니다.

- job_name: 'kubernetes-nodes'
  metrics_path: /metrics
  scheme: http
  tls_config:
    insecure_skip_verify: true
  bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  kubernetes_sd_configs:
  - role: node
    api_server: https://192.168.10.89:6443
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  relabel_configs:
   - source_labels: [__address__]
     regex: '(.*):10250'
     replacement: '${1}:9100'
     target_label: __address__
     action: replace
   - source_labels: [__meta_kubernetes_node_label_failure_domain_beta_kubernetes_io_region]
     regex: '(.*)'
     replacement: 'NODE'
     action: replace
     target_label: Type
   - action: labelmap
     regex: __meta_kubernetes_node_label_(.+)

3. 파드 메트릭 수집

클러스터 내 파드의 메트릭을 수집하도록 구성합니다.

- job_name: 'kubernetes-pods'
  tls_config:
    insecure_skip_verify: true
  bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  kubernetes_sd_configs:
  - role: pod
    api_server: https://192.168.10.89:6443
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /usr/local/prometheus/k8s-cluster.token
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep 
    regex: true 
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:$2
    target_label: __address__
  - action: labelmap
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: kubernetes_pod_name

주의: 새로 구성된 클러스터의 경우 모든 파드가 수집 대상이 될 수 있으므로, /metrics 포트를 노출하지 않는 파드에서는 오류가 발생할 수 있습니다.

기타 수집 구성은 클러스터 내부 배치 방식과 유사하지만, 주로 인증서 및 토큰 관련 구성이 다릅니다. 여기서는 자세히 다루지 않습니다.

태그: prometheus kubernetes service-discovery Monitoring

6월 17일 00:43에 게시됨