• Post author:
  • Post category:prometheus
  • Post comments:0评论
2

官方文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

一、介绍

  relabel_configs 可以在目标被抓取之前动态地重写目标的标签集来实现自定义标签及分类。
  Prometheus 加载 Targets 后,这些 Targets 会自动包含一些默认的标签,Target 以 __ 作为前置的标签是在系统内部使用的,这些标签不会被写入到样本数据中。
  默认每次增加 Target 时会自动增加一个 instance 标签,而 instance 标签的内容刚好对应 Target 实例的 __address__ 值,这是因为实际上 Prometheus 内部做了一次标签重写处理,默认 __address__ 标签设置为 : 地址,经过标签重写后,默认会自动将该值设置为 instance 标签,所以我们能够在页面看到该标签。

二、格式用法

几个前缀代表的意思:

• __meta_:在重新标记阶段可以使用以 _meta_ 为前缀的附加标签。它们由提供目标的服务发现机制设置的,并因机制而异。
• __:目标重新标记完成后,以 __ 开头的标签将从标签集中删除。
• __tmp:如果重新标记步骤仅需要临时存储标签值(作为后续重新标记步骤的输入),请使用这个标签名称前缀。这个前缀保证永远不会被 Prometheus 本身使用。

格式:

# 源标签从现有标签中选择值。
# 它们的内容使用配置的分隔符连接起来,并与replace、keep 和 drop 操作配置的正则表达式匹配。
[ source_labels: '[' <labelname> [, ...] ']' ]

# 在串联的源标签值之间放置分隔符。
[ separator: <string> | default = ; ]

# 在替换操作中写入结果值的标签
# 替换操作是强制性的。正则表达式捕获组可用。
[ target_label: <labelname> ]

# 与提取值匹配的正则表达式
[ regex: <regex> | default = (.*) ]

# 取源标签值散列的模数
[ modulus: <int> ]

# 如果正则表达式匹配,则对其执行正则表达式替换的替换值。正则表达式捕获组可用。
[ replacement: <string> | default = $1 ]

# 基于正则表达式匹配执行的操作
[ action: <relabel_action> | default = replace ]

是任何有效的 RE2 正则表达式,这是 replace、keep、drop、labelmap、labeldrop 和 labelkeep 动作必需的。
表示要采取的重新标记操作:

• replace:根据 regex 的配置匹配 source_labels 标签的值(注意:多个 source_label 的值会按照 separator 进行拼接),并且将匹配到的值写入到 target_label 当中。
           如果有多个匹配组,则可以使用 ${1}, ${2} 确定写入的内容。如果没匹配到任何内容则不对 target_label 进行替换, 默认为 replace。
• keep:丢弃 source_labels 的值中没有匹配到 regex 正则表达式内容的 Target 实例
• drop:丢弃 source_labels 的值中匹配到 regex 正则表达式内容的 Target 实例
• hashmod:将 target_label 设置为关联的 source_label 的哈希模块
• labelmap:根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值。
• labeldrop:对 Target 标签进行过滤,会移除匹配过滤条件的所有标签
• labelkeep:对 Target 标签进行过滤,会移除不匹配过滤条件的所有标签

三、示例

1、简单示例

[root@cp-3 prometheus]# cat prometheus.yml
......
  - job_name: 'node'
    file_sd_configs:
      - files:
        - targets/*.json
        refresh_interval: 10s
......

[root@cp-3 prometheus]# cat targets/node.json 
[{
  "targets": [
    "10.88.88.11:9100",
    "10.88.88.12:9100"  
  ],
  "labels": {
     "role": "test"
  }
}]

[root@cp-3 prometheus]# cat targets/local.json 
[{
  "targets": [
    "localhost:9100"
  ],
  "labels": {
     "role": "local"
  }
}]

web界面:

  现要过滤标签 role 为 "local" 的目标,将 role="test" 变成 role1="test1",因为 role 标签是写死在文件中的,所以还会存在。

[root@cp-3 prometheus]# cat prometheus.yml
......
  - job_name: 'node'
    file_sd_configs:
      - files:
        - targets/*.json
        refresh_interval: 10s
    relabel_configs:
      - source_labels: ['role']
        regex: '.*local.*'
        action: drop

      - source_labels: ['role']
        regex: .*
        target_label: role1
        replacement: test1
        action : replace
......

web界面:


参考:

https://prometheus.io/docs
https://blog.csdn.net/aixiaoyang168/article/details/103022342
https://www.cnblogs.com/chenmingming0225/p/13080851.html

2

发表回复

验证码: 42 − = 39