【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


<<:  Day28 vue.js搜寻栏 分页(pagination)功能

>>:  DAY 28- BIP32- HD wallet

iOS Developer Learning Flutter. Lesson28 打包上架

本来是这麽打算的啦 但翻了一下文件(iOS, Android) 应该是跟以前打包方式差不多 顶多就是...

Day 14: Draft

GOOGLE公云使用案例 大纲 Introduction(Global view) How to c...

【Day3】不可貌相的JS变数型别:基本型别

俗话说:「人不可貌相,海水不可斗量。」就像我们看到郭靖傻不楞登,怎麽知道他武功高强。杨康外表英俊,...

【Day 29】Google Apps Script - 延伸篇 - Google sites 协作平台与 Charts Service 图表绘制服务

Google sites 协作平台可以用在小组专案管理,使用 Google Apps Script...

许多有趣的变数!如何使用 Postman 尝试 Nutanix 的 API

那些具有使用API经验的人将听说过并熟悉无处不在的API测试和开发工具。但是,Nutanix De...