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 驗證打標后的結果

 


免責聲明!

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



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