• Prometheus对标签的处理


    prometheus在处理数据指标的过程中,包括【抓取的生命周期】和【标签的生命周期】

    默认情况下,当prometheus加载target实例完成后,这些target时候会包含一些默认的标签,这些标签将会告诉prometheus如何从target实例中获取监控数据

           发生在采集样本数据之前,对Target实例的标签进行重写的机制在Prometheus被称为RelabelingPrometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程

          Prometheus 从数据源拉取数据后,会对原始数据进行编辑;其中 metric_relabel_configs是 Prometheus 在保存数据前的最后一步标签重新编辑(relabel_configs)。哪怕你将 metric_relabel_configs模块放在 job_name模块的最前端,Prometheus 解析编辑文件后,也会将 metric_relabel_configs放在最后。metric_relabel_configs 模块和 relabel_config 模块很相似。metric_relabel_configs一个很常用的用途:将监控不需要的数据,直接丢掉,不在Prometheus 中保存。

    系统默认使用的标签

    1. __address__:当前Target实例的访问地址[host]:[port]
    2. __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
    3. __metrics_path__:采集目标服务访问地址的访问路径
    4. __param_:采集任务目标服务的中包含的请求参数
    5. __name__: 此标签是标识指标名称的预留标签。
    6. job:target的job标签设置为配置文件里的job_name的值

    prometheus 允许在采集之前对任何目标及其标签进行修改操作

    • 重命名标签名
    • 删除标签
    • 过滤标签

    action  标签的动作

    1. replace:  默认,通过regex匹配source_label标签的,使用replacement来引用表达式匹配的分组
    2. keep: 删除regex与连接不匹配的目标source_labels  (保留source_labels标签中的值与regex定义表达匹配的target)
    3. drop:删除regex与连接匹配的目标source_labels    (删除source_labels标签中的值与regex定义表达匹配的target)
    4. labeldrop: 删除regex匹配的标签名称
    5. labelkeep:删除regex不匹配的标签名称
    6. labelmap: 匹配regex所有标签名称。然后复制匹配标签的值进行分组,replacement分组引用(${1}, ${2},……)替换
    7. hashmod:设置target_label为modules连接的哈希值source_labels
    relable_configs:
      # 源标签
      [ source_labels: '[' <labelname> [, ...] ']' ]
      
      # 多个源标签时连接的分隔符
      [ separator: <string> | default = ; ]
      
      # 定义重新标记的标签
      [ target_label: <labelname> ]
      
      # 正则表达式匹配源标签的
      [ regex: <regex> | default = (.*) ]
      
      # 用的少,占时略
      [ modulus: <uint64> ]
      
      # 替换正则表达式匹配的分组,分组引用 $1,$2,$3,....
      [ replacement: <string> | default = $1 ]
      
      # 基于正则表达式匹配执行的操作
      [ action: <relabel_action> | default = replace ]

     一、 replace  不指定action的动作就是 replace

    以下三种写法都是一种意思   把addr = IP(IP为__address__值中的ip地址)
    relabel_configs:
    - source_labels: [ '__address__' ] target_label: 'addr' replacement: 'localhost' relabel_configs: - source_labels: [ '__address__' ] target_label: 'addr' #regex: "(.*):.*" #如果只是取$1,那么这句话跟下面的意思一样 regex: "(.*):(.*)" replacement: $1 relabel_configs: - action: replace source_labels: [ '__address__' ] regex: "(.*):(.*)" replacement: $1 target_label: 'addr'

    二、keep

    只采集 172.19.1.21这台主机的指标
    relabel_configs:
    - separator: ; source_labels: [ '__address__'] regex: '172.19.1.21:.*' action: keep
    不采集172.19.1.21这台主机的指标
     relabel_configs:
        - action: drop
          source_labels: ['__address__']
    regex: '172.19.1.21:.*'
     

    三、labelmap 标签名替换

    - job_name: 'node_exporter'
        static_configs:
        - targets: ['172.19.1.21:9100','172.19.1.22:9100','172.19.1.23:9100']
          labels:
            env: 'test'
            zone: 'shanghai'
            label_name: 'Test_label'
            label_value: 'za'
            __host__: 'master_abc'
        relabel_configs:
        - source_labels: [ '__host___']
          regex: 'label_(.+)'
          replacement: $1
          action: labelmap

    效果如下

    四、根据hashmod来选择采集哪些target

      当relabel_config设置为hashmod时,Prometheus会根据modulus的值作为系数,计算source_labels值的hash值。

    relabel_configs:
        - source_labels: [ '__address__']
          modulus: 8              # 根据当前Target实例__address__的值以8作为系数,这样每个Target实例都会包含一个新的标签_tmp_hash_value,并且该值的范围在1~10之间
          target_label: _tmp_bash_value
          action: hashmod

    效果如下

    这个时候就可以利用_tmp_hash_value这个临时标签做任何标签处理了,如下对_tmp_bash_value=3的实例drop

     relabel_configs:
          - source_labels: [ '__address__' ]
            modulus: 8
            target_label: _tmp_hash_value
            action: hashmod
          - source_labels: [ '_tmp_hash_value' ]
            regex: "^3$"
            action: drop


        relabel_configs:
          - source_labels: [ '__address__' ]
            modulus: 8
            target_label: _tmp_hash_value
            action: hashmod
          - source_labels: [ '_tmp_hash_value' ]
            regex: "(^1$|^9$)"
            action: keep
     

    五、labeldrop使用

    - job_name: 'node_exporter'
        static_configs:
        - targets: ['172.19.1.21:9100','172.19.1.22:9100','172.19.1.23:9100']
          labels:
            env: 'test'
            zone: 'shanghai'
            label_name: 'Test_label'
            label_value: 'za'
            __host__: 'master_abc'
        relabel_configs:
        - regex: "label(.+)"
          action: labeldrop

    metric_relabel_configs对拉取数据的操作

    1、删除不需要的metrics

        删除以node_cpu_开头的所有metrics
    metric_relabel_configs:
    - source_labels: [__name__] separator: ; regex: node_cpu_(.+) replacement: $1 action: drop

     修改指标(metrics)中标签(label)

    让metric标签中的container_label_io_kubernetes_pod_name这个标签的值赋给新的标签pod_name
        metric_relabel_configs:pod_name
        - source_labels: ['container_label_io_kubernetes_pod_name'] 
    regex: (.
    +)
    replacement: $
    1
    target_label: pod_name
    action: replace
     
  • 相关阅读:
    移除TDE
    SQL Server 聚集索引和非聚集索引的区别
    Serivce Broker 简单实用
    SQL Server 2012 ColumnStore索引测试
    UISegmentedControl的所有操作总结
    iPhone开发之深入浅出 — ARC之前世今生(三)
    什么是 ARC?ios5,xcode 4.2
    Present ViewController详解
    UITextField的总结
    iPhone开发资料之内存管理 ,循环引用导致的内存问题
  • 原文地址:https://www.cnblogs.com/gavin11/p/12842702.html
Copyright © 2020-2023  润新知