iT邦幫忙

2021 iThome 鐵人賽

DAY 26
1
AI & Data

Data on AWS - 實作建立 Data Analytics Pipeline系列 第 26

【Day 26】 實作 - 於 AWS QuickSight 建立 Parameters 以及 Filter 設定

Data Analytics Pipeline 如下圖所示:
目前我們已經成功將資料源 - WAF Log 透過 AWS Kinesis Data Firehose 服務將 Log 儲存到 AWS S3 中,接著我們今天會開始進行 Data Analytics & Visualization 階段,那部份流程我們先前也實作很多次,今天我們會著重在 Quicksights 中的 Parameters 以及 Filter 的功能介紹
https://ithelp.ithome.com.tw/upload/images/20211010/20131073XRRLgDSVeL.png
那我們就開始吧 GOGO


步驟一、建立 WAF Log 資料表 [ 1 ]

在讓 QuickSight 透過 Athena 讀取資料前,需要先建立資料表,而 AWS 官方已經有提供 SQL 語法供我們手動於 Athena 建立資料表[1],或者大家也可以參考 【Day 18】 建立一個 AWS Glue Crawler 自動建立 WAF 資料表囉~

CREATE EXTERNAL TABLE `waf_logs`(
  `timestamp` bigint,
  `formatversion` int,
  `webaclid` string,
  `terminatingruleid` string,
  `terminatingruletype` string,
  `action` string,
  `terminatingrulematchdetails` array<
                                  struct<
                                    conditiontype:string,
                                    location:string,
                                    matcheddata:array<string>
                                        >
                                     >,
  `httpsourcename` string,
  `httpsourceid` string,
  `rulegrouplist` array<
                     struct<
                        rulegroupid:string,
                        terminatingrule:struct<
                           ruleid:string,
                           action:string,
                           rulematchdetails:string
                                               >,
                        nonterminatingmatchingrules:array<
                                                       struct<
                                                          ruleid:string,
                                                          action:string,
                                                          rulematchdetails:array<
                                                               struct<
                                                                  conditiontype:string,
                                                                  location:string,
                                                                  matcheddata:array<string>
                                                                     >
                                                                  >
                                                               >
                                                            >,
                        excludedrules:array<
                                         struct<
                                            ruleid:string,
                                            exclusiontype:string
                                               >
                                            >
                           >
                       >,
  `ratebasedrulelist` array<
                        struct<
                          ratebasedruleid:string,
                          limitkey:string,
                          maxrateallowed:int
                              >
                           >,
  `nonterminatingmatchingrules` array<
                                  struct<
                                    ruleid:string,
                                    action:string
                                        >
                                     >,
  `requestheadersinserted` string,
  `responsecodesent` string,
  `httprequest` struct<
                      clientip:string,
                      country:string,
                      headers:array<
                                struct<
                                  name:string,
                                  value:string
                                      >
                                   >,
                      uri:string,
                      args:string,
                      httpversion:string,
                      httpmethod:string,
                      requestid:string
                      >,
  `labels` array<
             struct<
               name:string
                   >
                  >
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
 'paths'='action,formatVersion,httpRequest,httpSourceId,httpSourceName,labels,nonTerminatingMatchingRules,rateBasedRuleList,requestHeadersInserted,responseCodeSent,ruleGroupList,terminatingRuleId,terminatingRuleMatchDetails,terminatingRuleType,timestamp,webaclId')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://<<放WAF Log的S3桶子名稱>> /<<資料夾名稱>>/'

故我們搜尋 Athena 服務,並貼上上方程式碼後按 Run
https://ithelp.ithome.com.tw/upload/images/202110 10/20131073BBx155PeMo.jpg


步驟二、於 AWS QuickSight 建立 WAF Log 的 Datasets 以及 Analyses

如何建立 Datasets 以及 Analyses 可以參考【Day 13】、【Day 14】
https://ithelp.ithome.com.tw/upload/images/20211010/201310736CiMguhTOC.png


步驟三、創建一個新的 visual

我這邊想看到在每個時間點針對網站的不同頁面訪問情況,故拉選 stacked bar combo chart:
X axis:date
Group/Color for bars:uri
https://ithelp.ithome.com.tw/upload/images/20211010/20131073BWZmaH4T64.png
好的,那後續隨著資料量的增加,顯示的資料量會開始變得很繁瑣,如果今天我只想看到『 URI 為根目錄(/)的來訪狀況』,那麼我們可以透過建立 Parameters 以及 Filter 來達到動態儀表板的效果,讓使用者透過篩選快速找到他關注的內容


步驟四、點選左側選單的 Parameters 並創建一個 Parameters

我要建立一個 Parameters,讓使用者輸入他想要查詢的 URI 值並將此 URI 值儲存在 Parameters,設定值如下所示:
Name:為此 Parameters 的名字
Data type (Not alterable after creation):為此 Parameters 的欄位格式,那這邊因 URI 是字串,故選 string
Values:此為設定單選還是可以多選,我希望可以同時選取多個 URI 結果,故選 Multiple values
Static multiple default values:此欄為此 Parameters 預設值
接著我們按 Create
https://ithelp.ithome.com.tw/upload/images/20211010/201310739hE3FCVJYv.jpg


步驟五、接著會跳出一個視窗並點選 Control

這裡表示我要在儀表板上建立一個控制器可以讓使用者去選取欲查看的 URI,因此
Display name:自行輸入名稱即可
Style:這邊我選擇下拉式選單,讓使用者可以從選單選取想要的值
Values:那麼下拉式選單要顯示哪些內容呢? 故我選擇 Link to a dataset field 連接並顯示 Dataset 中的 URI 欄位
最後按 Add,就會出現一個 Control 供使用者可以進行選取
https://ithelp.ithome.com.tw/upload/images/20211010/20131073ZblCoCajis.jpg


步驟六、觀察儀錶板的變化

大家就可以看到儀錶板已出現 URI Filter、預設勾選根目錄/,並且可以自由勾選多個選項,但雖然我調整勾選選項,下方的圖形並沒有跟著變動壓,那是因為我們還沒進行 Filter 設定~
https://ithelp.ithome.com.tw/upload/images/20211010/201310730BeZhKH2ML.png


步驟七、以 URI 欄位創建一個 Filter

接著我們點選下方圖表並以 URI 欄位創建一個 Filter
https://ithelp.ithome.com.tw/upload/images/20211010/20131073Ox936QWpJb.jpg


步驟八、Filter 設定

接著編輯此 Filter,Filter type 選 Custom filter、勾選 Use Parameters 並選擇剛剛創建的 Parameter 後,按 Apply
https://ithelp.ithome.com.tw/upload/images/20211010/201310735c875ThWj4.jpg


接著你在試著調整勾選選項,你就會發現下方圖表會依據你的勾選選項顯示相對應的內容也~
https://ithelp.ithome.com.tw/upload/images/20211010/20131073gcmcz18o6d.jpg

那今天已經介紹完 Quicksights 中的 Parameters 以及 Filter 的應用,明天就會進入到我們下一個主題 -『伺服器效能監控 on AWS 』,明天見囉 : D ~

如果有任何指點與建議,也歡迎留言交流,一起漫步在 Data on AWS 中。

參考&相關來源:
[1] 為 AWS WAF 日誌建立資料表
https://docs.aws.amazon.com/zh_tw/athena/latest/ug/waf-logs.html


上一篇
【Day 25】 實作 - 啟用 AWS WAF 日誌
下一篇
【Day 27】 為何要進行伺服器效能監控
系列文
Data on AWS - 實作建立 Data Analytics Pipeline30

尚未有邦友留言

立即登入留言