다음을 통해 공유


ConfigMap을 사용하여 Kubernetes 클러스터에서 사용자 지정 Prometheus 스크랩 작업 만들기

Kubernetes 클러스터에서 Prometheus 메트릭 컬렉션 사용자 지정 은 ConfigMap을 사용하여 Kubernetes 클러스터의 기본 대상에서 Prometheus 메트릭의 스크래핑을 사용자 지정하는 방법을 설명합니다. 이 문서에서는 ConfigMap을 사용하여 추가 사용자 지정 및 추가 대상에 대한 사용자 지정 스크랩 작업을 만드는 방법을 설명합니다.

ConfigMaps

다음 표에서는 사용자 지정 스크래핑 작업을 만드는 데 사용되는 ConfigMaps에 대해 설명합니다. 관리되는 Prometheus를 사용하는 경우 이러한 ConfigMaps는 기본적으로 클러스터에 존재하지 않습니다.

ConfigMap Description
ama-metrics-prometheus-config (권장) 이 이름을 가진 ConfigMap을 만들면 클러스터에서 실행되는 Azure Monitor 메트릭 복제본 Pod에서 정의된 스크래핑 작업이 실행됩니다.
ama-metrics-prometheus-config-node (고급) 클러스터의 모든 Linux 노드 및 각 노드의 노드 수준 대상에서 실행되는 addon DaemonSet에 대한 Prometheus 스크랩 구성을 제공합니다. 고급 설정을 참조하세요.
ama-metrics-prometheus-config-node-windows (고급) 클러스터의 모든 Windows 노드 및 각 노드의 노드 수준 대상에서 실행되는 addon DaemonSet에 대한 Prometheus 스크랩 구성을 제공합니다. 고급 설정을 참조하세요.

Prometheus 구성 파일 만들기

직접 수정하는 ama-metrics-prometheus-config대신 구성 파일을 만든 다음 ConfigMap으로 변환하는 것이 더 쉽습니다. 이 파일의 다른 섹션에 대한 자세한 내용은 아래의 스크랩 구성 설정을 참조하세요.

다음 형식을 사용하여 Prometheus prometheus-config 스크랩 구성 파일을 만듭니다. 이는 섹션 scrape_configs 아래의 스크래핑 구성을 나열하고 선택적으로 글로벌 섹션을 사용하여 글로벌 scrape_interval, scrape_timeoutexternal_labels를 설정할 수 있습니다. 스크랩 구성에 대한 옵션에 대한 자세한 내용은 Prometheus.io 스크래핑 구성 참조 를 참조하세요.

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

다음은 샘플 Prometheus 스크랩 구성 파일입니다.

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']
- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

팁 (조언)

Kubernetes 클러스터에 대한 스크래핑 구성의 Prometheus 예제를 참조하세요.

스크랩 구성 파일의 유효성 검사

에이전트는 사용자 지정 promconfigvalidator 도구를 사용하여 ConfigMap을 통해 지정된 Prometheus 구성의 유효성을 검사합니다. 구성이 유효하지 않으면 에이전트에서 사용자 지정 구성을 거부합니다. Prometheus 구성 파일을 만든 후에는 이 도구를 사용하여 에이전트에 대한 ConfigMap을 만들기 전에 구성의 유효성을 검사할 수 있습니다.

promconfigvalidator 도구는 Azure Monitor 메트릭 애드온 포드 내에 포함되어 있습니다. 클러스터의 kube-system 네임스페이스에 있는 ama-metrics-node-* 파드를 사용하여 유효성 검사를 위한 도구를 다운로드할 수 있습니다. 다음 명령을 사용하여 도구 및 해당 구성을 다운로드하는 데 사용합니다 kubectl cp .

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

실행 파일과 yaml을 복사한 후 Prometheus 구성 파일의 경로를 찾습니다. 그런 다음 명령에서 <config path>을(를) 바꾸고, 다음 명령으로 유효성 검사기를 실행하십시오.

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

선택적 merged-otel-config.yaml 매개 변수와 함께 경로가 제공되지 않으면 유효성 검사기를 실행하면 병합된 구성 파일이 output 생성됩니다. 이 자동 생성된 병합 파일은 도구 유효성 검사 및 디버깅 용도로만 사용되므로 사용하지 마세요.

ConfigMap으로 구성 파일 배포

사용자 지정 Prometheus 구성 파일은 kube-system 네임스페이스의 ama-metrics-prometheus-config, ama-metrics-prometheus-config-node 또는 ama-metrics-prometheus-config-node-windows ConfigMap 내부에서 prometheus-config라는 필드로 사용됩니다. Prometheus 구성 파일의 이름을 파일 확장명 없이 prometheus-config로 바꾸고 사용자 지정 스크랩 작업 구성에 대해 만들려는 ConfigMap에 따라 다음 샘플 명령 중 하나 이상을 실행하여 스크랩 구성 파일에서 ConfigMap을 만듭니다.

