[Redash] Email Alert & Schedule

Mars Weng
MarsW-Redash
Published in
6 min readNov 7, 2018

上一篇文中,我們設定好了 mail server,除了管控帳號方便,
還可以在 Redash 裡使用 Alert,當我們設定的條件被觸發的時候,就可以發信通知我們

設定 Alert Destinations

Redash 可選擇的 Alert Destinations 有不少,
也有大家科技業常使用到的 Slack,不過這裡我們選擇 Email

(ps. 對比之前使用的 4.0.1+b4038 版本,
5.0.1+b4850 又增加了 ChartWork 當成 Alert Destinations)

Name 可以隨意填、Subject Template 維持預設,
Addresses 雖然是必填,但因前篇文章是使用 Gmail 當成 mail server,
這裡的設定似乎不影響寄件人都是綁定的 Gmail Application 對應的 Google 帳戶,就同樣使用 no-reply@example.com

設定 Alert

Alert 的設定要以某個 Query 為基底,
這裡我們使用 Google Spreadsheet 的 Query 來做範例,方便做修改:

搜尋是使用「名稱」而非 「QUERY_ID」,設定好 Query 後,
選擇要偵測的欄位 Value column,
再來設定比較的方法(Op) 大於、小於、等於 某個參照值(Reference),
此範例中選擇第一欄 value1 的第一列值如果大於 20 就會觸發 Alert 機制
(Rearm seconds 設為 60,是如果此機制重複被觸發,60秒才會寄一次信。)

同時記得要把 Notifications 加入 當此條 Alert 機制觸發時,該寄 Email 給哪些帳號(沒設定的話,就是雖然有觸發,但不會發生任何事情)
此範例中是會寄信給 MarsW 這個帳號設定的信箱。

Alert 觸發

按照以上設定,當第一列的 value1 欄位值 > 20 ,就會觸發 Alert 機制。
目前第一列的 value = 11,在 Alerts 頁面會看到剛才設定的 Alert 狀態為 「OK」,代表著 Alert 有被設定成功,但目前的 Query 的資料還沒有觸發到 Alert 機制。

一但將資料源 Google Spreadsheet 的值從 11-> 22 (22>20)
再在 Redash 的 Queries 頁面按下 Execute

在 Alerts 頁面會看到剛才設定的 Alert 狀態變成了 「TRIGGERED」

同時信箱也會收到通知信,標題為預設的「(Alert狀態) Alert名稱」

而因為 Rearm seconds 設為 60,
所以在 60 秒內反覆修改 Google Spreadsheet 第一列第一欄的值,
eg. 11-> 22 -> 23 -> 24 -> 11 -> 25
並重新 Execute Query,也不會重複收到通知信。

狀態說明 & 狀態更改再發信

  • OK:Alert 機制設定成功,但 Query 的結果尚未滿足設定的條件
  • TRIGGERED:Alert 機制設定成功,且 Query 的結果滿足設定的條件

如果把 Rearm seconds 設為 0 或為空,
此時 Alert 的機制會是當狀態更改才會發信
在本次的設定來說,以下列出各種情況及發信結果:

  • 11 (OK) -> 22 (TRIGGERED):發信
  • 22 (TRIGGERED) -> 23 (TRIGGERED) :不發信
  • 23 (TRIGGERED) -> 10 (OK):發信
  • 10 (OK) -> 11 (OK):不發信

Schedule

上面的設定中,如果原始資料來源變動了,
都需要回 Redash 的 Queries 頁面按下 Execute,才會更新資料
也才會跟著判斷是否觸發 Alert 機制,
但我們會希望這個 Alert 能更即時一點,
因此可以在該 Query 的左下角「Refresh Schedule」,調整自動更新時間
可以設定成每幾分鐘,或是定時。

不過這裡就不像 cronjob 可以設定的非常細緻,
也無法精準到秒數 (雖然 Alert 的 Rearm 的單位是秒數 = = ‘’’ )

使用案例

公司雖然還沒有使用到 Alert 機制,
不過目前我們常使用到的 Redash 功能如果使用到 Alert 會方便許多:

  • 營業額偵測:可以設定每日/每月目標,達標時用 Alert 通知
  • 監測系統:可以設定只要有一台機器 offline 或有異常狀況(eg. 網路斷線、記憶體滿載),用 Alert 通知

另外,因為 Alert 資料只能追蹤某一欄的第一列值,
以此例來說是第一欄第一列,也就是是原本為 11 的那個值
換句話說,更改其他欄列的資料,都不會觸發 Alert。

對營業額偵測來說,只要 select sum 該日或該月的業績就可以達成 Alert,
但在監測系統上,同時要掌控多台機器,要能追蹤多個欄位,
可以用 SQL 去 把所有希望偵測的欄位,
用 邏輯值(OR/AND/NOT) 或 CASE 串起,最後得到布林值或是某數值,
再依此去設定對應的 Alert 條件。

題外話

本來把 Reference設為一個極小值
eg. 營業額偵測的話 就是=1 (不太可能有一天沒有任何營收)
然後把 Rearm seconds 設成一天的秒數,配合 一天一次的 Schedule,
就等於達到每日資料的 report 機制,直接收信就好,連 Redash 都不用開。

但 Redash 的信件 Template 似乎沒有其他介面可以修改,只能去底層改 code,讓標題可以顯示 偵測的 value 或是內容為詳細的資料(目前只有 status 跟 alert_name),所以暫時擱置不打算實作。

此為系列文章,傳送門在此

--

--