Prometheus 重新打标

target 重新打标

对 target 重新打标是在数据抓取之前动态重写 target 标签的强大工具. 在每个数据抓取配置中, 可以定义多个 relabel 步骤, 他们将按照定义的顺序依次执行.

对于发现的每个 target, Prometheus 默认会执行如下操作.

  • job 的标签设定为所属的 job_name 的值.

  • __address__ 标签的值为该 target 的套接字地址

  • instance 标签的值为 __address 的值.

  • __scheme__ 标签的值为抓取该 target 上标签时使用的协议,

  • __metrics_path__ 标签的值为抓取该 target 上的指标时使用的 URL 默认路径, 默认为/metrics

  • __param_<name> 标签的值为传递的URL参数中第一个名称为 <name> 的参数的值.

重新标记期间, 还可以使用该 target 上以 __meta_ 开头的元标签

  • 各服务发现机制为其target 添加的元标签会有所不同.

重新标记完成后, 该 target 上以 __ 开头的所有标签都会被移除.

  • 所在 relabel 的过程中 需要临时存储标签值, 则要使用 __tmp 标签名为前缀进行保存, 以避免同 Prometheus 的内建标签冲突.

relabel_config

    <relabels_action> 字段用于定义重新标记的行为

  • 替换标签值

    • replace: 首先将 source_labels 中指定的各标签的值进行串连, 而后将 regex 字段中的正则表达式对源标签值进行匹配判定, 若匹配, 则将 source_labels 字段中指定的标签的值替换为 replacement 字段中保存的值.

      • replacement 额按需引用保存 regex 中的某个值, 分组模式 匹配到的值默认保存整个 regex 匹配到的内容.

      • 进行替换时, replacement  字段中指定标签的值也支持分组格式进行引用.

  • 删除值 该出的每个指标名称对应一个 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'
  
    file_sd_configs:
    - files:
      - targets/node-*.yml
      refresh_interval: 1m
      
    relabel_configs:
    - source_labels:                    # 源字段
      - __scheme__
      - __address__
      - __metrics_path__
      regex: '(http|https)(.*)'         # 根据正则匹配
      target_label: endpoint            # 新生成的键
      replacement: "${1}://${2}"        # 匹配后组成的值
      separator: ""                     # 不使用任何符号分隔 默认为;

labelmap

    将 regex 指定的模式对 target 上的所有标签进行匹配判定, 对于匹配到的标签名, 它将以该标签名中匹配的部分为前缀, 指定的 __name 为后缀生成新的标签名, 而新标签的值则与其源标签的值相同.

  - job_name: 'nodes'
    file_sd_configs:
    - files:
      - targets/node-*.yml
      refresh_interval: 1m
    relabel_configs:
    - source_labels:                    # 源字段 
      - __scheme__
      - __address__
      - __metrics_path__
      regex: '(http|https)(.*)'         # 根据正则匹配
      target_label: endpoint            # 新生成的键
      replacement: "${1}://${2}"        # 匹配后组成的值
      separator: ""                     # 不使用任何符号分隔 默认为;
      action: replace
    - regex: "(app)"                    # 匹配的值
      replacement: ${1}_name            # 新的 key name
      action: labelmap

labeldrop

删除 app 标签, 能匹配到则删除

     - regex: "(app)"
       action: labeldrop

drop

删除 以 127 开头的 target.

     - source_labels:
       - __address__
       regex: "127.*"
       action: drop

metric 重新打标

对 metric 重新打标是在数据抓取之后动态重写 metric 标签的工具, 在每个数据抓取配置中, 可以定义多个 metric relabel 的步骤, 他们将按照定义的顺序依次执行.

  • 删除不必要的指标

  • 从指标中删除敏感或者不需要的标签

  • 添加, 编辑或修改指标的标签值或标签格式.

  • 对 metric 重新打标的配置格式与 target 重新打标的格式相同, 但前者要定义在专用的 metric_relabel_configs 字段中.

  • 但是要注意的是, 更改或添加标签会创建新的时间序列.

    • 应该明确的使用各个标签, 并尽可能保持不变, 以避免创建一个动态的数据环境.

    • 标签时时间序列的唯一性约束, 删除标签并导致时间序列重复时, 可能会导致系统出现问题.

drop

在 source_labels 字段上, 通过指标上的元数据 __name__ 引用指标名称, 而后由 regex 进行匹配判定, 可使用 drop action 删除匹配的指标, 或使用 keep action 仅保留匹配的指标.

在相应的job上, 在发现的各 target 之上, 删除以 'go_info' 为名称前缀的指标.

     metric_relabel_configs:
      - source_labels: [ __name__ ]
        regex: 'go_info'
        action: drop

 

 

 

 

posted @ 2021-09-07 14:25  闫世成  阅读(107)  评论(0编辑  收藏  举报