Apache Kafka 是一个开源的分布式事件流式处理平台,可用于高性能数据管道、流式处理分析、数据集成和任务关键型应用程序。 本文介绍如何使用 Azure Kubernetes 服务 (AKS) 配置 Azure 托管 Prometheus,以通过抓取 Prometheus 指标来监视 kafka 群集。
- 在 AKS 上运行的 Kafka 群集
- 在 AKS 群集上启用的 Azure 托管 Prometheus - 在 AKS 上启用 Azure 托管 Prometheus
使用 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 监视器,请按照此处的说明操作。
若要使用 ID 或 JSON 导入 Grafana 仪表板,请按照从 Grafana 实验室导入仪表板的说明操作。
Kafka 导出程序 Grafana 仪表板 (ID-7589)
下载模板和参数文件
警报规则
编辑参数文件中的以下值。 从资源“概述”页面的“JSON 视图”中检索资源的资源 ID。
参数 值 azureMonitorWorkspace
Azure Monitor 工作区的资源 ID。 从 Azure Monitor 工作区“概述”页的的“JSON 视图”检索。 location
Azure Monitor 工作区的位置。 从 Azure Monitor 工作区“概述”页的的“JSON 视图”检索。 clusterName
AKS 群集的名称。 从群集“概述”页的“JSON 视图”中检索。 actionGroupId
警报操作组的资源 ID。 从操作组“概述”页上的“JSON 视图”中检索。 详细了解操作组 使用用于安装 ARM 模板的任何标准方法部署模板。 有关指南,请参阅用于 Azure Monitor 的 ARM 模板示例。
备注
查看警报阈值,确保它适合群集/工作负载,并相应地更新它。
请注意,上述规则的范围不限定于群集。
如果你要使用任何其他 OSS prometheus 警报/记录规则,请使用此处的转换器来创建 Azure 等效的 prometheus 规则 az-prom-rules-converter
如果使用 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 指标的丰富警报集。
备注
如果使用任何其他方式在 kafka 群集上公开 jmx_exporter,请按照此处的说明操作,了解如何相应地配置 pod 或服务监视器。
另请参阅 grafana-dashboards-for-strimzi 来查看 strimzi 运算符公开的指标的仪表板。
成功应用服务监视器或 pod 监视器后,如果你希望确保加载项拾取服务监视器目标,请按照此处的说明操作。