如何配置Kafka Chart(v17)同时暴露两类指标至Prometheus并避免请求失败?
Kafka Chart监控配置修复方案
问题背景
我们将v17版本的Kafka Chart作为自身Chart的依赖,配置监控时在values.yaml中设置如下:
kafka: metrics: kafka: enabled: true jmx: enabled: true serviceMonitor: enabled: true labels: my.custom.label/service-monitor: "1.0" ...
部署后发现Prometheus目标请求失败,原因是:同时启用了jmx-exporter和kafka-exporter两个监控服务,但生成的两个ServiceMonitor都使用相同的标签选择器,且分别请求/和/metrics路径——而kafka-exporter并不响应/路径,导致请求报错。
当前生成的ServiceMonitor定义如下:
路径错误的ServiceMonitor
spec: endpoints: - path: / port: http-metrics namespaceSelector: matchNames: - my-ns selector: matchLabels: app.kubernetes.io/component: metrics app.kubernetes.io/instance: dev-my-app app.kubernetes.io/name: my-app-kafka
路径正确的ServiceMonitor
spec: endpoints: - path: /metrics port: http-metrics namespaceSelector: matchNames: - my-ns selector: matchLabels: app.kubernetes.io/component: metrics app.kubernetes.io/instance: dev-my-app app.kubernetes.io/name: my-app-kafka
修复方案
要解决这个问题,需要让两个exporter的ServiceMonitor分别匹配对应服务,并使用正确的metrics路径。在v17版本的Kafka Chart中,可通过为每个exporter单独配置ServiceMonitor参数实现:
修改values.yaml中的监控配置,删除全局serviceMonitor配置,改为为每个exporter单独指定路径和标签:
kafka: metrics: kafka: enabled: true serviceMonitor: enabled: true path: /metrics # kafka-exporter的正确metrics路径 labels: my.custom.label/service-monitor: "1.0" jmx: enabled: true serviceMonitor: enabled: true path: / # jmx-exporter的正确metrics路径 labels: my.custom.label/service-monitor: "1.0" ...
原理说明
- 为每个exporter单独配置
serviceMonitor后,Kafka Chart会生成两个独立的ServiceMonitor,各自匹配对应exporter的服务标签(app.kubernetes.io/component会分别对应kafka-metrics和jmx-metrics),避免选择器冲突。 - 直接指定每个exporter的正确metrics路径,确保Prometheus请求路径与exporter响应路径一致,消除请求失败问题。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