복제본 세트에서 사용할 ConfigMap을 만듭니다.

kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

그러면 네임스페이스에 이름이 지정된 ama-metrics-prometheus-configkube-system ConfigMap이 만들어집니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 ama-metrics 복제본 포드를 살펴볼 수 있습니다.

Linux DaemonSet에서 사용할 ConfigMap을 만듭니다.

kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

그러면 네임스페이스에 이름이 지정된 ama-metrics-prometheus-config-nodekube-system ConfigMap이 만들어집니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 linux deamonset Pod를 ama-metrics-node 참조하세요.

Windows DaemonSet에서 사용할 ConfigMap 만들기

kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

그러면 네임스페이스에 이름이 지정된 ama-metrics-prometheus-config-node-windowskube-system ConfigMap이 만들어집니다. 구성 유효성 검사, 처리 또는 병합에 문제가 있는지 확인하려면 windows deamonset Pod를 ama-metrics-win-node 참조하세요.

Troubleshooting

kube-system 네임스페이스에서 ConfigMap을 성공적으로 만들었지만 여전히 사용자 지정 대상이 스크래핑되지 않는 경우 kubectl logs를 사용하여 ama-metrics-prometheus-config ConfigMap에 대한 replica pod 로그 또는 ama-metrics-prometheus-config-node ConfigMap에 대한 DaemonSet pod 로그에서 오류를 확인하고 Start Merging Default and Custom Prometheus Config 섹션에 prometheus-config-merger 접두사가 있는 오류가 없는지 확인합니다.

스크랩 구성

스크랩 구성에 대해 현재 지원되는 대상 검색 메서드는 대상을 지정하거나 검색하기 위한 static_configs 또는 kubernetes_sd_configs입니다.

정적 구성에는 다음과 같이 정적 대상 목록과 추가할 추가 레이블이 있습니다.

scrape_configs:
  - job_name: example
    - targets: [ '10.10.10.1:9090', '10.10.10.2:9090', '10.10.10.3:9090' ... ]
    - labels: [ label1: value1, label1: value2, ... ]

kubernetes_sd_configs를 사용하여 검색된 대상은 지정된 역할에 따라 각각 다른 __meta_* 레이블을 갖습니다. relabel_configs 섹션의 레이블을 사용하여 대상을 필터링하거나 대상의 레이블을 바꿀 수 있습니다.

레이블 재지정 구성

relabel_configs 섹션은 대상 검색 시 적용되며 작업의 각 대상에 적용됩니다. 다음 예에서는 relabel_configs를 사용하는 방법을 보여 줍니다.

레이블 추가 작업의 모든 메트릭에 example_label이라는 새 레이블을 값 example_value과 함께 추가합니다. 해당 레이블이 항상 존재하고 작업의 모든 대상에 대한 레이블을 추가하기 때문에 __address__를 원본 레이블로만 사용합니다.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

Kubernetes Service 검색 레이블 사용

작업이 kubernetes_sd_configs를 사용하여 대상을 검색하는 경우 각 역할에는 메트릭에 대한 관련 __meta_* 레이블이 있습니다. 대상을 검색한 후 __* 레이블이 삭제됩니다. 메트릭 수준에서 사용하여 필터링하려면 먼저 레이블 이름을 할당하여 relabel_configs를 사용하여 유지합니다. 그런 다음 metric_relabel_configs를 사용하여 필터링합니다.

# Use the kubernetes namespace as a label called 'kubernetes_namespace'
relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
  action: replace
  target_label: kubernetes_namespace

# Keep only metrics with the kubernetes namespace 'default'
metric_relabel_configs:
- source_labels: [kubernetes_namespace]
  action: keep
  regex: 'default'

작업 및 인스턴스 레이블 재지정

다른 레이블과 마찬가지로 원본 레이블을 기반으로 jobinstance 레이블 값을 변경할 수 있습니다.

# Replace the job name with the pod label 'k8s app'
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_k8s_app]
  target_label: job

# Replace the instance name with the node name. This is helpful to replace a node IP
# and port with a value that is more readable
relabel_configs:
- source_labels: [__meta_kubernetes_node_name]
  target_label: instance

메트릭 레이블 재지정 구성

메트릭 레이블 재지정 구성은 스크래핑 후, 수집 전에 적용됩니다. metric_relabel_configs 섹션을 사용하여 스크래핑 후 메트릭을 필터링합니다. 다음 예제를 참조하세요.

이름별 메트릭 삭제

# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: drop
  regex: 'example_metric_name'

이름으로 특정 메트릭만 유지

# Keep only the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: keep
  regex: 'example_metric_name'
# Keep only metrics that start with 'example_'
metric_relabel_configs:
- source_labels: [__name__]
  action: keep
  regex: '(example_.*)'

