查询存储在中的Internet信息服务器(IIS)日志 Amazon S3 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

查询存储在中的Internet信息服务器(IIS)日志 Amazon S3

您可以使用 Amazon Athena 如何查询MicrosoftInternetInformationServices(IIS)WebServer日志 Amazon S3 账户。虽然IIS使用 多样性 对于日志文件格式,本主题显示如何创建表格框架以查询W3C扩展和IIS日志文件格式日志 Athena.

由于W3C扩展和IIS日志文件格式使用单个字符分隔符(空格和逗号),且不包含引号中的值,您可以使用 拉珀斯塞尔德 创建 Athena 表格。

W3C扩展日志文件格式

TheThethe W3C扩展 日志文件数据格式有空格分隔字段。W3C扩展日志中显示的字段由选择要包含的日志字段的Web服务器管理员确定。以下示例日志数据包含字段 date, timec-ips-ipcs-methodcs-uri-stemsc-statussc-bytescs-bytestime-taken,和 cs-version.

2020-01-19 22:48:39 203.0.113.5 198.51.100.2 GET /default.html 200 540 524 157 HTTP/1.0 2020-01-19 22:49:40 203.0.113.10 198.51.100.12 GET /index.html 200 420 324 164 HTTP/1.0 2020-01-19 22:50:12 203.0.113.12 198.51.100.4 GET /image.gif 200 324 320 358 HTTP/1.0 2020-01-19 22:51:44 203.0.113.15 198.51.100.16 GET /faq.html 200 330 324 288 HTTP/1.0

创建表格 Athena 适用于W3C扩展日志

在查询W3C扩展日志之前,必须创建表架构,以便 Athena 可以读取日志数据。

