查詢NCSA記錄檔格式 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢NCSA記錄檔格式

IIS也會使用NCSA記錄格式,其中包含固定數目的ASCII文字格式欄位,並以空格分隔。該結構類似於 Apache 存取日誌所用的一般日誌格式。一NCSA般記錄檔資料格式的欄位包括用戶端 IP 位址、用戶端 ID (不通常使用)、網域\ 使用者 ID、收到的要求時間戳記、用戶端要求文字、伺服器狀態碼,以及傳回給用戶端的物件大小。

下列範例會顯示一NCSA般記錄格式的資料,如所述IIS。

198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232 198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165 198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287 198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230 198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30 198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608 198.51.100.11 - ExampleCorp\Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344

在 Athena 中建立IISNCSA日誌資料表

對於 CREATE TABLE 陳述式,您可以使用 GROK SerDe 和類似於 Apache Web 伺服器日誌模式的 grok 模式。與 Apache 日誌不同,grok 模式將 %{DATA:user_id} (而不是 %{USERNAME:user_id}) 用於第三個欄位,以考慮反斜線在 domain\user_id 中的存在。如需有關使用 Grok 的詳細資訊 SerDe,請參閱開發人員指南中的撰寫 grok 自訂分類器。AWS Glue

在 Athena 中建立用於IISNCSA網頁伺服器記錄的表格
  1. https://console.aws.amazon.com/athena/ 中開啟 Athena 主控台。

  2. 將下列DDL陳述式貼到 Athena 查詢編輯器中。修改中的值LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/'以指向 Amazon S3 中的IISNCSA日誌。

    CREATE EXTERNAL TABLE iis_ncsa_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{DATA:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/';
  3. 在 Athena 主控台中執行查詢來註冊 iis_ncsa_logs 資料表。查詢完成時,您就可以從 Athena 查詢日誌了。

範例選取IISNCSA記錄檔查詢

範例 – 篩選 404 錯誤

下列查詢範例會從 iis_ncsa_logs 資料表選取請求接收的時間、用戶端請求的文字,以及伺服器狀態碼。WHERE條款過濾器HTTP狀態代碼404(找不到頁面)。

SELECT request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '404'

下圖顯示 Athena 查詢編輯器中查詢的結果。

查詢 Athena 的IISNCSA記錄檔中是否有HTTP404項目。
範例 – 篩選來自特定網域的成功請求

下列查詢範例會選取使用者 ID、請求接收時間、用戶端請求的文字,以及 iis_ncsa_logs 資料表中的伺服器狀態碼。此子WHERE句會篩選來自AnyCompany網域中使用者的HTTP狀態碼 200 (成功) 的要求。

SELECT user_id, request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'

下圖顯示 Athena 查詢編輯器中查詢的結果。

查詢 Athena 的IISNCSA記錄檔中是否有HTTP200項目。