事件標籤重寫處理器(Relabel)— 對告警事件標籤進行刪除、保留、重新命名、合併與值修改。
概述
Relabel 事件處理器是 Nightingale 告警通知流程中對事件標籤進行重新標記與處理的重要環節。該處理器的功能與在資料上報時對資料進行 relabel 類似,允許您對告警事件的標籤進行各種操作,包括刪除、保留、重新命名、合併與修改標籤值等。
主要功能
- 標籤刪除:刪除不需要的標籤(labeldrop)
- 標籤保留:只保留指定的標籤(labelkeep)
- 標籤重新命名:對標籤 key 進行重新命名(labelmap)
- 標籤合併:根據已有標籤建構新標籤(replace)
- 值修改:修改標籤的 value 內容(replace)
使用步驟
1. 選擇處理器類型
在告警規則設定頁面,選擇「處理器」類型為 Relabel。
2. 設定操作類型
根據需求選擇合適的 Action:
- 刪除標籤:選擇
labeldrop - 保留標籤:選擇
labelkeep - 重新命名標籤:選擇
labelmap - 修改/建構標籤:選擇
replace
3. 設定比對條件
在 regex 欄位中設定標籤 key 的比對條件,支援正則表示式。
4. 設定取代內容(如需要)
根據選擇的操作類型,設定相應的 replacement、target_label 等參數。
5. 測試設定
儲存設定後,新的告警事件將按照設定的規則進行標籤處理。
使用場景與設定範例
場景 1:刪除不需要的標籤

如上圖中的告警事件,有非常多的標籤,如果有的標籤我們不太關心想去掉,可以透過 labeldrop 操作將這些標籤 drop 掉,比如如果想刪掉 listening_10 和 host 標籤,可以設定如下:
設定參數:
- Action:
labeldrop - Regex:
listening_10|host

儲存之後,listening_10 和 host 會被刪除。

場景 2:只保留指定的標籤

如上圖中的告警事件,有非常多的標籤,如果只想保留我們關心的標籤,可以透過 labelkeep 操作,比如我們只想保留 service、name 和 addr 標籤,可以設定如下:
設定參數:
- Action:
labelkeep - Regex:
service|^name$|addr
注意:name 這樣寫
^name$是因為其他標籤包含了 name,進行嚴格比對

儲存之後,新的告警事件,只會保留 service|name|addr 三個標籤。

場景 3:重新命名標籤 key

如上圖,想將 __name__ 重新命名為 name,則可以使用如下設定:
設定參數:
- Action:
labelmap - Regex:
__(name)__ - Replacement:
$1或固定值name
新的 name 標籤增加之後,之前的 __name__ 標籤還會保留,需要再設定一個 labeldrop 刪除掉。

儲存之後,新的告警事件,__name__ 會改為 name。

場景 4:建構新的標籤

如上圖的告警事件,如果我們想建構一個包括了 ident+listening_10 內容的新標籤,我們可以使用 replace 操作,將 ident+listening_10 合併到一起:
設定參數:
- Action:
replace - Target_label:
addr - Source_labels:
["ident", "listening_10"] - Separator:
:

儲存之後,新的告警事件,會有一個新的 addr 標籤。

場景 5:修改標籤的 value

如上圖,如果我們修改 addr 標籤,將連接埠部分去掉,可以使用 replace 操作:
設定參數:
- Action:
replace - Target_label:
addr - Source_labels:
["addr"] - Regex:
([^:]+):.* - Replacement:
${1}

儲存之後,新的告警事件,addr 中的連接埠會去掉。

常見使用場景
1. 標籤清理
清理告警事件中的冗餘標籤,只保留業務關心的核心標籤。
2. 標籤標準化
統一標籤命名規範,將不規範的標籤 key 重新命名為標準格式。
3. 環境區分
透過標籤合併,建構包含環境資訊的新標籤,便於告警分類。
4. 敏感資訊處理
去除或修改包含敏感資訊的標籤內容。
注意事項
- 正則表示式:所有比對條件都支援正則表示式,確保語法正確
- 操作順序:多個 relabel 操作按設定順序執行,注意操作間的依賴關係
- 標籤保留:使用 labelmap 重新命名標籤時,原標籤仍會保留,需額外設定 labeldrop 刪除
- 充分測試:建議在正式環境使用前進行充分測試
- 效能影響:複雜的正則表示式可能影響處理效能,建議最佳化比對條件
常見問題
Q1:設定了 Relabel 但告警事件標籤沒變,怎麼排查?
A:依此順序:
- 比對條件:regex 寫錯的機率最大 — 用 即時查詢 看實際事件標籤,對照正則比對;
- 操作類型選錯:labelmap 不刪原標籤,需要再設定一個 labeldrop;
- 處理器順序:在告警規則的「流水線設定」裡,relabel 處理器需要在告警通知節點之前;
- 生效時機:Relabel 處理新觸發的事件,已經存在的事件不會被回溯重寫。
Q2:labelkeep 和 labeldrop 都用了,誰優先?
A:按處理器設定順序執行。先 labeldrop 再 labelkeep 等於「先刪一批,再只保留一批」,最終留下交集。建議別同時用,選一個語意清晰的就行。
Q3:標籤 value 含特殊字元(如 []、{}、空格),正則怎麼寫?
A:
- 在 regex 裡對特殊字元跳脫:
\[、\{、\(空格通常不用跳脫); - 或者用更寬鬆的
.*比對; - 用
^和$限定邊界避免誤比對,如^name$(精確比對 name)。
Q4:可以從其他標籤的 value 提取部分字串成為新標籤嗎?
A:可以 — 用 replace + 正則擷取群組:
Action: replace
Source_labels: [original_label]
Regex: ^([a-z]+)-(\d+)$ # 捕获前缀和数字
Target_label: prefix
Replacement: ${1} # 引用第 1 个捕获组
效果:original_label=web-01 → 新增 prefix=web 標籤。