relabel_config

重新标记是一个功能强大的工具,可以在目标的标签集被抓取之前重写它,每个采集配置可以配置多个重写标签设置,并按照配置的顺序来应用于每个目标的标签集。

目标重新标签之后,以__开头的标签将从标签集中删除的。

如果使用只需要临时的存储临时标签值的,可以使用_tmp作为前缀标识。

relabel的action类型

  • replace: 对标签和标签值进行替换。
  • keep: 满足特定条件的实例进行采集,其他的不采集。
  • drop: 满足特定条件的实例不采集,其他的采集。
  • hashmod: 这个我也没看懂啥意思,囧。
  • labelmap: 这个我也没看懂啥意思,囧。
  • labeldrop: 对抓取的实例特定标签进行删除。
  • labelkeep: 对抓取的实例特定标签进行保留,其他标签删除。

常用action的测试

在测试前,同步下配置文件如下。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_export'
    static_configs:
      - targets:
        - deliver-database:9100
        - basic-database:9100
        - ETL:9100
        - APP3:9100
        - APP5:9100
        - APP4:9100
        - QCD1:9100
        - QCD2:9100
        - QCA1:9100

以上的机器,我已经在 hosts 做好解析了。

此时如果查看target信息,如下图。

prometheus relabel 配置(四)_第1张图片

这些都是默认的 label ,因为系统生成的 label 都是以__开头的,目标重新标签之后,以__开头的标签将从标签集中删除的。

replace

比如将所有 labels 中的 instance 的 9100 端口去掉

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_export'
    static_configs:
      - targets:
        - deliver-database:9100
        - basic-database:9100
        - ETL:9100
        - APP3:9100
        - APP5:9100
        - APP4:9100
        - QCD1:9100
        - QCD2:9100
        - QCA1:9100
    relabel_configs:
    - source_labels:
      - "__address__"
      regex: "(.*):9100"
      target_label: "instance"
      action: replace
      replacement: "$1"

重启服务查看 target 信息如下图:

prometheus relabel 配置(四)_第2张图片

说下上面的配置:

  • source_labels 指定我们我们需要处理的源标签, 我们这里处理__address__
  • target_labels 指定了我们要 replace 后的标签名字, 我们这里选择instance
  • action 指定 relabel 动作,这里使用 replace 替换动作。
  • regex 去匹配源标签__address__的值,"(.*):9100"代表匹配这个表情9100前部分
  • replacement 指定的替换后的标签(target_label)对应的数值,采用正则引用方式获取的。

keep

比如只采集所匹配名称为 APP* 的机器。

修改配置文件如下

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_export'
    static_configs:
      - targets:
        - deliver-database:9100
        - basic-database:9100
        - ETL:9100
        - APP3:9100
        - APP5:9100
        - APP4:9100
        - QCD1:9100
        - QCD2:9100
        - QCA1:9100
    relabel_configs:
    - source_labels:
      - "__address__"
      regex: "APP.*"
      action: keep

重启之后查看 target 如下图,可以看到只采集 APP 开头的服务器。

prometheus relabel 配置(四)_第3张图片

drop

在上面的基础上,修改 action 为 drop。

重启之后,target 如下图

prometheus relabel 配置(四)_第4张图片

action 为 drop,其实和 keep 是相似的, 不过是相反的, 只要 source_labels 的值匹配APP.*的实例不会被采集。 其他的实例会被采集。

给 target 手动增加 label

配置文件修改为如下

global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node_export'
    static_configs:
      - targets:
        - deliver-database:9100
        - basic-database:9100
        - ETL:9100
        - APP3:9100
        - APP5:9100
        - APP4:9100
        - QCD1:9100
        - QCD2:9100
        - QCA1:9100
        labels:
          os: "linux"
    relabel_configs:
    - source_labels:
      - "__address__"
      regex: "(.*):9100"
      target_label: "instance"
      action: replace
      replacement: "$1"

prometheus relabel 配置(四)_第5张图片

欢迎大家扫码关注,获取更多信息

prometheus relabel 配置(四)