레이블별로 메트릭 필터링

# Keep metrics only where example_label = 'example'
metric_relabel_configs:
- source_labels: [example_label]
  action: keep
  regex: 'example'
# Keep metrics only if `example_label` equals `value_1` or `value_2`
metric_relabel_configs:
- source_labels: [example_label]
  action: keep
  regex: '(value_1|value_2)'
# Keep metrics only if `example_label_1 = value_1` and `example_label_2 = value_2`
metric_relabel_configs:
- source_labels: [example_label_1, example_label_2]
  separator: ';'
  action: keep
  regex: 'value_1;value_2'
# Keep metrics only if `example_label` exists as a label
metric_relabel_configs:
- source_labels: [example_label_1]
  action: keep
  regex: '.+'

메트릭 이름 바꾸기 메트릭 이름 바꾸기는 지원되지 않습니다.

비고

사용자 지정 구성의 모든 작업에 레이블을 추가하려면 각 작업에 사용하는 metrics_relabel_configs 레이블을 명시적으로 추가합니다. 전역 외부 레이블은 ConfigMap 기반 prometheus 구성을 사용하여 지원되지 않습니다.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

기본 인증 및 전달자 토큰

스크래핑 구성에서 사용자 이름, 암호 또는 자격 증명을 일반 텍스트로 사용하는 경우 추가 변경이 필요하지 않습니다. 구성에 지정된 값은 스크래핑에 사용됩니다. prometheus 구성에서 username_file 또는 password_file (또는 _file 설정) 값을 basic_auth 또는 bearer_token 설정에 사용하는 경우, 다음 단계를 따르십시오.

  1. kube-system 네임스페이스에 ama-metrics-mtls-secret라는 이름의 비밀을 만듭니다.

    password1 의 이름은 다음 단계에서 Prometheus 스크랩 구성의 password_file 파일 경로에 있는 파일 이름과 일치하는 경우 무엇이든 될 수 있습니다. 키의 값은 base64로 인코딩되어야 합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      password1: <base64-encoded-string>
    

    ama-metrics-mtls-secret 비밀은 경로 ama-metrics에 있는 /etc/prometheus/certs/ Pod에 탑재되어 Prometheus 스크래퍼에서 사용할 수 있습니다. 위의 예제에서 키password1 는 파일 이름이 됩니다. 값은 base64 디코딩되어 컨테이너 내의 파일 내용으로 추가됩니다.

  2. ConfigMap의 사용자 지정 스크랩 구성에 파일 경로를 제공합니다.

    기본 인증 필드에는 username 실제 사용자 이름 문자열이 포함되어야 합니다. 필드에는 password_file 암호가 포함된 파일의 경로가 포함되어야 합니다.

    # Sets the `Authorization` header on every scrape request with the
    # configured username and password.
    basic_auth:
      username: <username string>
      password_file: /etc/prometheus/certs/password1
    

    전달자 토큰 필드에는 bearer_token_file 토큰이 포함된 파일의 경로가 포함되어야 합니다.

    # Sets the `Authorization` header on every scrape request with the bearer token
    # read from the configured file. It is mutually exclusive with `bearer_token`.
    bearer_token_file: /etc/prometheus/certs/password1
    

이러한 설정에 대한 자세한 내용은 Prometheus scrape_config 설명서를 참조하세요.

TLS 기반 스크래핑

https 엔드포인트에서 Prometheus 메트릭을 스크래핑하려면, Prometheus 구성, PodMonitor, 또는 ServiceMonitor에 schemehttps로 설정되고, 추가적인 TLS 설정이 필요합니다.

  1. kube-system 네임스페이스에 ama-metrics-mtls-secret라는 이름의 비밀을 만듭니다. 비밀 개체의 데이터 섹션에 지정된 각 키-값 쌍은 데이터 섹션에 지정된 키와 동일한 파일 이름을 가진 이 /etc/prometheus/certs 위치에 별도의 파일로 탑재됩니다. 비밀 값은 base64로 인코딩되어야 합니다.

    다음은 비밀의 YAML 예제입니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      <certfile>: base64_cert_content    
      <keyfile>: base64_key_content 
    

    ama-metrics-mtls-secret 비밀은 경로 ama-metrics에 있는 /etc/prometheus/certs/ Pod에 탑재되어 Prometheus 스크래퍼에서 사용할 수 있습니다. 키는 파일 이름이 됩니다. 값은 base64 디코딩되어 컨테이너 내의 파일 내용으로 추가됩니다.

  2. Prometheus 구성, PodMonitor 또는 ServiceMonitor에서 파일 경로를 제공합니다.

    • 다음 예제를 사용하여 ConfigMap에서 TLS 구성 설정을 제공합니다.
    tls_config:
       # CA certificate to validate API server certificate with.
       ca_file: /etc/prometheus/certs/<certfile>
    
       # Certificate and key files for client cert authentication to the server.
       cert_file: /etc/prometheus/certs/<certfile>
       key_file: /etc/prometheus/certs/<keyfile>
    
       # Disable validation of the server certificate.
       insecure_skip_verify: false
    

