iT邦幫忙

2024 iThome 鐵人賽

DAY 20
2
DevOps

Grafana Zero to Hero系列 第 20

Grafana Zero to Hero - Notification:隨時隨地接收告警

  • 分享至 

  • xImage
  •  

接下來我們將介紹如何串接各種不同通訊軟體的 Contact Point。

Slack

Slack 是許多組織都使用的辦公通訊軟體,Slack 的共同創辦人 Stewart Butterfield 也是網路相簿服務 Flickr 的創辦人之一。Flickr 在 2005 年出售給 Yahoo 後,Butterfield 開始計畫開發遊戲產品,並於 2009 年建立了 Tiny Speck,推出網頁遊戲 Glitch。儘管獲得了 1500 萬美元的投資,但最終因遊戲性不佳等原因而失敗。之後,Tiny Speck 將目標轉向商用軟體,並開發通訊軟體 Slack,於 2020 年被知名 CRM 公司 Salesforce 以 277 億美元收購。

Glitch
Glitch 圖,圖片來源 TechCrunch

Slack Contact Point 可以用 Slack App 發送訊息,分為以下兩種方式:

  1. Webhook:透過 Slack 的 Webhook 發送訊息。
  2. Bot token:使用 Bot Token 發送訊息。

Slack Demo
Slack 通知範例

App 建立與設定方式如下:

  1. https://api.slack.com/apps 建立自己的 App,可以直接選擇 From scratch。
    New App 1
    New App 2
  2. 使用 Webhook
    1. 在 Incoming Webhooks 頁籤新增 Webhook,但 Webhook 需要指定可生效的 Channel。
      New webhook
      Webhook choose channel
    2. 在 Contact Point 中填入 Webhook URL。
      Config Webhook
  3. 使用 Bot token
    1. 在 OAuth & Permissions 頁籤取得 Bot User OAuth Token,並在 Bot Token Scope 新增 chat:write.public 權限,讓 Bot 可以在所有 Channel 發送訊息。如果要附加圖片,則需要同時新增 files:write 權限。更新 Scope 後需重新安裝該 App 才能生效。
      Token
      Scope
    2. 在 Contact Point 中填入 Recipient(Channel Name)與 Token。
      Config Bot

如需搭配 Panel 截圖,在預設的圖片處理機制下僅能使用 Bot token,且需要正確設定權限並將 App 加入發送目標的 Channel 中。但由於 Slack 的檔案上傳 API 近期變更,Grafana 最新版本尚未更新,因此此功能暫時失效,相關 PR 正在處理中。

Full Scope
完整可上傳圖片與發送訊息的 Scope

預設的 Template 會將 URL 連結完整列出,如需更簡潔的顯示方式,可參考 Slack Message 的 Formatting。例如使用 <http://www.example.com|This message is a link>,即可顯示為乾淨的超連結。

Tempalate Config
在訊息內使用 Slack 的 Format

Tempalate Demo
訊息內容的呈現

Line

Line 是由韓國 Naver 集團的日本子公司開發,於 2011 年 6 月發布的通訊軟體,初衷是為了改善當年 311 大地震中家人與朋友之間通訊困難的問題,並設計了「已讀」功能,讓發送者知道對方是否平安並已接收到訊息。2019 年,Naver 與持有 Yahoo! Japan 的 SoftBank 將 Line 與 Yahoo! Japan 合併為 LY Corporation 單一個公司。

根據 NCC 112 年通訊傳播市場報告統計,台灣民眾擁有 Line 帳號的比率高達 97.7%。雖然在辦公中使用 Line 並不明智,但有時仍需串接 Line 通知。在 Grafana 中可以使用 Line Notify 進行串接。

Line Demo
Line 通知範例

Notify 的設定步驟如下:

  1. https://notify-bot.line.me/my/ 建立並發行存取權杖,設定要通知到的群組或是個人。
    Line Token
  2. 在 Contact Point 中填入 Token。
    Line Config

Telegram

Telegram 是於 2013 年推出的通訊軟體,2024 年 7 月全球活躍人數已達 9.5 億,主打高度安全性並提供豐富的 API 和開發自由度。Telegram 的創辦人為俄羅斯的杜洛夫兄弟,他們先前創辦了俄羅斯最大的社群軟體 VKontakte,但因社群軟體的高度政治風險,最終被迫出售股份,並轉而開發 Telegram 並離開俄羅斯。

TG Demo
Telegram 通知範例

Telegram 有完整的 Bot 功能,設定步驟如下:

  1. @botfather 中建立 Bot,Bot 名稱必須以 bot 作為結尾。
    Bot Father
  2. 啟動建立好的 Bot。
    Bot Init
  3. 將 Bot 加入要發送通知的群組中。
  4. 使用 Web 版 Telegram https://web.telegram.org/ 登入,進入通知用的群組,從 URL 取得 Group Chat ID,例如 URL https://web.telegram.org/a/#-4266674385,Chat ID 為 -4266674385
  5. 在 Contact Point 中填入 Bot API Token 與 Group 的 Chat ID。
    TG Config

Telegram Contact Point 支援上傳圖片功能,開啟截圖設定後將自動附加在訊息中。

TG image demo

如需對通知內容進行客製化,可使用 HTML 格式設定文字,詳細說明請參考 官方文件

TG HTML
Telegram 支援 HTML 格式顯示文字

TG Template Config
也可以設定 HTML 的 <a> 標籤連結

TG Template Demo
如果設定的 URL 可以被 Telegram 解析,就會顯示為超連結;若是 localhost 則會被視為無效連結而無法連結。

Lab

Alert 範例網址:https://github.com/blueswen/grafana-zero-to-hero/tree/main/06-alerting/01-alert-rules

因 Contact Point 需設定大量 Token 參數,可使用前一篇的範例設定,再自行建立 Contact Point,複製 Provisioning 的 Alert 後套用新的 Contact Point。

參考資料

  1. The Slack origin story
  2. Wikipedia: Line
  3. Wikipedia: Telegram

上一篇
Grafana Zero to Hero - Alerting:強化告警通知
下一篇
Grafana Zero to Hero - Notification:事件驅動
系列文
Grafana Zero to Hero30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言