Prometheus的标签转换配置示例
由于对Prometheus的relabel配置的行为无法在文档中清楚理解,并且可能会很快忘记,所以我亲自试验了一下,简单地做了一些笔记。
1. 爬取结果中包含的标签似乎不会被操控。
例如,node_exporter公开的指标中有一个名为node_cpu的指标,该指标具有一个名为cpu的标签。但是,通过relabel配置对该标签进行修改是不可能的。
2. 行动=替换
将根据source_labels指定的标签的值进行join操作,使用separator作为分隔符。然后,对结果应用regex的正则表达式进行匹配,并用replacement进行替换,最后将其设置为target_label的值。
设定示例
relabel_configs:
- source_labels: [__address__, __metrics_path__]
separator: ;
target_label: relabel
regex: ([^:]+):(\d+);\/(.*)
replacement: ${1}_${2}_${3}
如果__address__为localhost:9100,__metrics__path__为/metrics,那么relabel的值将设置为localhost_9100_metrics。
此外,也可以通过在target_label中使用regex的后向引用值将其设置为标签名称。
target_label: relabel_${2}
与其进行设置,标签名称将变为relabel_9100。
3. 执行=保持
只保留与通过正则表达式匹配源标签指定的标签值后的结果连接的结果相匹配的情况,并排除不匹配的情况。
设定示例
relabel_configs:
- source_labels: [__address__, __metrics_path__]
separator: ;
regex: localhost:\d+;\/.*
action: keep
如果在此情况下,__address__被设置为localhost和其他值之一,则会排除除localhost以外的值。
4 动作=放下
将与正则表达式匹配的项目排除,保留不匹配的项目,与action=keep的情况相反。当将action更改为drop时,在示例3中,只有__address__为localhost的项目会被排除。
5个行动 = 哈希模式
通过将source_labels使用separator进行连接,然后对连接后的字符串取哈希值并用modulus指定的值取模,最后将结果设置为target_label。
6个动作=标签映射
使用replacement替换与正则表达式匹配的标签名。
设定示例
relabel_configs:
- regex: __(address|metrics_path)__
replacement: ${1}_relabel
action: labelmap
在上述示例中,将添加标签address_relabel和metrics_path_relabel。它们的值分别是__address__和__metrics_path__。
7. 行动=标签丢弃
删除与正则表达式匹配的标签。
设定示例
relabel_configs:
- regex: job
action: labeldrop
在上述的例子中,删除工作标签。
8. 行动=保持标签
透過使用正則表達式匹配的方式,與labeldrop相反,只保留匹配到的標籤。以示例7為例,當使用action: labelkeep,則只會刪除除了job標籤以外的其他標籤。(然而,實際執行此操作會刪除包括__scheme__和__metrics_path__在內的標籤,導致無法顯示metrics。)