哈囉,大家好歡迎來到我們 30 天實戰之旅的最後一天!
在昨天的 Day 29,我們成功地設定了 Grafana 的告警規則,讓系統具備了「判斷問題」和「知道要通知誰」的能力。但我們在 Contact Point 中留下的,還只是一個 placeholder Webhook URL。
今天,我們就要來完成這最後、也最酷的一步:串接 LINE Messaging API,打造一個不僅能主動推播告警,甚至能與我們進行簡單互動的告警機器人!
熟悉 LINE 的朋友可能會問,為什麼不用更簡單的 LINE Notify?
LINE Notify 只需要一組 Token,就能輕鬆地推播訊息。但在 2025 年 3 月,LINE 官方終止了透過 Webhook 方式串接 LINE Notify 的服務。
因此,要打造一個專業的告警機器人,我們必須使用功能更強大的 LINE Messaging API,目前需要到 Line Official Account 去做註冊。註冊的名稱和信箱等資訊之後都還可以再做修改,比較重要的是會拿到 Channel Access Token
和 Channel Secrets
,這在等一下的步驟會詳細介紹。
下一個問題是:「為什麼 Grafana 不能直接將告警發送到 LINE Messaging API?」中間還要透過 Webhook 呢?答案在於格式不相容與功能缺失:
Authorization: Bearer <Channel Access Token>
。Grafana 的預設 Webhook 無法輕易地加入這個動態的認證標頭。LINE Official Account Manager
建立一個官方帳號,這就是你的機器人本體。LINE Developers Console
,建立一個新的 Provider
和一個 Messaging API Channel
。Channel access token
:這是我們的 Webhook 服務用來主動發送訊息給 LINE 的「鑰匙」。Channel secret
:這是我們的 Webhook 服務用來驗證收到的訊息是否真的來自 LINE 的「密碼」。我們的 Flask Webhook 服務,至少需要兩個 API 端點:
/push
(接收來自 Grafana 的告警):
Channel access token
,將訊息推播出去。/callback
(接收來自 LINE 的訊息):
Channel secret
,對收到的訊息內容進行相同的 HMAC-SHA256 運算,並比對簽章是否一致,以確保訊息不是偽造的。這一步,正是我們整個系列所學知識的集大成!
Dockerfile
。.gitlab-ci.yml
,讓 Pipeline 自動:
Channel access token
和 Channel secret
作為 K8s Secrets
,安全地注入到 Webhook Pod 中。/callback
端點,安全地暴露到我們在 GoDaddy 等地方購買的公開網域名稱上。現在,我們只需要回到 Day 29 建立的 Contact Point,將 URL 修改為我們 Webhook 服務的內部 K8s Service 位址即可!
串接 Teams 相對簡單許多,不過當初找這條 URL 也是找很久!
首先建立 Channel ,點擊右上角三個點點的地方,選擇 「管理頻道」> 連接器 > Incoming Webhook,Create 後它就會直接給你一條 URL。
將這條 URL 貼到 Grafana 的 Webhook Contact Point 中,就完成了!
這篇是我鐵人賽系列的最後一篇,努力趕在國慶連假前結束了挑戰 🥳
感謝一路以來的閱讀與支持,如果你也正在走在雲原生的學習路上,願這系列能成為你的一點幫助與參考。下次見!👋