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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM