文章出处:https://medium.com/@maiccaejfeng/grafana-alert-%E5%91%8A%E8%AD%A6%E4%BD%BF%E7%94%A8-email-%E9%80%9A%E7%9F%A5%E7%9A%84%E7%94%A8%E6%B3%95-8e62c208457d
監控圖表的狀態變化,並發出告警透過 gmail 通知管理者。
目標
圖表(Panel)產生告警(Alert),告警發送 email 通知(notification)給管理者。例如,一個顯示資料量的折線圖,在資料量低於 1 的時候(即沒有資料),發出告警,並且將此告警透過 gmail 通知管理者。
前置作業
- 打開本機的 Grafana。打開 Terminal,輸入以下指令 :
$ brew update
$ brew reinstall grafana
$ brew tap homebrew/services
$ brew services start grafana 或是 $ brew services restart grafana - 在瀏覽器輸入 http://localhost:3000/login 登入。預設帳密為 admin/admin。
- 本次 Grafana 版本 v6.7.0。
1. 建立 Data Source
在選單 Configuration > Data Sources 的地方,建立一個 Elasticsearch 的 Data Source,目標是所有「lm-」開頭的 index,時間欄位使用「@timestamp」:


按下綠色 Save & Test,出現「Index OK. Time field name OK.」的綠色訊息即為成功。

2. 建立 Dashboard
在選單 Create > Dashboard 的地方,建立一個名為「ES 192.168.70.174 lm-*」的 Dashboard。在「Dashboard Settings」設定 dashboard 名稱。

3. 建立 Panel
按「Add panel」新增圖表。預設圖表即為表示「資料量」的折線圖。故僅有在編輯圖表的 Visualization 處,將 legend 的顯示關閉,以及在 General 處,將圖表命名為「資料量」即可。


獲得表示資料量的折線圖:

4. 在 Grafana 設定 SMTP Server
參考文章「Grafana Alerting and Email Notifications」,用 Visual Studio Code 打開本機的 grafana.ini 檔(位於 /usr/local/etc/grafana/grafana.ini),找到 SMTP 的設定區塊,修改成以下設定。其中「my.gmail.address」填入用來發信的 gmail 帳號,「my.gmail.password」填入該 gmail 的密碼。

修改好後儲存檔案,到 Terminal 重新啟動 Grafana(指令 $ brew services restart grafana)。
5. 設定 gmail
注意,用 gmail 的話,需要在 gmail 設定將「兩步驟驗證」關閉,並且將「低安全性應用程式存取權」開啟。


6. 建立 Notification Channel
在選單 Alerting > Notification channels 的地方,建立一個 notification channel。一個 notification channel 有點像是一封 email 的收件人名單,收件人可以是一個人,也可以是一群人。在「Name」欄位對這個 notification channel 取名,因為目前是給 dashboard「ES 192.168.70.174 lm-*」產生告警的時候發送 email 通知,所以取名為「192.168.70.174 lm-* Admin」。「Type」選擇「Email」。在「Addresses」填入收件人名單。

按下 Send Test 測試,即可收到 Test notification 的測試 email 表示設定成功:

7. 建立告警(Create Alert)
到 dashboard 的目標 panel 編輯 panel,在 Alert 頁籤按下 Create Alert 建立告警。

按下 Test Rule 測試:

8. 設定告警通知
在 Alert 頁籤的 Notifications 區塊,設定 Send to 為步驟 6. 設定的 notification channel「192.168.70.174 lm-* Admin」,在 Message 欄位填入想傳達的訊息。然後儲存 dashboard。

9. 建立 Alert List
新增一個 panel,在 Visualization 頁籤選擇 panel 類型是「Alert List」:

10. 收到告警 email
可於設定的 email 收到告警通知:

11. 持續收到告警通知
發現雖然無法設定「每隔一段時間,持續發送告警通知 email」,但當告警狀態改變的時候,例如從 Alerting(表示異常)轉為 OK(表示正常),或是從 OK 轉為 Alerting,也會發送 email 通知,因此也可以達到監控的效果。只是如果告警狀態一直維持在 Alerting 的狀態的話,並不會持續發送 email。
將 Panel「Alert List」的 Visualization 設定修改為 Show「Recent state changes」:

可以在 dashboard 上看到告警狀態的變化:

除了第一次 OK 的訊息以外,其餘 7 次狀態變化都有寄 email 通知。也算是有監控到啦!
完成!!