iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
AI 自動化

30 天打造 AI 自動化維運平台:從監控、告警到故障分析系列 第 7

Day 7|告警不能只留在 Grafana:把異常通知送出去

  • 分享至 

  • xImage
  •  

Day 6 我們已經完成第一條告警規則:

server01
CPU > 90%
持續 5 分鐘

Firing

到這裡,Grafana 已經可以判斷 Server 是否出現異常。

但還有一個問題。

如果沒有人打開 Grafana,其實還是不會知道告警發生了。

所以今天要做的事情很單純:

當 Alert 進入 Firing 時,把通知主動送出去。

這次先使用 Discord Webhook 當作測試通知管道。

主要原因很簡單:設定不複雜,也很適合拿來驗證整個告警流程。

今天要完成的流程

昨天我們做到:

server01

Node Exporter

Prometheus

Grafana

Alert Rule

Firing

今天再多接最後一段:

server01

Prometheus

Grafana

CPU > 90%

Firing

Discord

收到通知

今天不增加新的監控項目。

先讓目前這一條 CPU Alert 可以真的送到我們手上。

Step 1:準備 Discord Webhook

先準備一個 Discord Server,建立一個專門接收監控通知的頻道。

例如:

#server-alert

進入該頻道的設定,找到 Webhook 功能,建立一組 Webhook。

完成後會取得一個 Webhook URL。

格式大概像:

https://discord.com/api/webhooks/...

這組網址等於是這個通知頻道的入口。

所以:

Webhook URL 不要公開,也不要直接放進 GitHub。

如果未來程式需要使用,可以另外放到環境變數或設定檔中。

Step 2:建立 Grafana Contact Point

接著回到 Grafana。

找到:

Alerting → Contact points

建立新的 Contact Point。

名稱可以先設定:

Discord-Server-Alert

Integration 選擇:

Discord

接著把剛才取得的 Webhook URL 貼進去。

設定完成後,可以先使用 Grafana 提供的:

Test

測試通知。

如果 Discord 收到測試訊息,就代表:

Grafana

Discord Webhook

Discord Channel

這段已經成功。

Step 3:讓 Alert 使用這個通知管道

有 Contact Point 之後,還需要告訴 Grafana:

哪些告警要送到哪裡?

這就是 Notification Policy 的工作。

進入:

Alerting → Notification policies

把目前的 CPU Alert 指向:

Discord-Server-Alert

這樣當告警進入 Firing 時,就會送到 Discord。

目前整體流程變成:

Server01 High CPU

Firing

Notification Policy

Contact Point

Discord
Step 4:先測試通知

設定完成後,我不建議馬上故意讓 Server CPU 跑到 90%。

先用 Grafana 的 Test 功能確認:

Grafana

Webhook

Discord

有沒有正常。

如果 Discord 收到類似:

Test alert

Alerting
Grafana TestAlert

代表基本通知功能正常。

這樣如果後面真正 Alert 沒有收到通知,就可以把問題縮小到 Alert Rule 或 Notification Policy,而不是一開始什麼都一起查。

Step 5:測試真正的 Alert

接下來才測試我們 Day 6 建立的:

Server01 High CPU

原本條件是:

CPU > 90%
持續 5 分鐘

但實驗時其實沒有必要真的等 CPU 跑到 90%。

可以暫時把測試門檻降低。

例如:

CPU > 20%
持續 1 分鐘

這樣比較容易讓 Alert 進入:

Normal

Pending

Firing

當 Grafana 判斷為 Firing 之後,Discord 就應該收到通知。

收到第一封真正的告警

如果設定都正常,Discord 上應該會收到類似:

[FIRING]

Server01 High CPU

Instance:
192.168.1.101:9100

Status:
Firing

這時候整個流程才算真的串起來。

因為現在已經不是:

我打開 Grafana,才發現 CPU 有問題。

而是:

CPU 發生異常,系統主動來找我。

Alert 恢復正常後呢?

告警不只是要通知「發生問題」。

恢復正常也很重要。

例如:

CPU 95%

Firing

收到通知

後來 CPU 降回:

CPU 35%

Grafana 會把 Alert 從:

Firing

恢復成:

Normal

通知系統也可以告訴我們:

[RESOLVED]

Server01 High CPU

這樣維運人員才知道:

剛才的異常現在已經恢復。

不然只有「出問題」的通知,卻不知道什麼時候恢復,其實也會造成困擾。

不要讓告警變成另一種垃圾訊息

做到這裡,我也開始覺得告警有一個問題需要注意。

假設設定:

CPU > 70%

而 Server 平常就很容易超過 70%。

結果可能一天收到幾十次:

High CPU
High CPU
High CPU
High CPU
High CPU

久了最大的可能不是 Server 被修好。

而是:

大家開始不看告警。

所以 Threshold 不是設定得越敏感越好。

真正要考慮的是:

什麼狀況
+
持續多久
+
是否真的需要人處理

這三件事情。

這也是後面慢慢增加 Memory、Disk 等規則時,我會繼續注意的地方。

Day 7 完成

今天沒有增加新的監控項目。

我們只把 Day 6 的 Alert 往後接了一步:

Prometheus

Grafana

Alert Rule

Firing

Contact Point

Discord

完成:

✓ 建立 Discord Webhook
✓ 建立 Grafana Contact Point
✓ 設定 Notification Policy
✓ 測試告警通知
✓ 收到 Firing 通知
✓ 確認 Resolved 狀態

到 Day 7 為止,我們已經完成最基本的:

監控 → 判斷異常 → 主動通知

這其實已經是一套最基本的監控告警流程。

接下來的問題

現在收到的通知大概還是:

Server01 High CPU
CPU > 90%
Status: Firing

它告訴我們:

有問題。

但它還沒有回答:

為什麼會有問題?

例如 CPU 95%,接下來維運人員還是要登入 Server,再去確認:

哪個 Process 在吃 CPU?
Memory 是否也異常?
最近有沒有 Error Log?
Service 是否正常?

所以接下來,我想開始讓自己的程式加入這套流程。


上一篇
Day 6|有監控還不夠:開始設定第一條告警規則
下一篇
Day 8|收到告警之後呢?用 Python 自動收集故障資訊
系列文
30 天打造 AI 自動化維運平台:從監控、告警到故障分析9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言