HPA无法从Kafka exporter获取自定义指标kafka_consumergroup_lag
问题根因
核心配置错误:HPA指标类型选型错误。
你使用了type: Pods类型的自定义指标,该类型要求指标必须直接关联HPA所在命名空间下、被伸缩工作负载管理的业务Pod。但kafka_consumergroup_lag是Kafka Exporter暴露的全局消费组滞后指标,当前该指标仅关联monitoring命名空间下的Kafka Exporter自身Pod,和helloworld命名空间下待伸缩的业务Pod无任何关联关系,HPA在helloworld命名空间遍历自己管理的业务Pod查找对应指标时自然返回空值。
你自己执行的两次自定义指标查询结果可以直接佐证该问题:
- 第一次全局查询返回的指标关联对象是
monitoring命名空间本身 - 第二次指定Pod维度查询返回的指标关联对象是
monitoring命名空间下的prometheus-kafka-exporterPod,无任何helloworld命名空间下业务Pod关联的指标数据
额外配置疏漏:安装prometheus-adapter时未配置自定义指标关联规则,默认规则不会自动将Exporter暴露的全局指标关联到业务工作负载。
修复方案
优先选择方案1,为Kafka消费滞后场景的标准实现方式,无需修改Adapter配置。
方案1:将HPA指标类型改为External(推荐)
直接修改helloworld的HPA资源定义,将Pods类型指标替换为External类型,匹配Prometheus中存储的kafka消费组对应标签即可,示例配置如下:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: helloworld namespace: helloworld spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: helloworld minReplicas: 1 maxReplicas: 4 metrics: - type: External external: metric: name: kafka_consumergroup_lag selector: matchLabels: # 替换为实际业务使用的消费组、Topic标签值,与Prometheus中存储的指标标签完全一致 consumergroup: "helloworld-service-consumer-group" topic: "your-business-topic" target: type: Value value: "1000"
应用配置后等待1-2分钟,查看HPA事件即可看到正常拉取指标、计算副本数的日志。
方案2:修改prometheus-adapter规则适配Pods类型(不推荐)
如果必须使用Pods类型指标,需要修改prometheus-adapter挂载的ConfigMap,添加自定义指标重写规则,通过标签关联将kafka_consumergroup_lag指标绑定到helloworld命名空间的业务Pod上,该方案需要维护标签匹配规则,后续消费组、服务变更时需要同步修改Adapter配置,维护成本极高,无特殊需求不建议使用。
内容的提问来源于stack exchange,提问作者エック
相关产品推荐
相关产品推荐

