Apache Kafka

Apache Kafka 是一个开源的分布式事件流式处理平台,可用于高性能数据管道、流式处理分析、数据集成和任务关键型应用程序。 本文介绍如何使用 Azure Kubernetes 服务 (AKS) 配置 Azure 托管 Prometheus,以通过抓取 Prometheus 指标来监视 kafka 群集。

先决条件

安装 Kafka 导出程序

使用 Helm 图表安装 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

备注

只有 >= 2.10.0 版本的 Helm 图表支持使用 Helm 图表安装来配置托管 Prometheus Pod/服务监视器。

可以使用 values yaml 来配置 Prometheus Kafka 导出程序 Helm 图表。 请指定可用于访问 kafka 服务器的正确服务器地址。 使用参数“kafkaServer”设置服务器地址。

如果你要配置任何其他服务或 Pod 监视器,请按照此处的说明操作。

导入 Grafana 仪表板

若要使用 ID 或 JSON 导入 Grafana 仪表板,请按照从 Grafana 实验室导入仪表板的说明操作。

Kafka 导出程序 Grafana 仪表板 (ID-7589)

部署规则

  1. 下载模板和参数文件

    警报规则

  2. 编辑参数文件中的以下值。 从资源“概述”页面的“JSON 视图”中检索资源的资源 ID。

    参数
    azureMonitorWorkspace Azure Monitor 工作区的资源 ID。 从 Azure Monitor 工作区“概述”页的的“JSON 视图”检索。
    location Azure Monitor 工作区的位置。 从 Azure Monitor 工作区“概述”页的的“JSON 视图”检索。
    clusterName AKS 群集的名称。 从群集“概述”页的“JSON 视图”中检索。
    actionGroupId 警报操作组的资源 ID。 从操作组“概述”页上的“JSON 视图”中检索。 详细了解操作组
  3. 使用用于安装 ARM 模板的任何标准方法部署模板。 有关指南,请参阅用于 Azure Monitor 的 ARM 模板示例

备注

查看警报阈值,确保它适合群集/工作负载,并相应地更新它。

请注意,上述规则的范围不限定于群集。

如果你要使用任何其他 OSS prometheus 警报/记录规则,请使用此处的转换器来创建 Azure 等效的 prometheus 规则 az-prom-rules-converter

使用 strimzi 的其他 jmx_exporter 指标

如果使用 strimzi 运算符来部署 kafka 群集,请部署 pod 监视器以获取更多 jmx_exporter 指标。

备注

指标需要通过 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 仪表板

另请参阅 grafana-dashboards-for-strimzi 来查看 strimzi 运算符公开的指标的仪表板。

故障排除

成功应用服务监视器或 pod 监视器后,如果你希望确保加载项拾取服务监视器目标,请按照此处的说明操作。