天天看點

Relabeling 重新标記

Relabeling 重新标記

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​

    ​)
Relabeling 重新标記
平時在配置監控目标的時候我們更多的會用 ​

​relabel_configs​

​​ 與 ​

​metric_relabel_configs​

​ 兩個配置
  1. 采集資料之前,通過 ​

    ​relabel_configs​

  2. 采集資料之後,寫入存儲之前,通過 ​

    ​metric_relabel_configs​

    ​ 進行配置。

所有這些 relabeling 配置塊都是相同類型的 ​

​relabel_config​

​,每個配置塊都由一個規則清單組成,這些規則依次應用與每個标記的對象。(重新标記的時候有一系列的規則,應用了規則1之後轉換為另外一個對象,然後規則2又去應用它,然後規則3又去應用它,最後将處理後的對象輸出出來)

Relabeling 重新标記

例如,一個 relabeling 規則可以根據正規表達式的比對來保留或丢棄一個對象,可以修改其标簽,也可以将一整組标簽映射到另一組。一旦一個 relabeling 步驟決定放棄一個有标簽的對象,就不會對這個對象執行進一步的 relabeling 步驟,它将從輸出清單中删除。

隐藏的标簽與中繼資料

以雙下劃線​

​__​

​開頭的标簽屬于特殊的标簽,它們在重新标記後會被删除。标記對象的來源最初可以附加這些隐藏的标簽,以提供關于标記對象的額外中繼資料,這些特殊的标簽可以在 relabeling 階段被用來對對象的标簽進行修改。

這些都是普通的标簽,沒有下劃線開頭的。 

Relabeling 重新标記

下面這些以雙下劃線開頭和雙下劃線結尾的這些标簽名稱,這些都是特殊的标簽。

可以對這些标簽做relabel操作,操作完之後這些标簽就删除了。

Discovered Labels可以映射為我們的目标标簽Target Labels,隻保留job instance标簽,這裡address就映射為instance這個标簽了,其餘的元标簽以_xx_格式的就不要了,最後就隻保留了job和instance标簽。

Relabeling 重新标記
Relabeling 重新标記
Relabeling 重新标記
Relabeling 重新标記
Relabeling 重新标記
- 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__​

    ​​:包含應該被抓取目标的位址,它最初預設為服務發現機制提供的 ​

    ​<host>:<port>​

    ​​,如果在此之前沒有明确地将執行個體标簽 instance 設定為其他值,那麼在 relabeling 之後,Prometheus 會将 instance 标簽設定為​

    ​__address__​

    ​ 的值。(如果替換了,會根據替換之後的位址去抓取)
  • ​__scheme__​

    ​:抓取目标的請求模式,包括 http 與 https,預設為 http。
  • ​__metrics_path__​

    ​​:表示用于采集名額的 HTTP 路徑,預設為​

    ​/metrics​

    ​​。(如果提供了metrics路徑不在​

    ​__metrics_path__下面,那麼可以對其使用relabel操作的,将裡面的值做一個替換​

    ​)
  • ​__param_<name>​

    ​: 包含 HTTP 查詢參數名稱和它們的值。

繼續閱讀