追蹤 AWS SES 開信率及點擊率 part2— 使用 Kibana
接續上篇 追蹤 AWS SES 開信率及點擊率 part1 — 使用 CloudWatch 提到,請非開發人員使用 CloudWatch 看數據是我比較不傾向的做法,因為實在很不想設定 IAM。
本篇則是實作 SES events — Kinesis Firehose — Kibana,讓非開發人員也可以隨時方便觀看 SES 信件狀態的統計圖表,雖然設定上會複雜許多,但個人覺得實用度也是高上很多喔。
本文流程大致上會分成下面幾個部分:
- 開啟 SES — Configuration Set — Firehose Destination 新增流程
- 開啟 Kinesis Firehose — Delivery Stream 新增流程
- 開啟並完成 Elasticsearch Service — Domain 新增流程
- 完成 Kinesis Firehose — Delivery Stream 新增流程
- 完成 SES — Configuration Set — Firehose Destination 新增流程
- 開啟 Kibana 觀看統計圖表
以上看起來是不是很像在鬼打牆。其實簡單地說就是:
- 設定 A 到一半的時候要先去設定 B
- 設定 B 到一半的時候要先去設定 C
- 設定好 C 之後回去完成 B
- 設定好 B 之後回去完成 A
如果你對 AWS 還算熟的話,這種事大概是已經習以為常了吧 (苦笑)。
參考文件如下:
1. 開啟 SES — Configuration Set — Firehose Destination 新增流程
進入 SES console,上一篇 part1 我們新增了一組 Configuration Set,這裡直接用同一組就可以了。
NOTE:如果你沒有做過 part1 的設定,那麼只要做 part1 中的圖 1 到圖 3 的動作,然後跳到 part1 的第二章「修改 SES API 程式碼」,更新完程式碼之後就可以接軌到這邊了。
按一下 Add Destination 下拉選單,選擇 Firehose:
名稱可自訂,我填的是 SesEvents-To-Firehose。接著勾選欲追蹤的事件,目前共 7 種,各事件的說明請見 part1 或參考文件 1。
然後 Stream 下拉選單請選擇 Create a new stream:
按下去之後會自動開一個新分頁,連結到 Kinesis Firehose 的 Delivery Stream 新增流程。
2. 開啟 Kinesis Firehose — Delivery Stream 新增流程
分頁開啟後首先要輸入 Delivery stream name,這邊我用跟前面同樣的名稱叫 SesEvents-To-Firehose:
再來是設定選擇要不要透過 Lambda function 轉換資料格式,目前沒這個需求,選擇 Disabled 然後按 Next:
接下來選擇 destination 的類型為 Amazon Elasticsearch Service:
頁面往下拉之後會要我們填 Elasticsearch Service 的 Domain,但是現在還沒沒有這個東西,所以我們只好另開一個視窗,先來新增這個 Elasticsearch Service 的 Domain。
3. 開啟並成完 Elasticsearch Service — Domain 新增流程
打開 Elasticsearch Service console 之後,記得先確認是不是和剛剛新增 Firehose 是在同一個 Region。確認好後按下 Create a new domain:
接著輸入 Elasticsearch domain name,我輸入的是 es-for-marketing,版本選目前最新的 5.3:
再來是針對 Node 的設定,這邊的 Instance count 及 Instance type 我是選最便宜的 1 台 t2.small,這部分若之後覺得不穩或跑太慢可以再調整。
接下來的幾個設定我都沒改,直接用預設值:
按下 Next 後,再來要設定誰可以存取這個 domain 的資料。因為我的考量是要是公司內部 IP 都可以存取 (潛在風險請見註 2),所以選 Allow access to the domain from specific IP(s) 這個選項:
在對話框裡填入允許存取的 IP,若有多組的話以逗號分隔 (也接受 netmask 的寫法):
按下 OK 後會長這樣:
最後的總覽頁沒問題的話按下 Confirm 就完成囉:
新增完成後 Domain status 會顯示為 “Loading” 狀態:
因為 Elasticsearch Service 新增 Domain 的時間比較長,大概要等個十分鐘。先不要關閉這個分頁,我們可以先回到之前新增 Kinesis Firehose Delivery Stream 的分頁,繼續把它跑完。
4. 完成 Kinesis Firehose — Delivery Stream 新增流程
請按下 Domain 右邊的重新整理圖示,應該就會出現剛剛新增的 Elasticsearch Service 的 Domain 了:
選好後,在 Index 及 Type 我都輸入 “ses”。Index rotation 具體有什麼差別我也不是很清楚,就先選 Every day;Type 的部分其實我不知道有什麼更實用的設定方法,這方面希望請有經驗的朋友們能夠給予指教。
再來是 S3 backup 的設定,可以選擇只有在 request 失敗的時候才做 backup,或是所有記錄都做 backup,為了節省資源我是選 Failed records only。然後 Backup S3 bucket 我是按 Create new 開一個新的。
請注意 Backup S3 butcket prefix 這個欄位,我一開始如上圖填入 ses,但結果 S3 的 log 資料夾名稱會長這樣:
ses 跟 elasticsearch-failed 黏在一起了,所以我後來就把它改成 ses-,請大家不要重蹈我的覆轍。
點擊圖 17 的 Next 到下個步驟,要設定 Elasticsearch buffer 選項。因為 Firehose 並不會每次一有資料進來就馬上送去 Elasticsearch,而是當 buffer 條件成立時才會觸發遞送資料的動作。
這邊預設的條件是 Buffer size = 5 MB、Buffer interval = 300,也就是當 buffer size 累積達到 5MB 或 離上次遞送資料的時間達 300 秒,兩者之一成立時就會再次遞送資料到 Elasticsearch。這部分我直接用預設值,如果你想要讓更新頻率更高或更低的話就請自己修改設定。
再來是 S3 壓縮及加密選項及 Error logging 選項,對於這些我沒特別想法,也都是直接用預設值:
頁面再往下要設定 IAM role,按下 Create New, or Choose 按鈕:
會跳出一個新分頁,按照預設的選項送出就可以了:
按下 Allow 後會回到原來的分頁並自動填入剛剛設定的 IAM role:
按下 Next,進入 review 畫面:
沒問題的話按下 Create delivery stream 按鈕就完成新增流程囉:
這個畫面要等它跑一下下之後,右邊的 Status 才會變成 “ACTIVE”。我們可以先回到最一開始的 SES Configuration Set 的新增 Firehose Destination 對話框來完成最後一道手續。
5. 完成 SES — Configuration Set — Firehose Destination 新增流程
回到 Firehose Destination 對話框這邊,按下 Stream 右邊的重新整理圖示,應該就會看到剛剛新增完成的 delivery stream — SesEvents-To-Firehose:
如果沒有出現的話,就把整個 SES console 的頁面重新整理,再重新做一次圖 1 的動作,應該會更新了。
選好後再設定 IAM role。注意這個 IAM role 跟前面 Firehose 的 IAM role 是不一樣的,剛剛是 Firehose 要送資料給 Elasticsearch Service 的 role,這邊是 SES 要送資料給 Firehose 的 role,請不要使用同一個喔。
如果第一次設定的話就不用想太多,選 Let SES make a new role 就對了,如果不知道 role 要叫什麼名字,可以參考我的設定名字 SesEvents-To-Firehose:
都填好之後就按下 Save 按鈕,就算是大功告成啦!
如果你覺得沒必要 Firehose 跟 CloudWatch 都啟用的話,可以回去把 CloudWatch destination 的設定打開 (按右邊的鉛筆圖示),將 Enabled 這個方格取消勾選即可,設定好的結果如下圖:
當然送一份資料到 CloudWatch 也是有它的好處,例如你可以針對特定的 Metrics 去設定 Alarm,這部分就看個人需求囉。
6. 開啟 Kibana 觀看統計圖表
最後就等 Elasticsearch Service 什麼時候會跑完了。當它跑完的時候 Domain status 會變成 “Active”,然後 Endpoint 跟 Kibana 的連結都會出現:
點開 Kibana 的連結,進去後會要你先設定一組 index pattern。因為我們剛剛在圖 16 的 Index 欄位填入的是 ses,所以這邊就要輸入 ses-* ,若是設定別的名字,請自己照這個規則去修改。
Time-field name 欄位請選擇 mail.timestamp,然後按下 Create 按鈕:
注意,要等有資料進來的時候 Time-field name 這個下拉選單才會有東西喔,如果你在圖 19 的 Buffer interval 也是設定 300 秒的話表示你可能要等個五分鐘資料才會進來,先去吃個零食吧。
圖 30 新增完成後,請點擊左側選單的 Visualize,然後按搜尋框旁邊的 “+” 按鈕:
選擇 Data table:
點選 index pattern 名稱:
選擇 Split Rows:
再來是 Visualization 的設定,可照以下步驟來設定:
- Aggregation 選擇 Terms (以辭彙統計)
- Field 選擇 eventType.keyword,這個欄位的值就是事件的名稱
- Size 填入 7,因為最多就只有 7 種事件
- 按下執行鈕
結果會類似下圖,統計出每個事件發生的次數。如果你很確定應該要有資料,畫面卻跟你說沒資料的時候,去更改選擇右上角的時間就對了。
到這邊我們終於用 Kibana 顯示出行銷部門可以拿來計算開信率和點擊率的數字了!
你可能會問,為了這幾個破數字,做這麼多,值得嗎!?
我自己是覺得很值得啦,因為一來,你只要把設定儲存起來然後丟一個連結過去,他們就可以看到這些破數字了;二來,我個人對 Kibana 的評價還不錯,希望別的部門也有機會可以使用到好工具。
儲存設定的方法很簡單,按畫面上方的 Save 然後輸入名稱:
儲存好之後再按下畫面上方的 Share,會出現好幾個 share 的方式,選擇左下角這組按 Copy:
這樣別人以後只要一打開這個連結就會出現圖 36 的統計數字了;被儲存起來的設定也會顯示在選單畫面,方便大家直接點選。
當然 Kibana 絕對不是只有呈現這幾個破數字這麼簡單,只要你的資料夠齊全,它可以在一瞬間幫你生出各式各樣的圖表,用起來非常爽;但是相對地,它的學習成本也非常高。因此 Kibana 的使用真的只能在此點到為止,如果要再講下去就真的沒完沒了,只能請沒用過的人先自行研究囉。
以上,希望這篇文章可以幫助到大家!
註 1:進到 Kibana 裡的資料裡有一個欄位叫做 click.link.keyword,它記錄的是信件內被點擊的連結,若利用 Kibana 進一步對這些連結做統計,也許對於行銷部門來說會是很實用的資訊喔。
註 2:本文中 Elasticsearch Service domain 的權限是鎖公司 IP,這樣的潛在風險是:公司任何知道 Kibana 網址且知道怎麼用的人都可以進去把使用者的 Email dump 出來。我能想到的解法有 3 個:(1) 設定 IAM (2) 調整 router 開放特定內網 IP (3) 圖 4 的 Record transformation 選擇 Enabled,利用 Lambda function 來處理,但這部份我也沒實作過,只能請大家自己摸索啦。