Prometheus之target重新打标

一 对target重新打标

  • 对target从新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,它们将按照定义的顺序依次执行;
  • 对于发现的每个target,Prometheus默认会执行如下操作;
    • job的标签设定为其所属的job_name的值;
    • __address__标签的值为该target的套接字地址:“<host>:<port>”;
    • instance标签的值为__address__的值;
    • __scheme__标签的值为抓取该target上指标时使用的协议(http或https);
    • __metrics_path__标签的值为抓取该target上的指标时使用URL路径,默认为/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匹配到的内容;
        • 进行值替换时,replacement字段中指定标签的值也支持以分组格式进行引用;
      • 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操作后,余下的标签集依然能唯一标识该指标;
[ source_labels: '[' <labelname> [, ...] ']' ]  #引用已有标签,可以引用多个
[ separator: <string> | default = ; ]  #对应于元标签的值连接时,选用的连接符
[ target_label: <labelname> ]  #regex匹配引用标签的值
[ regex: <regex> | default = (.*) ] #选择正则表达式对引用标签进行模式匹配,匹配后的值赋值给target_label
[ modulus: <int> ]
[ replacement: <string> | default = $1 ]
[ action: <relabel_action> | default = replace ] #打标的动作,替换指定目标标签的值

三 对抓取到的metric从新打标

  • 对metric重新打标是在数据抓取之后动态重写metric标签的工具,在每个数据抓取配置中,可以定义多个metric relabel的步骤,他们将按照定义的顺序依次执行;
    • 删除不必要的标签;
    • 从指标中删除敏感或不需要的标签;
    • 添加、编辑或修改指标的标签值或标签格式;
  • 对metric重新打标的配置格式与target重新打标的格式相同,但但前者要定义在专用的metr_relabel_configs字段中;
  • 但是要注意的是,更改或添加标签会创建新的时间序列;
    • 应该明确的使用各个标签,并尽可能保持不变,以避免创建出一个动态的数据环境;
    • 标签是时间序列的唯一性约束,删除标签并导致时间序列重复时,可能会导致系统出现问题;

四 重新打标示例

4.1 replace

4.1.1 查看打标之前状态

4.1.2 修改Prometheus配置文件

  • 下面示例,将三个源标签的值按顺序串联后,由指定的正则表达式进行模式匹配,而后由replacement引用模式匹配结果,并加以改造后,将其赋值给endpoint标签;
  • 对job_name: "prometheus-containers" 生效
- job_name: "prometheus-containers"
    static_configs:
      - targets: ['192.168.174.106:8080']

    relabel_configs:
      - source_labels:
          - __scheme__
          - __address__
          - __metrics_path__
        regex: "(http|https)(.*)"
        separator: ""
        target_label: "endpoint"
        replacement: "${1}://${2}"
        action: replace

4.1.2 验证打标后结果

 

4.2 drop

4.2.1 查看打标之前状态

4.2.2 修改Prometheus配置文件

  • 在source_label字段上,通过指标上元标签“__name__”引用指标名称,而后由regex进行匹配判定,可使用drop action删除匹配的指标,或使用keep action仅保留匹配的指标;
  • 对job_name: "prometheus-containers" 生效
- job_name: "prometheus-containers"
    static_configs:
      - targets: ['192.168.174.106:8080']

    metric_relabel_configs:
    - source_labels:
      - __name__
      regex: "go_info.*"
      action: drop

4.2.3 验证打标后的状态

注意:状态会有延迟,需要稍等几分钟;

prometheus-containers 已经不存在;

 

4.3 labelmap

4.3.1 查看打标之前状态

4.3.2 修改Prometheus配置

  • 该示例,将regex指定的模式对target上的所有标签进行匹配判定,对于匹配到的标签名,它将以该标签名中匹配的部分为前缀,指定的“_name”为后缀生成新的标签名,而新标签的值则与原标签的值相同;
- job_name: "prometheus-node"
    static_configs:
      - targets: ['192.168.174.100:9100']


    relabel_configs:
    - regex: "(job|app)"
      replacement: ${1}_name
      action: labelmap

4.3.3 验证打标后的结果

 

posted @ 2021-11-19 00:10  小吉猫  阅读(1838)  评论(1编辑  收藏  举报