如何在采集时复制kube_namespace_labels指标并修改名称与标签前缀?
生成kube_namespace_labels指标副本的正确姿势
首先说结论:靠scrape_configs直接生成副本办不到,得用Prometheus的记录规则(Recording Rules);如果不在意原指标丢失,也能在scrape阶段修改标签,但这不符合你要保留原指标的需求。
推荐方法:用记录规则生成副本
记录规则是Prometheus基于已有指标生成新指标的功能,刚好适配你这种「复制+修改」的场景。
找个Prometheus的规则配置文件(比如自定义的namespace_rules.yaml),添加以下配置:
groups: - name: namespace_labels_copy rules: - record: kube_namespace_labels_copy expr: kube_namespace_labels relabel_configs: # 给除namespace之外的所有标签添加prefix_前缀 - action: labelmap regex: ^(?!namespace$)(.+) replacement: prefix_$1
配置完成后,把这个规则文件关联到Prometheus主配置文件里,重启Prometheus即可。这样原指标kube_namespace_labels会被保留,同时生成你需要的kube_namespace_labels_copy,所有非namespace的标签都会自动带上prefix_前缀。
为啥scrape_configs不行?
scrape_configs里的metric_relabel_configs只能修改采集到的指标本身,没法复制出一个全新的指标。如果硬用它修改,会直接把原指标替换成新名称和新标签,原指标就消失了,不符合你要保留副本的需求。
举个例子,要是用下面的scrape配置:
scrape_configs: - job_name: 'kubernetes-namespaces' static_configs: - targets: ['kube-state-metrics:8080'] metric_relabel_configs: - action: labelmap regex: ^(?!namespace$)(.+) replacement: prefix_$1 - action: replace source_labels: [__name__] target_label: __name__ replacement: kube_namespace_labels_copy
最终结果就是原来的kube_namespace_labels指标彻底消失,只剩修改后的副本,这显然不是你想要的效果。
所以还是用记录规则最靠谱,既能保住原指标,又能生成符合要求的副本。
内容的提问来源于stack exchange,提问作者sachinks
相关产品推荐
相关产品推荐

