You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus Adapter自定义指标无值致Kubernetes HPA扩缩容异常

解决Prometheus Adapter生成自定义指标无数值的问题

我来帮你梳理下问题的核心原因,以及对应的解决步骤:

核心问题分析

你遇到的新指标有名称但无数值的情况,大概率是指标聚合时丢失了Kubernetes资源关联标签,或者标签匹配条件不符合原指标的实际情况。具体来说:

1. 聚合查询丢失资源标签

你的metricsQuery直接用sum()做了全局聚合,没有保留namespace和pod标签:

metricsQuery: 'sum(event_subscription_current_message_lag{queue="webhooks", container_name!="POD"})'

这种聚合会把所有符合条件的时间序列合并成一个单一数值,丢失了和Kubernetes Pod/Namespace关联的关键标签。而Prometheus Adapter需要这些标签来把自定义指标映射到对应的K8s资源上,最终导致HPA查询时找不到匹配的资源条目。

2. 标签匹配条件验证

你需要先确认原指标event_subscription_current_message_lag是否真的带有queue="webhooks"、container_name!="POD"这些标签:

  • 登录Prometheus UI,执行查询event_subscription_current_message_lag,查看所有时间序列的标签集合,确认是否存在queue标签,且值包含webhooks/webhook_retries。
  • 如果原指标没有queue标签,那你的sum查询自然会返回空结果。

解决方案

步骤1:修改Adapter规则,保留资源标签

更新你的Prometheus Adapter Helm配置,在metricsQuery中添加by (namespace, pod)来保留资源关联标签:

logLevel: 1
metricsRelistInterval: 5s
prometheus:
  url: 'http://<prometheus-url>'
rules:
  custom:
  - seriesQuery: '{__name__="event_subscription_current_message_lag"}'
    name:
      matches: "(.*)"
      as: '${1}_webhooks'
    resources:
      overrides:
        namespace: {resource: "namespace"}
        pod: {resource: "pod"}
    metricsQuery: 'sum(event_subscription_current_message_lag{queue="webhooks", container_name!="POD"}) by (namespace, pod)'
  - seriesQuery: '{__name__="event_subscription_current_message_lag"}'
    name:
      matches: "(.*)"
      as: '${1}_webhook_retries'
    resources:
      overrides:
        namespace: {resource: "namespace"}
        pod: {resource: "pod"}
    metricsQuery: 'sum(event_subscription_current_message_lag{queue="webhook_retries", container_name!="POD"}) by (namespace, pod)'

步骤2:验证修改后的查询

  • 先在Prometheus UI中执行修改后的metricsQuery,确认能得到带有namespace和pod标签的结果,且数值正确。
  • 重新部署Prometheus Adapter:
    helm upgrade prometheus-adapter <你的Helm chart> -f <修改后的配置文件> -n <你的命名空间>
    

步骤3:验证自定义指标

执行以下命令查询新指标,确认是否有返回数值:

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/<你的Deployment命名空间>/pods/*/event_subscription_current_message_lag_webhooks

如果返回结果中items字段包含数值,说明配置生效。

步骤4:检查HPA状态

最后查看HPA的运行状态,确认它能正确获取指标:

kubectl describe hpa <你的HPA名称>

在Events部分如果没有报错信息,且Target指标显示正常,就说明自动扩缩容可以正常工作了。

额外注意事项

确保你的指标推送服务在推送event_subscription_current_message_lag时,已经正确附加了namespace、pod和queue标签。如果这些标签缺失,即使修改了Adapter规则,也无法完成资源关联。

内容的提问来源于stack exchange,提问作者brad142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:35:12