云原生监控系统Prometheus——Relabelling(重新标记)

Relabelling(重新标记)

  Prometheus 通过重新标记机制进行控制管理采集来的复杂的数据集,尽可能的实现标准化环境中的指标。我们通常用于修改导出指标信息中的标签 label 字段,对指标进行过滤,删除不必要的指标,从而可以在指标中删除敏感或不需要的标签,并且支持添加、编辑或修改指标的标签值或标签格式。

  Target 以双下划线 "__" 作为内置标签的开头。在默认情况下,被加载的 Target 包含以下标签:

    • __address__,当前目标实例的访问地址: <host>:<port>。
    • __metrics_path__,采集目标服务访问地址的访问路径。
    • __scheme__,采集目标服务访问地址的 http 或 https 协议。
    • __param_<name>,是采集任务目标服务中包含的请求参数。

  其中,instance 标签内容与 __adress__ 相对应,这里其实发生了一次标签重写处理。针对这种发生在采集样本数据之前、对 Target 实例的标签进行重写的机制,在 Prometheus 中称为 Relabeling 行为机制,可以通过配置文件中 relabel_configs 字段自定义重写标签。

  relabel_config 是一个很强大的功能,除了修改标签,还可以为采集的指标添加新标签。下面是完整的 relabel_config 配置内容:

# 源标签从现有标签中选择值。 它们的内容使用已配置的分隔符进行连接,并与已配置的正则表达式进行匹配,以进行替换,保留和删除操作。
 [ source_labels: '[' <labelname> [, ...] ']' ]
 
 # 分隔符放置在连接的源标签值之间。
 [ separator: <string> | default = ; ]
 
 # 在替换操作中将结果值写入的标签。
 # 替换操作是强制性的。 正则表达式捕获组可用。
 [ target_label: <labelname> ]
 
 # 与提取的值匹配的正则表达式。
 [ regex: <regex> | default = (.*) ]
 
 # 采用源标签值的散列的模数。
 [ modulus: <uint64> ]
 
 # 如果正则表达式匹配,则执行正则表达式替换的替换值。 正则表达式捕获组可用。
 [ replacement: <string> | default = $1 ]
 
 # 基于正则表达式匹配执行的操作。
 [ action: <relabel_action> | default = replace ]

  可以看到,action 定义了对源数据标签的操作处理方式,默认为 replace 操作。该行会根据 regex 的配置匹配 source_labels 标签的值,并且将匹配到的值写入 target_label,如果有多个匹配组,则可以使用 ${1},${2} 确定写入的内容。如果没有匹配到任何内容,则不对 target_label 进行重新。出去 replace 操作行为之外,action 具有其他操作行为。

scrape_configs:
  - job_name: file
      file_sd_configs:
      - files:
          - '*.json'
 #例如:team="monitoring"-->team_new="monitor"
      relabel_configs:
          -source_labels: [team]
              regex: monitoring
              replacement: monitor
              target_label: team_new
              action: replace
 #action的默认值是replace
        - source_labels: [__meta_consul_address]
              regex: '(.*)'
              replacement: '${1}:9100'
             target_label: __address__
 #参看上面看看这个什么意思
         - source_labels: [__meta_consul_tag]
              regex: '.*,(prod|staging|dev),.*'
              target_label: env
    • keep: 丢弃 source_labels 指定的值中没有匹配到 regex 正则表达式内容的 target。
       scrape_configs:
           - job_name: node
                  consul_sd_configs:
               - server: 'localhost:8500'
                relabel_configs:
                    - source_labels: [__meta_consul_tag]
                    regex: '.*,prod,.*'
                    action: keep
    • drop: 丢失 source_labels 指定的值中匹配到 regex 正则表达式内容的 target。
       scrape_configs: 
           - job_name: node 
           consul_sd_configs: 
           - server: 'localhost:8500' 
           relabel_configs: 
               - source_labels: [__meta_consul_tag] 
               regex: '.*,prod,.*' 
               action: drop
    • labelmap: 针对所有标签名来匹配 regex,然后将匹配的标签的值复制到 replacement 所指定的新标签中。
       scrape_configs:
        - job_name: ec2
        ec2_sd_configs:
        - region: <region>
        access_key: <access key>
        secret_key: <secret key>
       #将所有以monitor_开头的标签名替换为去掉monitor_前缀的新标签名字(例如:monitor_foo="bar"-->foo="bar")
        relabel_configs:
        - regex: monitor_(.*)
        replacement: '${1}'
        action: labelmap
    • labelkeep: 针对所有标签名来匹配 regex,任何不匹配的标签将从标签集中删除。  
    • labeldrop: 针对所有标签来匹配 regex,任何匹配的标签将从标签集中删除。

  我们通过一个简单的示例,对默认 prometheus.yml 配置文件进行修订,来展示在多应用场景环境下,使用 replace 操作 Target 的元数据(Metadata)标签重写入新的标签键值对,添加与环境相关的特征纬度,以便更好地对数据进行聚合。默认配置文件情况下的节点标签信息在 Prometheus Web UI 中显示如下:

  现在对 prometheus.yml 进行修改,添加 Prometheus 的 Relabeling机制,可以使用 "target_label: MobileGames" 来标记场景为手游业务,即 MobileGames。具体配置内容如下:

scrape_configs:
  - job_name: 'node'
      static_configs:
        - targets: {'192.168.2.121:9100','192.168.2.122:9100'}
          relabel_configs:
            - action: replace
              source_labels: ['__address__']
              regex: (.*)
              replacement: $1
              target_label: MobileGame

  重启 Prometheus 或热加载配置后,通过浏览器查看 Prometheus Web UI 中的信息,可以看到新标签 MobileGames 已经被添加。

  Prometheus 中可以在两个阶段进行重新标记工作:

第一阶段,重新标记来自服务发现的目标,将来自服务发现的元数据标签的信息应用到对应指标的标签上,这是在作业内的 relabel_configs 模块中完成的;

第二阶段,Prometheus 在 scape 之后,且在监控指标保存到存储系统之前。

  我们能确定保存或删除了哪些指标,以及这些指标的表现形式,这是在配置文件 metric_relabel_configs 模块内完成的。关于更详尽的配置说明,可以访问官方地址:https://prometheus.io/docs/prometheus/latest/configuration/configuration/ 进行查询。

posted @ 2022-07-26 18:40  左扬  阅读(506)  评论(0编辑  收藏  举报
levels of contents