기본 인증 및 TLS

ConfigMap에서 기본 인증 또는 전달자 토큰(파일 기반 자격 증명) 및 TLS 인증 설정을 모두 사용하려면 다음 예제와 같이 해당 base64로 인코딩된 값이 있는 데이터 섹션의 모든 키를 비밀에 포함해야 ama-metrics-mtls-secret 합니다.

apiVersion: v1
kind: Secret
metadata:
  name: ama-metrics-mtls-secret
  namespace: kube-system
type: Opaque
data:
  certfile: base64_cert_content    # used for TLS
  keyfile: base64_key_content      # used for TLS
  password1: base64-encoded-string # used for basic auth
  password2: base64-encoded-string # used for basic auth

비고

경로는 /etc/prometheus/certs/ 필수이지만 password1 모든 문자열일 수 있으며 위에서 만든 비밀의 데이터에 대한 키와 일치해야 합니다. 이는 비밀 ama-metrics-mtls-secret 이 컨테이너 내의 경로 /etc/prometheus/certs/ 에 탑재되기 때문입니다.

base64로 인코딩된 값은 비밀이 파일로 탑재될 때 ama-metrics Pod에 의해 자동으로 디코딩됩니다. 비밀 이름이 ama-metrics-mtls-secret이고 kube-system 네임스페이스에 있는지 확인합니다.

비밀을 먼저 만든 다음 ConfigMap, PodMonitor 또는 ServiceMonitor를 네임스페이스에 kube-system 만들어야 합니다. 비밀 만들기는 순서가 중요합니다. 비밀이 없지만 비밀을 가리키는 ConfigMap, PodMonitor 또는 ServiceMonitor가 있는 경우, ama-metrics prometheus-collector 컨테이너 로그에 다음 오류가 발생합니다. no file found for cert....

TLS 구성 설정에 대한 자세한 내용은 tls_config 참조하세요.

고급 설정: DaemonSet에 대한 사용자 지정 Prometheus 스크랩 작업 구성

Replica Pod는 ama-metrics 사용자 지정 Prometheus 구성을 사용하고 지정된 대상을 스크랩합니다. 많은 수의 노드와 Pod가 있고 많은 양의 메트릭을 긁어낼 클러스터의 경우 적용 가능한 사용자 지정 스크랩 대상 중 일부는 단일 ama-metrics 복제본 Pod에서 DaemonSet Pod로 ama-metrics 오프로드될 수 있습니다.

ama-metrics-prometheus-config-node ConfigMap은 복제본 집합 ConfigMap과 유사하며 각 노드에 정적 스크랩 구성을 포함하도록 만들 수 있습니다. 스크랩 구성은 단일 노드만 대상으로 지정해야 하며 서비스 검색/Pod 주석을 사용하면 안 됩니다. 그렇지 않으면 각 노드가 모든 대상을 스크래핑하려고 시도하고 Kubernetes API 서버에 대해 많은 호출을 합니다.

사용자 지정 스크랩 대상은 대상과 함께 사용하고 static_configs 환경 변수를 사용하고 $NODE_IP 스크래핑할 포트를 지정하여 동일한 형식을 따를 수 있습니다. DaemonSet의 각 Pod는 구성을 가져오고 메트릭을 긁어 해당 노드로 보냅니다.

다음 node-exporter 구성은 DaemonSet Pod의 기본 대상 중 하나입니다. 모든 $NODE_IP 추가 기능 컨테이너에 ama-metrics 대해 이미 설정된 환경 변수를 사용하여 노드의 특정 포트를 대상으로 합니다.

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

스크랩 구성 설정

다음 섹션에서는 ConfigMap에 사용되는 Prometheus 구성 파일에서 지원되는 설정을 설명합니다. 이러한 설정에 대한 자세한 내용은 Prometheus 구성 참조 를 참조하세요.

글로벌 설정

전역 설정에 대한 구성 형식은 OSS prometheus 구성에서 지원하는 것과 동일합니다.

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

전역 섹션에 제공된 설정은 모든 스크랩 작업(Configmap 및 사용자 지정 리소스의 작업)에 적용되지만, 개별 작업에 설정된 경우 개별 작업의 설정이 우선 적용됩니다.

비고

모든 스크랩 작업에 적용되는 전역 설정을 사용하고 사용자 지정 리소스 만 사용하려는 경우 전역 설정만 사용하여 ConfigMap을 만들어야 합니다(사용자 지정 리소스의 각 설정은 전역 섹션의 설정을 재정의합니다.)

다음 단계