프로메테우스 이진 파일 배치
이 섹션에서는 프로메테우스 이진 파일을 배치하는 과정을 다룹니다. 기존 문서를 참고하거나 직접 검색하여 진행하시기 바랍니다.
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 포트를 노출하지 않는 파드에서는 오류가 발생할 수 있습니다.
기타 수집 구성은 클러스터 내부 배치 방식과 유사하지만, 주로 인증서 및 토큰 관련 구성이 다릅니다. 여기서는 자세히 다루지 않습니다.