追蹤 AWS SES 開信率及點擊率 part2— 使用 Kibana

Luyo
verybuy-dev
Published in
13 min readAug 18, 2017

--

接續上篇 追蹤 AWS SES 開信率及點擊率 part1 — 使用 CloudWatch 提到,請非開發人員使用 CloudWatch 看數據是我比較不傾向的做法,因為實在很不想設定 IAM。

本篇則是實作 SES events — Kinesis Firehose — Kibana,讓非開發人員也可以隨時方便觀看 SES 信件狀態的統計圖表,雖然設定上會複雜許多,但個人覺得實用度也是高上很多喔。

本文流程大致上會分成下面幾個部分:

  1. 開啟 SES — Configuration Set — Firehose Destination 新增流程
  2. 開啟 Kinesis Firehose — Delivery Stream 新增流程
  3. 開啟並完成 Elasticsearch Service — Domain 新增流程
  4. 完成 Kinesis Firehose — Delivery Stream 新增流程
  5. 完成 SES — Configuration Set — Firehose Destination 新增流程
  6. 開啟 Kibana 觀看統計圖表

以上看起來是不是很像在鬼打牆。其實簡單地說就是:

  1. 設定 A 到一半的時候要先去設定 B
  2. 設定 B 到一半的時候要先去設定 C
  3. 設定好 C 之後回去完成 B
  4. 設定好 B 之後回去完成 A

如果你對 AWS 還算熟的話,這種事大概是已經習以為常了吧 (苦笑)。

參考文件如下:

  1. Monitoring Your Amazon SES Sending Activity
  2. Introducing Sending Metrics

1. 開啟 SES — Configuration Set — Firehose Destination 新增流程

進入 SES console,上一篇 part1 我們新增了一組 Configuration Set,這裡直接用同一組就可以了。

NOTE:如果你沒有做過 part1 的設定,那麼只要做 part1 中的圖 1 到圖 3 的動作,然後跳到 part1 的第二章「修改 SES API 程式碼」,更新完程式碼之後就可以接軌到這邊了。

按一下 Add Destination 下拉選單,選擇 Firehose

圖 1

名稱可自訂,我填的是 SesEvents-To-Firehose。接著勾選欲追蹤的事件,目前共 7 種,各事件的說明請見 part1參考文件 1

然後 Stream 下拉選單請選擇 Create a new stream

圖 2

按下去之後會自動開一個新分頁,連結到 Kinesis Firehose 的 Delivery Stream 新增流程。

2. 開啟 Kinesis Firehose — Delivery Stream 新增流程

分頁開啟後首先要輸入 Delivery stream name,這邊我用跟前面同樣的名稱叫 SesEvents-To-Firehose

圖 3

再來是設定選擇要不要透過 Lambda function 轉換資料格式,目前沒這個需求,選擇 Disabled 然後按 Next

圖 4

接下來選擇 destination 的類型為 Amazon Elasticsearch Service:

圖 5

頁面往下拉之後會要我們填 Elasticsearch Service 的 Domain,但是現在還沒沒有這個東西,所以我們只好另開一個視窗,先來新增這個 Elasticsearch Service 的 Domain。

3. 開啟並成完 Elasticsearch Service — Domain 新增流程

打開 Elasticsearch Service console 之後,記得先確認是不是和剛剛新增 Firehose 是在同一個 Region。確認好後按下 Create a new domain:

圖 6

接著輸入 Elasticsearch domain name,我輸入的是 es-for-marketing,版本選目前最新的 5.3:

圖 7

再來是針對 Node 的設定,這邊的 Instance count 及 Instance type 我是選最便宜的 1 台 t2.small,這部分若之後覺得不穩或跑太慢可以再調整。

圖 8

接下來的幾個設定我都沒改,直接用預設值:

圖 9

按下 Next 後,再來要設定誰可以存取這個 domain 的資料。因為我的考量是要是公司內部 IP 都可以存取 (潛在風險請見註 2),所以選 Allow access to the domain from specific IP(s) 這個選項:

圖 10

在對話框裡填入允許存取的 IP,若有多組的話以逗號分隔 (也接受 netmask 的寫法):

圖 11

按下 OK 後會長這樣:

圖 12

最後的總覽頁沒問題的話按下 Confirm 就完成囉:

圖 13

新增完成後 Domain status 會顯示為 “Loading” 狀態:

圖 14

因為 Elasticsearch Service 新增 Domain 的時間比較長,大概要等個十分鐘。先不要關閉這個分頁,我們可以先回到之前新增 Kinesis Firehose Delivery Stream 的分頁,繼續把它跑完。

4. 完成 Kinesis Firehose — Delivery Stream 新增流程

請按下 Domain 右邊的重新整理圖示,應該就會出現剛剛新增的 Elasticsearch Service 的 Domain 了:

圖 15

選好後,在 IndexType 我都輸入 “ses”。Index rotation 具體有什麼差別我也不是很清楚,就先選 Every dayType 的部分其實我不知道有什麼更實用的設定方法,這方面希望請有經驗的朋友們能夠給予指教。

圖 16

再來是 S3 backup 的設定,可以選擇只有在 request 失敗的時候才做 backup,或是所有記錄都做 backup,為了節省資源我是選 Failed records only。然後 Backup S3 bucket 我是按 Create new 開一個新的。

圖 17

請注意 Backup S3 butcket prefix 這個欄位,我一開始如上圖填入 ses,但結果 S3 的 log 資料夾名稱會長這樣:

圖 18

seselasticsearch-failed 黏在一起了,所以我後來就把它改成 ses-,請大家不要重蹈我的覆轍。

點擊圖 17 的 Next 到下個步驟,要設定 Elasticsearch buffer 選項。因為 Firehose 並不會每次一有資料進來就馬上送去 Elasticsearch,而是當 buffer 條件成立時才會觸發遞送資料的動作。

這邊預設的條件是 Buffer size = 5 MB、Buffer interval = 300,也就是當 buffer size 累積達到 5MB 離上次遞送資料的時間達 300 秒,兩者之一成立時就會再次遞送資料到 Elasticsearch。這部分我直接用預設值,如果你想要讓更新頻率更高或更低的話就請自己修改設定。

圖 19

再來是 S3 壓縮及加密選項及 Error logging 選項,對於這些我沒特別想法,也都是直接用預設值:

圖 20

頁面再往下要設定 IAM role,按下 Create New, or Choose 按鈕:

圖 21

會跳出一個新分頁,按照預設的選項送出就可以了:

圖 22

按下 Allow 後會回到原來的分頁並自動填入剛剛設定的 IAM role:

圖 23

按下 Next,進入 review 畫面:

圖 24

沒問題的話按下 Create delivery stream 按鈕就完成新增流程囉:

圖 25

這個畫面要等它跑一下下之後,右邊的 Status 才會變成 “ACTIVE”。我們可以先回到最一開始的 SES Configuration Set 的新增 Firehose Destination 對話框來完成最後一道手續。

5. 完成 SES — Configuration Set — Firehose Destination 新增流程

回到 Firehose Destination 對話框這邊,按下 Stream 右邊的重新整理圖示,應該就會看到剛剛新增完成的 delivery stream — SesEvents-To-Firehose

圖 26

如果沒有出現的話,就把整個 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

圖 27

都填好之後就按下 Save 按鈕,就算是大功告成啦!

如果你覺得沒必要 Firehose 跟 CloudWatch 都啟用的話,可以回去把 CloudWatch destination 的設定打開 (按右邊的鉛筆圖示),將 Enabled 這個方格取消勾選即可,設定好的結果如下圖:

圖 28

當然送一份資料到 CloudWatch 也是有它的好處,例如你可以針對特定的 Metrics 去設定 Alarm,這部分就看個人需求囉。

6. 開啟 Kibana 觀看統計圖表

最後就等 Elasticsearch Service 什麼時候會跑完了。當它跑完的時候 Domain status 會變成 “Active”,然後 Endpoint Kibana 的連結都會出現:

圖 29

點開 Kibana 的連結,進去後會要你先設定一組 index pattern。因為我們剛剛在圖 16 的 Index 欄位填入的是 ses,所以這邊就要輸入 ses-* ,若是設定別的名字,請自己照這個規則去修改。

Time-field name 欄位請選擇 mail.timestamp,然後按下 Create 按鈕:

圖 30

注意,要等有資料進來的時候 Time-field name 這個下拉選單才會有東西喔,如果你在圖 19 的 Buffer interval 也是設定 300 秒的話表示你可能要等個五分鐘資料才會進來,先去吃個零食吧。

圖 30 新增完成後,請點擊左側選單的 Visualize,然後按搜尋框旁邊的 “+” 按鈕:

圖 31

選擇 Data table:

圖 32

點選 index pattern 名稱:

圖 33

選擇 Split Rows:

圖 34

再來是 Visualization 的設定,可照以下步驟來設定:

  1. Aggregation 選擇 Terms (以辭彙統計)
  2. Field 選擇 eventType.keyword,這個欄位的值就是事件的名稱
  3. Size 填入 7,因為最多就只有 7 種事件
  4. 按下執行鈕
圖 35

結果會類似下圖,統計出每個事件發生的次數。如果你很確定應該要有資料,畫面卻跟你說沒資料的時候,去更改選擇右上角的時間就對了。

圖 36

到這邊我們終於用 Kibana 顯示出行銷部門可以拿來計算開信率和點擊率的數字了!

你可能會問,為了這幾個破數字,做這麼多,值得嗎!?

我自己是覺得很值得啦,因為一來,你只要把設定儲存起來然後丟一個連結過去,他們就可以看到這些破數字了;二來,我個人對 Kibana 的評價還不錯,希望別的部門也有機會可以使用到好工具。

儲存設定的方法很簡單,按畫面上方的 Save 然後輸入名稱:

圖 37

儲存好之後再按下畫面上方的 Share,會出現好幾個 share 的方式,選擇左下角這組按 Copy

圖 38

這樣別人以後只要一打開這個連結就會出現圖 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 來處理,但這部份我也沒實作過,只能請大家自己摸索啦。

--

--