在自定义KafkaConnect插件中暴露Prometheus指标的方案咨询
解决Strimzi 0.35.1 Kafka Connect自定义连接器暴露Prometheus指标的问题
方案1:利用Strimzi原生JMX Exporter集成(最直接)
Strimzi 0.35.1的Kafka Connect默认支持通过JMX Exporter将JMX指标转为Prometheus可抓取的格式,这是最贴合原生体系的方案,无需额外端口或镜像改造:
- 先确保你的自定义连接器将指标通过JMX MBean暴露(比如用
io.prometheus.jmx.JmxCollector注解或代码逻辑实现JMX指标输出) - 在KafkaConnect CR中启用Prometheus监控:
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: my-connect-cluster spec: metrics: prometheus: enabled: true # 保留你原有其他配置(如镜像、副本数、连接器配置等) - 部署后,Strimzi会自动为Connect Pod配置JMX Exporter,将JMX指标转换成HTTP端点(默认路径
/metrics),Prometheus可通过Kubernetes Service发现自动抓取这些指标
方案2:自定义Connect镜像+声明额外端口(适合直接HTTP暴露指标的场景)
如果你的连接器必须通过HTTP直接暴露Prometheus指标,可通过自定义镜像+CR中声明额外端口实现:
- 构建自定义Kafka Connect镜像,将你的连接器和Prometheus Java客户端依赖打包进去,在连接器代码中启动HTTP指标服务(比如绑定9999端口)
- 在KafkaConnect CR中添加端口声明,绕过Strimzi默认CRD的端口限制:
spec: template: pod: containers: - name: connect ports: - name: custom-metrics containerPort: 9999 protocol: TCP # 其他原有配置... - 配置Prometheus通过Kubernetes Service抓取9999端口的指标,可通过修改原有Connect Service或创建新Service暴露该端口
方案3:自定义JMX Exporter采集规则(适配自定义指标)
如果需要针对自定义连接器的JMX指标做更精细的采集控制,可通过Strimzi的metrics.custom配置扩展:
- 创建ConfigMap存储自定义JMX Exporter规则,比如:
apiVersion: v1 kind: ConfigMap metadata: name: custom-jmx-exporter-config data: config.yaml: |- rules: - pattern: 'my.custom.connector<type=(.*), name=(.*)><>(.*):' name: 'kafka_connect_custom_$1_$3' labels: connector: '$2' - 在KafkaConnect CR中引用该ConfigMap:
spec: metrics: prometheus: enabled: true configMapRef: name: custom-jmx-exporter-config # 其他原有配置...
注意事项
- 优先选择方案1,完全适配Strimzi原生监控,避免额外维护成本
- 方案2需要自定义镜像,需注意Strimzi的Pod安全策略是否允许添加自定义端口
- Pushgateway会引入指标持久化、标签基数膨胀等问题,不推荐作为首选方案
内容的提问来源于stack exchange,提问作者code-gorilla
相关产品推荐
相关产品推荐

