Prometheus-Relabel

  • Relabel用来重写target的标签
  • 每个Target可以配置多个Relabel动作,按照配置文件顺序应用
  • Target包含一些内置的标签(以'__'开头),都可以用于relabel,在relabel时未保留,内置标签将被删除
relabel流程

Target([source_label,…]) -> relabel -> Target ([target_label,…])
Relabel的配置
 [ source_labels: '[' <labelname> [, ...] ']' ]
 [ separator: <string> | default = ; ]
 [ target_label: <labelname> ]
 [ regex: <regex> | default = (.*) ]
 [ modulus: <uint64> ]
 [ replacement: <string> | default = $1 ]
 [ action: <relabel_action> | default = replace ]
Relabel的action
ACTIONRegex匹配操作对象重要参数描述
keep 标签值 Target 源标签、regex 丢弃指定源标签的标签值没有匹配到regex的target
Drop 标签值 Target 源标签、regex 丢弃指定源标签的标签值匹配到regex的target
labeldrop 标签名 Label Regex 丢弃匹配到regex 的标签
labelkeep 标签名 Label Regex 丢弃没有匹配到regex 的标签
Replace 标签值 Label名+值 源标签、目标标签、替换(值)、regex(值) 更改标签名、更改标签值、合并标签
hashmod 标签名+值 源标签、hash长度、target标签 将多个源标签的值进行hash,作为target标签的值
labelmap 标签名 标签名 regex、replacement Regex匹配名->replacement用原标签名的部分来替换名

replace是缺省action,可以不配置action
使用labeldrop 和labelkeep Relabel后需要注意保证metrics+labels唯一
Replacement会用到了正则捕获组,需要自行补充相关知识

如何查看源标签

从prometheus-》status-》service Discovery


image.png
过滤target
  • 使用keep,保留标签值匹配regex的targets
scrape_configs:
 - …
 - job_name: "cephs"
    relabel_configs:
      - action: keep
        source_labels:
          -  __address__
        regex:  ceph01.* 

relabel结果可以在Prometheus网页的status/ Service Discovery中查看


image.png
  • 使用drop,丢弃匹配regex的targets
scrape_configs:
 - …
 - job_name: "cephs"
    relabel_configs:
      - action: drop
        source_labels:
          -  __address__
        regex:  ceph01.*
image.png
删除标签

将标签名为job的标签删除

scrape_configs:
 - …
  - job_name: "cephs"
    relabel_configs:
      - regex: job
        action: labeldrop
image.png

labelKeep和labeldrop不操作’__’开头的标签,要操作需要先改名

修改label名

使用replace将scheme标签改名为protocol

scrape_configs:
  - …
  - job_name: "cephs"
    relabel_configs:
      - source_labels:
          - __scheme__
        target_label: procotol
image.png

这里可以是多个source_labels,只有值匹配到regex,才会进行替换

  • 使用labelmap,将原始标签的一部分转换为target标签,这一功能replace无法实现
scrape_configs:
  - …
  - job_name: "sd_file_mysql"
    file_sd_configs:
      - files:
        - mysql.yml
        refresh_interval: 1m
    relabel_configs:
      - action: labelmap
        regex: (.*)(address)(.*) 
        replacement: ${2}
image.png
修改label值

配置k8s服务发现

scrape_configs:
  - …
  - job_name: "sd_k8s_nodes"
    kubernetes_sd_configs:
      - role: node
        bearer_token_file: bearer_token
        tls_config:
          ca_file: ca.crt
        namespaces:
          names:
            - default
        api_server: https://master01:6443

服务发现完成后,默认node的port是10250,会无法取得数据,同通过relabel修改标签.

    relabel_configs:
      - source_labels:
         - __address__
        regex: (.*):10250
        replacement: "${1}:10255"
        target_label: __address__
image.png
多标签合并

标签合并,可以将多个源标签合并为一个目标标签,可以取源标签的值,也可以进行hash,用户target分组

  • 在文件服务发现中,将标签filename="mysql.yml" 和sd_type="file"合并为sd=”file;mysql.yml”,标签值使用分号连接
scrape_configs:
- …
  - job_name: "sd_file_mysql"
    file_sd_configs:
      - files:
        - mysql.yml
        refresh_interval: 1m
    relabel_configs:
      - source_labels:
          - sd_type
          - filename
        separator: ;
        target_label: sd
image.png
  • 将多个标签的值进行hash,形成一个target标签,只要target标签一致,则表示源标签一致,可以用来实现prometheus的负载均衡
scrape_configs:
  - …
  - job_name: "sd_file_mysql"
    file_sd_configs:
      - files:
        - mysql.yml
        refresh_interval: 1m
    relabel_configs:
      - action: hashmod
        source_labels:
          - __scheme__
          - __metrics_path__
        modulus: 64
        target_label: hash_id
image.png
完整案例

以下是一个完整的relabel案例,这个案例包括

  • 根据标签值过滤target
  • 合并标签值,并进行正则匹配
  • 修改标签名
  • 直接添加标签名

这个案例说明源标签是可以重复使用的




链接:https://www.jianshu.com/p/c21d399c140a

原文地址:https://www.cnblogs.com/weifeng1463/p/12846459.html