如何通过正则从Prometheus指标名提取应用ID并添加为标签
解决方案:从Prometheus指标名提取App ID并添加为标签
没问题!你完全可以通过Prometheus的metric_relabel_configs实现这个需求——因为我们要直接修改指标名称和添加指标级标签,这正是metric_relabel_configs的设计场景(而relabel_configs主要处理抓取阶段的Target标签,不适合这里)。
下面是针对你的指标格式metrics-app-123456-spark-whatever-1的具体配置:
metric_relabel_configs: # 1. 从指标名提取App ID,添加为app标签 - source_labels: [__name__] # 正则匹配指标名,捕获app ID部分(123456) regex: ^metrics-app-(.*)-spark-.*$ target_label: app # 用捕获到的App ID作为标签值 replacement: $1 action: replace # 2. 重命名指标名,移除app相关前缀 - source_labels: [__name__] # 正则匹配指标名,捕获后半部分(whatever-1) regex: ^metrics-app-.*-spark-(.*)$ # 替换指标名本身(__name__是Prometheus内置的指标名标签) target_label: __name__ # 拼接新的指标名 replacement: metrics-spark-$1 action: replace
配置解释:
source_labels: [__name__]:指定我们要处理的数据源是指标名称(__name__是Prometheus自动为所有指标添加的内置标签,对应指标本身的名字)。regex:通过正则表达式精准匹配指标名格式,用括号()标记需要捕获的内容:- 第一个配置里的
(.*)捕获App ID(比如123456); - 第二个配置里的
(.*)捕获指标名的后半段(比如whatever-1)。
- 第一个配置里的
target_label:定义要修改的目标标签——第一个配置是新建app标签,第二个配置是修改指标名对应的__name__标签。replacement: $1:用正则捕获到的第一个分组内容($1)替换目标标签的值,实现提取和重命名。action: replace:执行替换/添加标签的动作,这是最常用的relabel动作之一。
配置生效后,你的指标就会从metrics-app-123456-spark-whatever-1变成metrics-spark-whatever-1{app="123456"},完全符合你的需求。
内容的提问来源于stack exchange,提问作者djuarezg
相关产品推荐
相关产品推荐

