使用 Prometheus 的托管服务收集 Apache Kafka 指标

Apache Kafka 是高性能数据管道、流分析、数据集成和任务关键型应用程序的开源分布式事件流式处理平台。

本文介绍如何使用 Azure Kubernetes 服务(AKS)和已启用 Azure Arc 的 Kubernetes 配置 适用于 Prometheus 功能的 Azure Monitor 托管服务,以通过抓取 Prometheus 指标来监视 Kafka 群集。

先决条件

安装 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 导入仪表板中的说明进行作。

部署规则

  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 资源管理器模板的任何标准方法部署模板。 有关指导,请参阅用于 Azure Monitor 的资源管理器模板示例

  4. 部署模板后,可以按照查看 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 监视器时,如果要确保加载项选取服务监视器目标,请按照这些说明进行操作。