다음을 통해 공유


Prometheus용 관리 서비스를 사용하여 Apache Kafka 메트릭 수집

Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 중요 업무용 애플리케이션에서 사용되는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.

이 문서에서는 AKS(Azure Kubernetes Service)와 Azure Arc 지원 Kubernetes를 사용하여 Azure Monitor Prometheus용 관리 서비스 기능을 구성하고 Prometheus 메트릭을 스크래핑하여 Kafka 클러스터를 모니터링하는 방법을 설명합니다.

필수 구성 요소

Kafka Exporter 설치

Helm 차트를 사용하여 Prometheus Kafka Exporter를 설치합니다.

helm install azmon-kafka-exporter --namespace=azmon-kafka-exporter --create-namespace --version 2.10.0 prometheus-community/prometheus-kafka-exporter --set kafkaServer="{kafka-server.namespace.svc:9092,.....}" --set prometheus.serviceMonitor.enabled=true --set prometheus.serviceMonitor.apiVersion=azmonitoring.coreos.com/v1

으로 Kafka Exporter Helm 차트를 구성할 수 있습니다. Kafka 서버에 접속할 수 있는 올바른 서버 주소를 지정합니다. 인수 kafkaServer를 사용하여 서버 주소를 설정합니다.

참고

Helm 차트 설치를 통한 관리되는 Prometheus 서비스/Pod 모니터 구성은 Helm 차트 버전 2.10.0 이상에서만 지원됩니다. 다른 서비스나 Pod 모니터를 구성하려면 다음 지침을 따릅니다.

Grafana 대시보드 가져오기

ID 또는 JSON을 사용하여 Kafka Exporter에서 Grafana 대시보드(ID 7589)를 가져오려면 Grafana Labs에서 대시보드 가져오기의 지침을 따릅니다.

규칙 배포

  1. 경고 규칙에 대한 템플릿 파일매개 변수 파일을 다운로드합니다.

  2. 매개 변수 파일에서 다음 값을 편집합니다.

    매개 변수
    azureMonitorWorkspace Azure Monitor 작업 영역의 리소스 ID입니다. Azure Monitor 작업 영역의 개요 페이지에 있는 JSON 보기에서 검색합니다.
    ___location Azure Monitor 작업 영역의 위치입니다. Azure Monitor 작업 영역의 개요 페이지에 있는 JSON 보기에서 검색합니다.
    clusterName AKS 또는 Azure Arc 지원 Kubernetes 클러스터의 이름입니다. 클러스터의 개요 페이지에서 JSON 뷰에서 검색합니다.
    actionGroupId 경고 작업 그룹의 리소스 ID입니다. 작업 그룹의 개요 페이지에서 JSON 뷰에서 검색합니다. 작업 그룹에 대해 자세히 알아보세요.
  3. Azure Resource Manager 템플릿을 설치하는 표준 방법을 사용하여 템플릿을 배포합니다. 자세한 내용은 Azure Monitor용 Resource Manager 템플릿 샘플을 참조하세요.

  4. 템플릿을 배포한 후에는 Prometheus 규칙 그룹 보기에 설명된 대로 Azure Portal에서 규칙을 볼 수 있습니다. 클러스터와 워크로드에 적합한지 확인하려면 경고 임계값을 검토합니다. 이에 따라 임계값을 업데이트합니다.

    참고

    규칙은 클러스터에 국한되지 않습니다. 규칙을 특정 클러스터로 제한하려면 규칙을 특정 클러스터로 제한을 참조하세요.

Prometheus 경고에 대해 자세히 알아봅니다. 다른 오픈 소스 Prometheus 경고/기록 규칙을 사용하려면 az-prom-rules-converter를 사용하여 Azure와 동등한 Prometheus 규칙을 만듭니다.

Strimzi를 사용하여 더 많은 JMX Exporter 메트릭 가져오기

Kafka 클러스터를 배포하기 위해 Strimzi 연산자를 사용하는 경우 Pod 모니터를 배포하여 더 많은 JMX Exporter 메트릭을 가져옵니다.

GitHub의 예와 같이 Kafka 클러스터 배포를 통해 메트릭을 노출해야 합니다. 노출할 메트릭을 구성하려면 kafka-.*-metrics.yaml 파일을 참조하세요.

여기의 Pod 모니터는 Kafka 워크로드가 배포된 네임스페이스가 kafka라고 가정합니다. 워크로드가 다른 네임스페이스에 배포된 경우 그에 따라 업데이트합니다.

apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: azmon-cluster-operator-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchLabels:
      strimzi.io/kind: cluster-operator
  namespaceSelector:
    matchNames:
      - kafka
  podMetricsEndpoints:
  - path: /metrics
    port: http
---
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: azmon-entity-operator-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: entity-operator
  namespaceSelector:
    matchNames:
      - kafka
  podMetricsEndpoints:
  - path: /metrics
    port: healthcheck
---
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: azmon-bridge-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchLabels:
      strimzi.io/kind: KafkaBridge
  namespaceSelector:
    matchNames:
      - kafka
  podMetricsEndpoints:
  - path: /metrics
    port: rest-api
---
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: azmon-kafka-resources-metrics
  labels:
    app: strimzi
spec:
  selector:
    matchExpressions:
      - key: "strimzi.io/kind"
        operator: In
        values: ["Kafka", "KafkaConnect", "KafkaMirrorMaker", "KafkaMirrorMaker2"]
  namespaceSelector:
    matchNames:
      - kafka
  podMetricsEndpoints:
  - path: /metrics
    port: tcp-prometheus
    relabelings:
    - separator: ;
      regex: __meta_kubernetes_pod_label_(strimzi_io_.+)
      replacement: $1
      action: labelmap
    - sourceLabels: [__meta_kubernetes_namespace]
      separator: ;
      regex: (.*)
      targetLabel: namespace
      replacement: $1
      action: replace
    - sourceLabels: [__meta_kubernetes_pod_name]
      separator: ;
      regex: (.*)
      targetLabel: kubernetes_pod_name
      replacement: $1
      action: replace
    - sourceLabels: [__meta_kubernetes_pod_node_name]
      separator: ;
      regex: (.*)
      targetLabel: node_name
      replacement: $1
      action: replace
    - sourceLabels: [__meta_kubernetes_pod_host_ip]
      separator: ;
      regex: (.*)
      targetLabel: node_ip
      replacement: $1
      action: replace

Strimzi를 사용하여 경고 구성

이러한 예를 참조하여 Strimzi 메트릭을 기반으로 다양한 경고 집합을 구성할 수 있습니다.

참고

Kafka 클러스터에서 JMX Exporter를 노출하는 다른 방법을 사용하는 경우 Pod 또는 서비스 모니터 구성 지침을 적절히 따릅니다.

Strimzi를 사용하여 더 많은 JMX 메트릭을 보려면 Grafana 대시보드를 확인합니다.

Strimzi 운영자가 노출하는 메트릭에 대한 대시보드를 보려면 Strimzi용 Grafana 대시보드의 GitHub 위치를 참조하세요.

문제 해결

서비스 모니터 또는 Pod 모니터가 성공적으로 적용된 후 추가 기능이 서비스 모니터 대상을 선택하는지 확인하려면 이 지침을 따릅니다.