本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Amazon VPC 流程日誌建立表格並進行查詢
下列程序會為 Amazon VPC 流程日誌建立 Amazon VPC 表格。當您使用自訂格式建立流程日誌時,需要建立資料表,其欄位符合您在建立流程日誌時指定的欄位,而順序與您指定它們的順序相同。
若要為 Amazon VPC 流程日誌建立 Athena 表
-
依照考量與限制本節中的準則,在 Athena 主控台查詢編輯器中輸入類似下列的DDL陳述式。範例陳述式會建立一個資料表,其中包含 Amazon VPC 流程日誌版本 2 到 5 的資料行,如 Flow 記錄記錄中所述。如果您使用不同組的資料欄或資料欄順序,請據此修改陳述式。
CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, region string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY (`date` date) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://amzn-s3-demo-bucket/
prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/' TBLPROPERTIES ("skip.header.line.count"="1");請注意以下重點:
-
查詢會指定
ROW FORMAT DELIMITED
並省略指定 SerDe。這表示該查詢會使用 懶惰簡單 SerDe 的 CSVTSV,和自定義分隔的文件。在這個查詢中,欄位以空格結尾。 -
PARTITIONED BY
子句使用date
類型。這樣就可以在查詢中使用數學運算子來選取特定日期之前或之後的項目。注意
因為
date
是DDL陳述式中的保留關鍵字,因此會以回勾字元逸出。如需詳細資訊,請參閱在查詢中逸出保留關鍵字。 -
對於具有不同自訂格式的VPC流程記錄,請修改欄位以符合您在建立流程記錄時指定的欄位。
-
-
修改
LOCATION 's3://amzn-s3-demo-bucket/
來指向包含日誌資料的 Amazon S3 儲存貯體。prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/' -
在 Athena 主控台中執行查詢。查詢完成之後,Athena 會註冊
vpc_flow_logs
資料表,讓其中的資料可供您發出查詢。 -
建立能夠讀取資料的分割區,如下列查詢範例所示。這個查詢針對指定的日期建立單一分割區。視需要將預留位置換成日期和位置。
注意
這個查詢針對您指定的日期,只建立單一分割區。若要自動執行程序,請使用指令碼以執行此查詢和依此針對
year/month/day
建立分割區,或使用指定分割區投影的CREATE TABLE
陳述式。ALTER TABLE vpc_flow_logs ADD PARTITION (`date`='
YYYY-MM-dd
') LOCATION 's3://amzn-s3-demo-bucket/prefix
/AWSLogs/{account_id}
/vpcflowlogs/{region_code}
/YYYY
/MM
/dd
';
vpc_flow_logs 資料表的查詢範例
使用 Athena 主控台中的查詢編輯器,在您建立的資料表上執行SQL陳述式。您可以儲存查詢、檢視先前的查詢,或以CSV格式下載查詢結果。在下列範例中,將 vpc_flow_logs
替換為您的資料表名稱。根據自己的需求修改欄值和其他變數。
下列範例查詢會列出指定日期的最多 100 個流程日誌。
SELECT * FROM vpc_flow_logs WHERE date = DATE('2020-05-04') LIMIT 100;
下列查詢會列出所有已拒絕的TCP連線,並使用新建立的日期分割區資料行date
,從中擷取這些事件發生的星期幾。
SELECT day_of_week(date) AS day, date, interface_id, srcaddr, action, protocol FROM vpc_flow_logs WHERE action = 'REJECT' AND protocol = 6 LIMIT 100;
若要查看哪一個伺服器接收的HTTPS要求數目最多,請使用下列查詢。它會計算連接HTTPS埠 443 上接收到的封包數量、依目標 IP 位址將它們分組,並傳回上週的前 10 個封包。
SELECT SUM(packets) AS packetcount, dstaddr FROM vpc_flow_logs WHERE dstport = 443 AND date > current_date - interval '7' day GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10;