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
使用 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 监视器,请按照以下说明操作。
若要使用 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 运算符 部署 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 指标配置丰富的警报集。
备注
如果使用任何其他方式在 Kafka 群集上公开 JMX 导出程序,请按照 说明相应地配置 Pod 或服务监视器 。
要查看 Strimzi 运算符公开的指标的仪表板,请参阅 Strimzi 的 Grafana 仪表板的 GitHub 位置。
成功应用服务监视器或 Pod 监视器时,如果要确保加载项选取服务监视器目标,请按照这些说明进行操作。