• Prometheus 重新打标


    概述

    Metadata标签

    在被监控端纳入普罗米修斯里面定义了一些元数据标签
    在Prometheus所有的Target实例中,都包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:

    •  __address__:当前Target实例的访问地址<host>:<port>
    • __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
    • __metrics_path__:采集目标服务访问地址的访问路径

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

    指标抓取的生命周期

    官网地址: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

    • 在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);
    • 这些作业首先会根据Job上指定的发现配置生成target列表,此即服务发现过程;
      • 服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以“__meta_”为前缀;
      • 服务发现还会根据目标配置来设置其它标签,这些标签带有“__”前缀和后缀,包括“__scheme__”、“__address__”和“__metrics_path__”,分别保存有target支持使用协议(http或https,默认为http)、target的地址及指标的URI路径(默认为/metrics);
      •  若URI路径中存在任何参数,则它们的前缀会设置为“__param_”
      • 这些目标列表和标签会返回给Prometheus,其中的一些标签也可以配置中被覆盖;
    配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标签的默认值就来自于__address__标签的值;

    重新标记目的

    为了更好的标识监控指标。

    在两个阶段可以重新标记:

    • relabel_configs : 在采集之前(比如在采集之前重新定义元标签)
    • metric_relabel_configs:在存储之前准备抓取指标数据时,可以使用relabel_configs添加一些标签、也可以只采集特定目标或过滤目标。 已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。


    重新标记标签一般用途

    • 动态生成新标签 根据已有的标签生成新标签
    • 过滤采集的Target
    • 删除不需要或者敏感标签
    • 添加新标签


    对于发现的各目标,Prometheus提供了可以重新标记(relabel) 目标的机会
    它定义在job配置段的relabel_config配置中,常用于实现如下功能
    • 将来自服务发现的元数据标签中的信息附加到指标的标签上;
    • 过滤目标;
    这之后,便是数据抓取、以及指标返回的过程;
    抓取而来的指标在保存之前,还允许用户对指标重新打标并过滤的方式;
    • 它定义在job配置段的metric_relabel_configs配置中,常用于实现如下功能
      • 删除不必要的指标;
      • 从指标中删除敏感或不需要的标签;
      • 添加、编辑或修改指标的标签值或标签格式;

    对target重新打标

     对target重新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,它们将按照定义的顺序依次执行;
    对于发现的每个target,Prometheus默认会执行如下操作
    • job的标签设定为其所属的job_name的值;
    • __address__标签的值为该target的套接字地址“<host>:<port>”
    • instance标签的值为__address__的值;
    • __scheme__标签的值为抓取该target上指标时使用的协议(http或https);
    • __metrics_path__标签的值为抓取该target上的指标时使用URI路径,默认为/metrics;
    • __param_<name>标签的值为传递的URL参数中第一个名称为<name>的参数的值;
    重新标记期间,还可以使用该target上以“__meta_”开头的元标签;
    • 各服务发现机制为其target添加的元标签会有所不同;
    重新标记完成后,该target上以“__”开头的所有标签都会被移除;
    • 若在relabel的过程中需要临时存储标签值,则要使用__tmp标签名称为前缀进行保存,以避免同Prometheus的内建标签冲突;

    relabel_configs

     
    <relabel_action>字段用于定义重新标记的行为,其可用取值如下
    • 替换标签值
      • replace:首先将source_labels中指定的各标签的值进行串连,而后将regex字段中的正则表达式对源标签值进行匹配判定,若匹配,则将target_label字段中指定的标签的值替换为replacement字段中保存的值;
        • replacement可按需引用保存regex中的某个“分组模式”匹配到的值;默认保存整个regex匹配到的内容;
        • 进行值替换时 ,replacememnt字段中指定标签的值也支持以分组格式进行引用;
      • hashmod:将target_label的值设置为一个hash值,该hash则由modules字段指定的hash模对块对source_labels上各标签的串连值进行hash计算生成;
    • 删除指标:该处的每个指标名称对应一个target
      • keep:regex不能匹配到target上的source_labels上的各标签的串连值时,则删除该target;
      • drop:regex能够匹配到target上的source_labels上的各标签的串连值时,则删除该target;
    • 创建或删除标签
      • labelmap:将regex对所有的标签名进行匹配判定,而后将匹配到的标签的值赋给replacement字段指定的标签名之上;通常用于取出匹配的标签名的一部分生成新标签;
      • labeldrop:将regex对所有的标签名进行匹配判定,能够匹配到的标签将从该target的标签集中删除;
      • labelkeep:将regex对所有的标签名进行匹配判定,不能匹配到的标签将从该target的标签集中删除;
    注意:要确保在labeldrop或labelkeep操作后,余下的标签集依然能惟一标识该指标 
     

    示例

    标签replace替换

       将三个原标签的值按格式进行串联, 有正则表达式进行模式匹配, 而后由 replacement 引用模式匹配结果, 赋值给endpoint标签.

      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
    
        relabel_configs:
        - source_labels:
          - __scheme__
          - __address__
          - __metrics_path__
          regex: "(http|https)(.*)"
          separator: ""
          target_label: "endpoint"
          replacement: "${1}://${2}"
          action: replace

    标签计算哈希值hashmod

      意义:   Prometheus server 数据(比如一个机房的所有机器信息)特别大,超过了单机承载能力。

          此时我们可以采用 hashmod 配置,使用同样的配置列表,将抓取目标散列到不同的 Prometheus server 中去, 从而很好实现 Prometheus 数据收集的横向扩展。

      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
    
        relabel_configs:
        - source_labels:
          - __scheme__
          - __address__
          - __metrics_path__
          target_label: "hash"
          modulus: 2
          action: hashmod
                           

     标签映射 labelmap

        将regex指定的模式对target上的所有标签进行匹配判定,对于匹配到的标签名,它将以该标签名中匹配的部分为前缀,指定的“_name”为后缀生成新的标签名,而新标签的值则与其原标签的值相同;
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
    
        relabel_configs:
        - regex: "(job|app)"
          replacement: ${1}_name
          action: labelmap

     标签删除 labeldrop

      将regex指定的模式对target上的所有标签进行匹配判定,对于匹配到的标签名,将删除此标签.

      # all node
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
    
        relabel_configs:
        - regex: "(job|app)"
          action: labeldrop

    标签保留 labelkeep

       匹配到则保留

    目前测试此选项会删除 instance.

      # all node
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
        relabel_configs:
        - regex: "(instance|job|app)"
          action: labelkeep

    删除指标 drop

        将regex指定的模式对target上的所有标签进行匹配判定,对于匹配到的标签名,将删除此标签.

      # all node
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
    
        relabel_configs:
        - source_labels:
          - __name__
          regex: "go_info"
          action: drop

    配置前查看指标

    配置后查看指标

    target保留 keep

        将regex指定的模式对target上的指定的标签进行匹配判定,对于匹配到的标签名,则保留此target, 反之则删除.

    # all node
    - job_name: 'nodes'
    static_configs:
    - targets:
    - 192.168.168.105:9100
    - 192.168.168.107:9100
    - 192.168.168.108:9100
    relabel_configs:
    - source_labels:
    - __address__
    regex: "192.168.168.105.*"
    action: keep

     指标保留

      和标签唯一区别的就是标签使用  relabel_configs: 指令, 而 指标使用  metric_relabel_configs: 指令.

       下面配置是只保留匹配到的指标, 其余则删除

      # all node
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
        metric_relabel_configs:
        - source_labels:
          - __name__
          regex: "node_cpu_seconds_total"
          action: keep

     

    自定义标签

      Prometheus 支持自定义标签,有了这些标签可以针对特定的标签去查询,比如根据机房,或者项目查询某些机器, 

      如果是基于服务树环境生成 配置信息, 可以根据各个 业务线纬度, 运行 app 纬度 进行自定义标签, 有了这些自定义标签后期查询起来也会越来越精确.

      # all node
      - job_name: 'nodes'
        static_configs:
        - targets:
          - 192.168.168.105:9100
          - 192.168.168.107:9100
          - 192.168.168.108:9100
          labels:
            app: nginx
            idc: jiuxianqiao
            lob: devops

     
     
     
     
     

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    (转)ReentrantLock与Synchronized同步区别
    (转)Java NIO框架
    (转)Apache Mina网络框架
    (转)java中Executor、ExecutorService、ThreadPoolExecutor介绍
    路由选择协议
    SYN攻击
    网络基础
    [翻译]在Django项目中添加谷歌统计(Google Analytics)
    初识Python-web框架的这两天
    June本地环境搭建
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15510556.html
Copyright © 2020-2023  润新知