[Data] 將報表截圖丟到 Slack 上(上篇)
我承認一開始我覺得這是笨需求…
我相信做報表的同事一定都會聽過這樣的需求:
幫我把報表每天早上寄到信箱/ slack
我一開始真的覺得這有點無聊,既然都做 dashboard 了,幹嘛不自己每天重整頁面就好…截圖再傳超級麻煩的。但總之需求在那邊,也一直都有,所以還是得做。
第一代 selenium 截圖
selenium(https://www.selenium.dev/),應該沒啥好介紹的,就是一個 Webdriver,可以模仿使用者操作瀏覽器點擊按鍵,當然也包括截圖。所以概念上很簡單:
- 用 selenium 啟動 webdriver
- 使用 webdriver 連線到 superset(https://superset.apache.org/)
- 截圖(使用 driver 的 screenshot)
- 把圖片傳到 slack 上
坦白說每個步驟都很單純,最麻煩的就是連線到 superset 這段。由於我們是透過 google oauth 來管理 superset,webdriver 就必須模仿人類輸入帳號密碼。偏偏我們一開始用的公用帳號太多人在用,google 越來越常要求我們輸入認證碼、電話認證、最近甚至到了強置換密碼的程度,在 headless 的情況下又很難知道當下顯示的畫面,簡直不堪其擾。加上我們的爬蟲 server 有時候會換 IP,更加深 Google 認為我們是壞蛋的機率,後來就決定放棄這種方法。
第二代 BI 內建傳送機制
因為當時的 superset 沒有內建傳送圖表的功能,所以再 survey 下一代 BI 的時候都會先看有沒有這樣的功能。其中一個是 metabase:
Metabase
Metabase 在系統界面上就能設定 Slack 的整合,哪張報表要什麼時候發送也很好設定:
送到 Slack 上就會長這樣(p.s. 這是網路抓的圖,不是我們家的資料)
- PROS
- 好設定
- 使用簡單
- CONS
- 不能傳 Dashboard
- 不能設定 Threshold
Redash
Readsh 有官方的 slack 機器人可以設定: https://redash.io/slack/。他主要功能就是當把 redash 連結貼到 slack 上後可以 自動 render 圖片出來。
BUT,如過配合 slack 的 remind 做自動發送時,他就不會自動 render 了…orz。
補充:redash slack alert
設定上也很簡單,直接在管理介面就可以找到地方塞 webhook。不過 redash 上每個 destination 只能設定一個 slack 頻道,如果要多個頻道就是設定多個 destination。
之後就可以設定 Alert,當設定報表第一個 row 的數值超過 threshold 後就會自動發送通知。
- PROS:
- 好設定
- 自動 render 圖片真的滿方便的
- 我們現在滿依賴 alert 功能來監控資料
- CONS:
- 沒有內建自動排程
- 一樣不會 render dasboard
第三代 BI 內建 selenuim 爬蟲
可能全世界的老闆都會希望 BI 可以截圖寄到信箱,所以有人提出了這個 PR:https://github.com/apache/incubator-superset/pull/9810
這讓 superset 內建 selenium 爬蟲自己截圖寄到 slack … 細節待續