iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Cloud Native

從 Docker 到 K8s:我的 30 天雲原生筆記系列 第 29

Day 29: 監控的告警中心 Alertmanager

  • 分享至 

  • xImage
  •  

在昨天的 Day 28,我們成功地用 Grafana 將 Prometheus 中冰冷的指標,變成了看得懂的儀表板。我們終於能夠「看見」系統的健康狀況了。

但一個更重要的問題隨之而來:難道我們要 24 小時不眠不休地盯著儀表板嗎?

當然不是!一個成熟的監控系統,應該具備主動告警的能力。當問題發生時,系統應該要主動來通知我們,而不是等我們自己去看。

今天,我們就要來學習 Grafana 內建的、功能強大的統一告警平台 (Grafana Alerting),並設定我們的第一條告警規則。

Part 1:Grafana 統一告警平台是什麼?

https://ithelp.ithome.com.tw/upload/images/20251006/20178656nRtL7K7LwE.png

在現代的 Grafana (v8.0+) 版本中,Grafana 不再只是一個單純的視覺化工具,它已經內建了一套完整的告警解決方案,其中就包含了一個功能完整的 Alertmanager。

這意味著,整個告警流程都可以在 Grafana 內部一站式完成,包含:

  1. Grafana 內建 Alertmanager:負責對觸發的告警進行分組、抑制等智慧化處理。
  2. Contact Points & Notification Policies:由 Grafana 統一管理,負責將處理後的告警,路由到正確的通知管道(Email, Slack, Webhook...)。

Part 2:建立我們的第一條告警規則

步驟 1 & 2:定義告警條件 (Query and alert condition)

https://ithelp.ithome.com.tw/upload/images/20251006/20178656IwaHcqV60D.png

第一步要先定義告警規則,決定了「什麼時候」該發出警報。Query 的地方要輸入一段 PromQL 來抓取我們想監控的指標,這邊以 node-exporter 為例。

# 計算 job 為 "node-exporter" 的健康目標總數
sum(up{job="node-exporter"})

第二步設定 Alert condition 也就是設定觸發條件。假設我們的叢集有 4 個 Node,那麼健康的節點總數就應該是 4。設定當 Query IS BELOW 4 時,觸發告警。

步驟 3 & 4:設定評估行為與標籤 (Evaluation behavior and labels)

https://ithelp.ithome.com.tw/upload/images/20251006/20178656ZNNw49eR8z.png

這一步決定了告警的「靈敏度」與「身份」。

  • Folder:將你的告警規則分門別類,方便管理。
  • Labels:為告警貼上標籤!這對於後續在 Alertmanager 中進行路由至關重要。例如,我們可以加上:
    • severity: critical
    • service: node-exporter
  • Evaluation group and interval:定義 Grafana 每隔多久(例如 1m)會來評估一次這個群組的所有規則。
  • Pending period (for):將它設定為 5m,代表只有當告警條件連續滿足 5 分鐘後,告警才會真正地進入 Firing(發送中)狀態。這可以避免因為短暫的網路波動或服務重啟,而收到大量的「假警報」。
  • Keep firing for (持續觸發時間):告警恢復的「冷靜期」,用來處理「抖動」(Flapping) 的告警。設定為 2m 時,即使告警條件已恢復正常,告警狀態仍會強制保持在 Firing 至少 2 分鐘,避免在短時間內收到來回的告警/恢復通知。

步驟 5:設定 Contact Points

https://ithelp.ithome.com.tw/upload/images/20251006/20178656EJJTmeS56c.png

進行到這一步,UI 會要求我們選擇一個 Contact point (聯絡點)。但我們還沒有建立任何聯絡點。所以,讓我們先跳轉一下,來設定我們的通知管道。

Contact Point 就是告警通知的最終目的地。它可以是一個 Email 地址、一個 Slack 頻道,或者是一個 Webhook URL

https://ithelp.ithome.com.tw/upload/images/20251006/20178656IfX3PO6tmt.png

  1. 前往 Contact Points 頁面:在 Alerting 頁面,點擊 Contact points 標籤。

  2. 新增聯絡點:點擊 Create contact point
    https://ithelp.ithome.com.tw/upload/images/20251006/20178656CYuUzjNyfU.png

  3. 選擇類型:在 Integration 區塊,會看到 Grafana 支援非常多種類型。如果想串接 Line 的話,Line Notify 在今年 3月已經停止提供服務,所以會需要用到 Webhook 去做串接。

  4. Teams 的話則是有直接支援,在 Integration 選擇 Microsoft Teams。然後明天的文章會在統一講解 這些 URL 怎麼取得。

步驟 6:完成告警規則設定

https://ithelp.ithome.com.tw/upload/images/20251006/20178656klxI2QfZDL.png

現在,回到我們的告警規則頁面,可以在 Contact point 的下拉選單中,選擇剛剛建立的社群作為這條規則的預設通知對象了,之後就能在 Teams 或 Line 收到告警通知。

最後,在 Configure notification message 區塊,我們可以客製化我們的告警訊息:

  • Summary (摘要)
    服務 {{ $labels.service }} 可能已離線!
  • Description (描述)
    偵測到 {{ $labels.service }} 在過去 5 分鐘內的請求速率 (RPS) 低於 0.1。

小知識:{{ $labels.<label_name> }} 是一種模板語法,它可以在發送通知時,動態地將我們在步驟 3 設定的標籤值,嵌入到我們的訊息中,讓告警內容更具體。

完成所有設定後,點擊 Save,我們的第一條告警規則就正式上線了!

在明天的文章中,我們就要來完成這最後、也最酷的一步:親手設定 Teams 和 Line,取得真實的 Webhook URL,並展示如何將 Grafana 的告警訊息,即時地推送到 LINE 中! 明天見!


上一篇
Day 28: 服務網格視覺化 Grafana
下一篇
Day 30: Grafana 整合 LINE API:打造雙向互動告警機器人
系列文
從 Docker 到 K8s:我的 30 天雲原生筆記30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言