https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
relabel_configs :允許在采集之前對任何目標及其標簽進行修改 重新標簽的意義? • 重命名標簽名 • 刪除標簽 • 過濾目標 action:重新標簽動作 • replace:默認,通過regex匹配source_label的值,使用replacement來引用表達式匹配的分組 • keep:刪除regex與連接不匹配的目標 source_labels • drop:刪除regex與連接匹配的目標 source_labels • labeldrop:刪除regex匹配的標簽 • labelkeep:刪除regex不匹配的標簽 • hashmod:設置target_label為modulus連接的哈希值source_labels • labelmap:匹配regex所有標簽名稱。然后復制匹配標簽的值進行分組,replacement分組引用(${1},${2},…)替代
Prometheus的Relabeling機制
在Prometheus所有的Target實例中,都包含一些默認的Metadata標簽信息。可以通過Prometheus UI的Targets頁面中查看這些實例的Metadata標簽的內容:
默認情況下,當Prometheus加載Target實例完成后,這些Target時候都會包含一些默認的標簽:
__address__:當前Target實例的訪問地址<host>:<port>
__scheme__:采集目標服務訪問地址的HTTP Scheme,HTTP或者HTTPS
__metrics_path__:采集目標服務訪問地址的訪問路徑
__param_<name>:采集任務目標服務的中包含的請求參數
一般來說,Target以__作為前置的標簽是在系統內部使用的,因此這些標簽不會被寫入到樣本數據中。不過這里有一些例外,例如,我們會發現所有通過Prometheus采集的樣本數據中都會包含一個名為instance的標簽,該標簽的內容對應到Target實例的__address__。 這里實際上是發生了一次標簽的重寫處理。
這種發生在采集樣本數據之前,對Target實例的標簽進行重寫的機制在Prometheus被稱為Relabeling。
- job_name: 'jenkins' scheme: http basic_auth: username: admin password: Kxqv!fada2f static_configs: - targets: ['47.51.12.12:61921'] labels: afasd: bj zcxvzx: afd
scrape_configs: - job_name: 'bj' static_configs: - targets: ['localhost:9090'] relabel_configs: - action: replace source_labels: ['job'] regex: (.*) replacement: $1 target_label: idc