创建表格 Athena 适用于W3C扩展日志

  1. https://console.amazonaws.cn/athena/ 打开 Athena 控制台。

  2. 将DDL声明粘贴到 Athena 控制台,注意以下几点:

    1. 添加或删除示例中的列,对应于要查询的日志中的字段。

    2. W3C扩展日志文件格式中的列名称包含连字符(-)。但是,根据 Athena 命名约定,示例 CREATE TABLE 声明将其替换为下划线(_)。

    3. 要指定空格分隔符,请使用 FIELDS TERMINATED BY ' '.

    4. 修改值 LOCATION 's3://bucket-name/w3c-log-folder/' 要指向您的W3C扩展日志 Amazon S3.

    CREATE EXTERNAL TABLE `iis_w3c_logs`( date_col string, time_col string, c_ip string, s_ip string, cs_method string, cs_uri_stem string, sc_status string, sc_bytes string, cs_bytes string, time_taken string, cs_version string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/w3c-log-folder/'
  3. 在 Athena 控制台中运行查询以注册 iis_w3c_logs 表。查询完成后,日志就会准备好查询 Athena.

示例W3C扩展日志选择查询

以下示例查询选择表格的日期、时间、请求目标以及所需的时间 iis_w3c_logs。TheThethe WHERE HTTP方法为HTTP方法的条目筛选器 GET HTTP状态代码为 200 (成功)。

SELECT date_col, time_col, cs_uri_stem, time_taken FROM iis_w3c_logs WHERE cs_method = 'GET' AND sc_status = '200'

下图显示了查询的结果 Athena 查询编辑器。


                    示例查询结果 Athena W3C扩展日志文件 Amazon S3.

IIS日志文件格式

与W3C扩展格式不同, IIS日志文件格式 有一组固定字段,包括逗号作为分隔符。LazySimpleserde将逗号作为分隔符和逗号之后的空白处理。

以下示例显示了IIS日志文件格式的示例数据。

203.0.113.15, -, 2020-02-24, 22:48:38, W3SVC2, SERVER5, 198.51.100.4, 254, 501, 488, 200, 0, GET, /index.htm, -, 203.0.113.4, -, 2020-02-24, 22:48:39, W3SVC2, SERVER6, 198.51.100.6, 147, 411, 388, 200, 0, GET, /about.html, -, 203.0.113.11, -, 2020-02-24, 22:48:40, W3SVC2, SERVER7, 198.51.100.18, 170, 531, 468, 200, 0, GET, /image.png, -, 203.0.113.8, -, 2020-02-24, 22:48:41, W3SVC2, SERVER8, 198.51.100.14, 125, 711, 868, 200, 0, GET, /intro.htm, -,

创建表格 Athena 对于IIS日志文件

要查询您的IIS日志文件格式日志 Amazon S3,您首先创建一个表架构,以便 Athena 可以读取日志数据。

创建表格 Athena 对于IIS日志文件格式日志

  1. https://console.amazonaws.cn/athena/ 打开 Athena 控制台。

  2. 将以下DDL声明粘贴到 Athena 控制台,注意以下几点:

    1. 要指定逗号分隔符,请使用 FIELDS TERMINATED BY ','.

    2. 修改位置“S3://”中的值bucket-name/iis-log-file-folder/'指向您的IIS日志格式日志文件 Amazon S3.

    CREATE EXTERNAL TABLE `iis_format_logs`( client_ip_address string, user_name string, request_date string, request_time string, service_and_instance string, server_name string, server_ip_address string, time_taken_millisec string, client_bytes_sent string, server_bytes_sent string, service_status_code string, windows_status_code string, request_type string, target_of_operation string, script_parameters string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/iis-log-file-folder/'
  3. 在 Athena 控制台中运行查询以注册 iis_format_logs 表。查询完成后,日志就会准备好查询 Athena.

IIS日志格式选择查询示例

以下示例查询选择请求日期、请求时间、请求目标以及从表中以毫秒为单位的时间 iis_format_logs...TheThethe WHERE 请求类型为 GET HTTP状态代码为 200 (成功)。在查询中,请注意s 在 ' GET'' 200' 要求查询成功。

SELECT request_date, request_time, target_of_operation, time_taken_millisec FROM iis_format_logs WHERE request_type = ' GET' AND service_status_code = ' 200'

下图显示了样品数据查询的结果。


                    示例查询结果 Athena 的IIS日志文件格式日志文件 Amazon S3.

NCSA日志文件格式

IIS还使用 NCSA记录 格式为ASCII文本格式的固定字段,按空格分隔。结构类似于ApacheAccess日志使用的常用日志格式。NCSA常用日志数据格式中的字段包括客户端IP地址、客户端ID(不使用)、域\用户ID、收到的时间戳、客户端请求的文本、服务器状态代码以及返回给客户端的对象的大小。

以下示例显示了IIS中记录的NCSA常用日志格式的数据.

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 和一种类似于 ApacheWeb服务器日志. 与Apache日志不同,Grok模式使用 %{DATA:user_id} 对于第三个字段,而非 %{USERNAME:user_id} 要考虑反斜杠的存在 domain\user_id。有关使用GrokSerde的更多信息,请参阅 写入Grok定制分类器AWS Glue 开发人员指南.

创建表格 Athena 适用于IISNCSAWeb服务器日志

  1. https://console.amazonaws.cn/athena/ 打开 Athena 控制台。

  2. 将以下DDL声明粘贴到 Athena 查询编辑器。修改值 LOCATION 's3://bucket-name/iis-ncsa-logs/' 要指向您的IISNCSA日志 Amazon S3.

    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://bucket-name/iis-ncsa-logs/';
  3. 在 Athena 控制台中运行查询以注册 iis_ncsa_logs 表。查询完成后,日志就会准备好查询 Athena.

选择IISNCSA日志查询示例

例 – 筛选404个错误

以下示例查询选择要求的时间、客户端请求文本以及服务器状态代码 iis_ncsa_logs 表。TheThethe WHERE HTTP状态代码的条目筛选器 404 (未找到页面)。

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

下图显示了查询的结果 Athena 查询编辑器。


                            从 Athena 对于HTTP 404 条目。

例 – 筛选特定域的成功请求

以下示例查询选择用户ID、请求接收的时间、客户端请求文本以及服务器状态代码 iis_ncsa_logs 表。TheThethe WHERE 条款筛选请求HTTP状态代码的请求 200 (成功) AnyCompany 域。

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 对于HTTP 200 条目。