• 【Prometheus】Relabeling机制


    Prometheus的Relabeling机制

    在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:

    实例的Metadata信息

    默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:

    • __address__:当前Target实例的访问地址:
    • __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
    • __metrics_path__:采集目标服务访问地址的访问路径
    • __param_:采集任务目标服务的中包含的请求参数

    上面这些标签将会告诉Prometheus如何从该Target实例中获取监控数据。除了这些默认的标签以外,我们还可以为Target添加自定义的标签。

    一般来说,Target以__作为前置的标签是在系统内部使用的,因此这些标签不会被写入到样本数据中。不过这里有一些例外,例如,我们会发现所有通过Prometheus采集的样本数据中都会包含一个名为instance的标签,该标签的内容对应到Target实例的__address__。 这里实际上是发生了一次标签的重写处理。

    这种发生在采集样本数据之前,对Target实例的标签进行重写的机制在Prometheus被称为Relabeling。

    Relabeling作用时机

    Prometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。

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

    relabel流程

    Target([source_label,…]) -> relabel ->  Target ([target_label,…])
    
    • 1

    Relabel的配置

     [ source_labels: '['  [, ...] ']' ]
     [ separator:  | default = ; ]
     [ target_label:  ]
     [ regex:  | default = (.*) ]
     [ modulus:  ]
     [ replacement:  | default = $1 ]
     [ action:  | default = replace ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Relabel的action

    ACTIONRegex匹配操作对象重要参数描述
    keep标签值Target源标签、regex丢弃指定源标签的标签值没有匹配到regex的target
    Drop标签值Target源标签、regex丢弃指定源标签的标签值匹配到regex的target
    labeldrop标签名LabelRegex丢弃匹配到regex 的标签
    labelkeep标签名LabelRegex丢弃没有匹配到regex 的标签
    Replace标签值Label名+值源标签、目标标签、替换(值)、regex(值)更改标签名、更改标签值、合并标签
    hashmod标签名+值源标签、hash长度、target标签将多个源标签的值进行hash,作为target标签的值
    labelmap标签名标签名regex、replacementRegex匹配名->replacement用原标签名的部分来替换名

    replace是缺省action,可以不配置action

    使用labeldrop 和labelkeep Relabel后需要注意保证metrics+labels唯一
    Replacement会用到了正则捕获组,需要自行补充相关知识

    如何查看源标签

    从prometheus-》status-》service Discovery

    如何查看源标签

    过滤target

    • 使用keep,保留标签值匹配regex的targets
    scrape_configs:
     -- job_name: "cephs"
        relabel_configs:
          - action: keep
            source_labels:
              -  __address__
            regex:  ceph01.* 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    过滤target

    • 使用drop,丢弃匹配regex的targets
    scrape_configs:
     -- job_name: "cephs"
        relabel_configs:
          - action: drop
            source_labels:
              -  __address__
            regex:  ceph01.*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用drop,丢弃匹配regex的targets

    删除标签

    将标签名为job的标签删除

    scrape_configs:
     -- job_name: "cephs"
        relabel_configs:
          - regex: job
            action: labeldrop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    labeldrop

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

    修改label名

    使用replace将scheme标签改名为protocol

    scrape_configs:
      -- job_name: "cephs"
        relabel_configs:
          - source_labels:
              - __scheme__
            target_label: procotol
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    修改label名

    这里可以是多个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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    labelmap

    修改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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

        relabel_configs:
          - source_labels:
             - __address__
            regex: (.*)\:10250
            replacement: "${1}:10255"
            target_label: __address__
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    replacement

    多标签合并

    标签合并,可以将多个源标签合并为一个目标标签,可以取源标签的值,也可以进行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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    多标签合并

    • 将多个标签的值进行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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    多标签合并

    完整案例

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

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

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

    完整案例

  • 相关阅读:
    pytest系列之参数化
    e.target 和 this 的区别以及键盘事件的应用
    opencv图像数组坐标系
    华为又“捅破天”发布新品Mate60 Pro直连天通一号卫星通话,北斗卫星通信飞入寻常百姓家
    Android的PendingIntent.getBroadcast()PendingIntent.FLAG_IMMUTABLE问题
    如何使用Google Analytics跟踪WordPress网站的用户参与度
    Chapter7.1:线性离散系统的分析与校正
    麒麟v10系统,在虚拟机上直接连公司同一个局域网,设置静态ip
    [python3] 发送微信 同步手机端
    过滤器(Filter)和拦截器(Interceptor)有什么不同?
  • 原文地址:https://blog.csdn.net/agonie201218/article/details/126263009