升级kube-state-metrics后,如何在Grafana全局替换指标名?
全局兼容kube-state-metrics HPA指标名称的方案
方法1:用Prometheus metric_relabel_configs重命名指标
metric_relabel_configs是专门用于修改指标名称的配置(和仅处理标签的relabel_configs不同),可以直接在kube-state-metrics的抓取任务中配置,实现新旧指标的映射。
将新指标重命名为旧名称(直接兼容原有Grafana图表)
在Prometheus的scrape_configs中找到kube-state-metrics的job,添加以下配置:
scrape_configs: - job_name: 'kube-state-metrics' # 保留原有targets、relabel_configs等配置 metric_relabel_configs: - source_labels: [__name__] regex: 'kube_horizontalpodautoscaler_(.*)' target_label: __name__ replacement: 'kube_hpa_$1'
配置生效后,所有kube_horizontalpodautoscaler_*指标都会被替换为kube_hpa_*,Grafana原有图表无需任何修改就能正常查询数据。
同时保留新旧指标(过渡场景)
如果需要在过渡期间同时支持两种指标名称,可配置如下:
metric_relabel_configs: # 先保留原始的新指标 - action: keep source_labels: [__name__] regex: 'kube_horizontalpodautoscaler_.*' # 复制新指标并命名为旧指标名称 - source_labels: [__name__] regex: 'kube_horizontalpodautoscaler_(.*)' target_label: __name__ replacement: 'kube_hpa_$1' action: replace
这样TSDB中会同时存在kube_horizontalpodautoscaler_*和kube_hpa_*两类指标,方便逐步切换Grafana图表。
方法2:用Prometheus录制规则生成别名指标
如果不想修改抓取配置,可通过录制规则生成旧名称的指标副本:
规则文件示例
创建hpa_alias_rules.yaml文件,内容如下:
groups: - name: hpa_metric_aliases rules: - record: kube_hpa_$1 expr: kube_horizontalpodautoscaler_$1 labels: alias_source: "kube_horizontalpodautoscaler"
然后在Prometheus配置中加载该规则文件:
rule_files: - "hpa_alias_rules.yaml"
Prometheus会定期计算生成kube_hpa_*指标,与原指标数据完全一致,原有Grafana图表可直接使用。
选型建议
- 优先使用
metric_relabel_configs:它在指标抓取后、存储前处理,性能开销更低,数据一致性更好。 - 使用Thanos集群时,需确保所有Prometheus实例配置相同的重命名规则,避免跨实例数据不一致。
- 过渡完成后,建议逐步将Grafana图表切换到新指标名称,再移除兼容配置。
内容的提问来源于stack exchange,提问作者neilH
相关产品推荐
相关产品推荐

