Apache Kafka 是高性能数据管道、流分析、数据集成和任务关键型应用程序的开源分布式事件流式处理平台。
本文介绍如何使用 Azure Kubernetes 服务(AKS)和已启用 Azure Arc 的 Kubernetes 配置 适用于 Prometheus 功能的 Azure Monitor 托管服务,以通过抓取 Prometheus 指标来监视 Kafka 群集。
先决条件
- 在 AKS 或已启用 Azure Arc 的 Kubernetes 上运行的 Kafka 群集 - 部署在 AKS 上运行的 Kafka 群集
- 在群集上启用 Azure 托管 Prometheus - 在 AKS 上启用 Azure 托管 Prometheus
安装 Kafka 导出程序
使用 Helm 图表安装 Prometheus Kafka 导出程序 :
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 导出程序 Helm 图表。 指定可以访问 Kafka 服务器的正确服务器地址。 使用参数 kafkaServer设置服务器地址。
注释
只有 Helm 图表版本 2.10.0 或更高版本支持通过 Helm 图表安装进行托管 Prometheus 服务/Pod 监视器配置。 如果你要配置任何其他服务或 Pod 监视器,请按照以下说明操作。
导入 Grafana 仪表板
若要使用 ID 或 JSON 在 Kafka 导出器中导入 Grafana 仪表板(ID 7589), 请按照 从 Grafana Labs 导入仪表板中的说明进行作。
部署规则
- 编辑参数文件中的以下值。 - 参数 - 价值 - azureMonitorWorkspace- Azure Monitor 工作区的资源 ID。 在 Azure Monitor 工作区的“概述”页上的“JSON 视图”中检索。 - location- Azure Monitor 工作区的位置。 在 Azure Monitor 工作区的“概述”页上的“JSON 视图”中检索。 - clusterName- AKS 或 Azure Arc 启用的 Kubernetes 群集名称。 从群集概述页面的“JSON 视图”中检索。 - actionGroupId- 警报操作组的资源 ID。 从群集概述页面的“JSON 视图”中检索。 详细了解操作组。 
- 使用用于安装 Azure 资源管理器模板的任何标准方法部署模板。 有关指导,请参阅用于 Azure Monitor 的资源管理器模板示例。 
- 部署模板后,可以按照查看 Prometheus 规则组中所述,在 Azure 门户中查看规则。 查看警报阈值,以确保它们适合你的集群和工作负载。 相应地更新阈值。 - 注释 - 这些规则并非针对某个群集范围限定。 要将规则范围限定于特定群集,请参阅将规则限制为特定群集。 
你可以详细了解 Prometheus 警报。 如果你想使用任何其他开源 Prometheus 警报/记录规则,请使用 az-prom-rules-converter 来创建与 Azure 等效的 Prometheus 规则。
使用 Strimzi 获取更多 JMX 导出器指标
如果使用 Strimzi 运算符 部署 Kafka 群集,请部署 Pod 监视器以获取更多 JMX 导出器 指标。
Kafka 群集部署需要公开指标,如 GitHub 中的示例。 请参考 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 导出程序,请按照 说明相应地配置 Pod 或服务监视器 。
使用 Strimzi 查看 Grafana 仪表板以获取更多 JMX 指标
要查看 Strimzi 运算符公开的指标的仪表板,请参阅 Strimzi 的 Grafana 仪表板的 GitHub 位置。
故障排除
成功应用服务监视器或 Pod 监视器时,如果要确保加载项选取服务监视器目标,请按照这些说明进行操作。