Relabeling 重新标記
主要是在Prometheus配置當中的使用。
Relabeling 重新标記用于配置 Prometheus 元資訊的方式,它是轉換和過濾 Prometheus 中 label 标簽對象的核心,我們将了解 Relabeling 規則的工作原理,并能夠将它們應用于不同的場景中。
Prometheus在抓取目标配置完成之後,就會将監控的目标抓取過來。抓取過來之後,下面會有很多label标簽,有些label标簽需要我們去過濾,做一些轉換,可能某些序列不是我們想要的,這個時候就需要将這個序列過濾掉,有些時候可能需要添加标簽或者将裡面的标簽更改掉,這個時候就需要Relabeling,這些配置還是在Prometheus配置檔案裡面配置。
概述
Prometheus 發現、抓取和處理不同類型的 label 标簽對象,根據标簽值操作或過濾這些對象非常有用,比如:
- 隻監視具有特定服務發現注解的某些目标,通常在服務發現中使用(主要在服務發現當中,因為服務發現會自動将抓取的目标添加元資訊,根據這些元資訊做一些過濾)
- 向目标抓取請求添加 HTTP 查詢參數(查詢的路徑不是metrics需要做些替換)
- 僅存儲從指定目标中提取樣本的子集(有些樣本不需要,需要将其過濾掉)
- 将抓取序列的兩個标簽值合并為一個标簽
Relabeling 是作為一系列轉換步驟實作的,我們可以在 Prometheus 的配置檔案中應用這些步驟來過濾或修改标記對象,我們可以對一下類型的标記對象應用 Relabeling 操作:
- 發現的抓取目标(
)relabel_configs
- 抓取的單個樣本(
)metric_relabel_configs
- 發送給 Alertmanager 的報警(
)alert_relabel_configs
- 寫到遠端存儲的樣本(
)write_relabel_configs
平時在配置監控目标的時候我們更多的會用 與
relabel_configs
兩個配置
metric_relabel_configs
- 采集資料之前,通過
relabel_configs
- 采集資料之後,寫入存儲之前,通過
進行配置。
metric_relabel_configs
所有這些 relabeling 配置塊都是相同類型的
relabel_config
,每個配置塊都由一個規則清單組成,這些規則依次應用與每個标記的對象。(重新标記的時候有一系列的規則,應用了規則1之後轉換為另外一個對象,然後規則2又去應用它,然後規則3又去應用它,最後将處理後的對象輸出出來)
例如,一個 relabeling 規則可以根據正規表達式的比對來保留或丢棄一個對象,可以修改其标簽,也可以将一整組标簽映射到另一組。一旦一個 relabeling 步驟決定放棄一個有标簽的對象,就不會對這個對象執行進一步的 relabeling 步驟,它将從輸出清單中删除。
隐藏的标簽與中繼資料
以雙下劃線
__
開頭的标簽屬于特殊的标簽,它們在重新标記後會被删除。标記對象的來源最初可以附加這些隐藏的标簽,以提供關于标記對象的額外中繼資料,這些特殊的标簽可以在 relabeling 階段被用來對對象的标簽進行修改。
這些都是普通的标簽,沒有下劃線開頭的。
下面這些以雙下劃線開頭和雙下劃線結尾的這些标簽名稱,這些都是特殊的标簽。
可以對這些标簽做relabel操作,操作完之後這些标簽就删除了。
Discovered Labels可以映射為我們的目标标簽Target Labels,隻保留job instance标簽,這裡address就映射為instance這個标簽了,其餘的元标簽以_xx_格式的就不要了,最後就隻保留了job和instance标簽。
- job_name: 'kubernetes-node-exporter'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:9100'
target_label: __address__
action: replace
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
對于抓取名額,其中就包含一些隐藏的标簽,可以用來控制目标應該如何被抓取。
-
:包含應該被抓取目标的位址,它最初預設為服務發現機制提供的 __address__
,如果在此之前沒有明确地将執行個體标簽 instance 設定為其他值,那麼在 relabeling 之後,Prometheus 會将 instance 标簽設定為<host>:<port>
的值。(如果替換了,會根據替換之後的位址去抓取)__address__
-
:抓取目标的請求模式,包括 http 與 https,預設為 http。__scheme__
-
:表示用于采集名額的 HTTP 路徑,預設為__metrics_path__
。(如果提供了metrics路徑不在/metrics
)__metrics_path__下面,那麼可以對其使用relabel操作的,将裡面的值做一個替換
-
: 包含 HTTP 查詢參數名稱和它們的值。__param_<name>