查询存储在 Amazon S3 中的 Apache 日志 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询存储在 Amazon S3 中的 Apache 日志

您可以使用Amazon Athena要查询Apache HTTP Server 日志文件存储在您的 Amazon S3 账户中。本主题介绍如何创建表架构以查询 Apache访问日志文件的常见日志格式。

通用日志格式中的字段包括客户端 IP 地址、客户端 ID、用户 ID、接收请求的时间戳、客户端请求的文本、服务器状态代码以及返回给客户端的对象的大小。

以下示例数据显示 Apache 通用日志格式。

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

在 Athena 中为 Apache 日志创建表

您必须先为 Athena 创建用于读取日志数据的 Athena 表架构,然后才能查询存储在 Amazon S3 中的 Apache 日志。若要为 Apache 日志创建 Athena 表,可以使用Grok SerDe。有关使用 Grok SerDE 的更多信息,请参阅编写 Grok 自定义分类器中的Amazon Glue开发人员指南

在 Athena 中为 Apache Web 服务器日志创建表

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 将以下 DDL 语句复制并粘贴到 Athena 查询编辑器中。修改LOCATION 's3://bucket-name/apache-log-folder/'指向 Amazon S3 中的 Apache 日志。

    CREATE EXTERNAL TABLE apache_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} %{USERNAME: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/apache-log-folder/';
  3. 在 Athena 控制台中运行查询以注册apache_logs表。查询完成后,日志准备就绪,可供您从 Athena 查询。

为 Apache 日志选择查询示例

例 — 过滤 404 错误

下面的示例查询选择请求接收时间、客户端请求的文本以及从apache_logs表。这些区域有:WHEREHTTP 状态代码的子句筛选器404(未找到页面)。

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

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


                    从 Athena 查询 Apache 日志的 HTTP404条目。

例 — 筛选成功的请求

以下示例查询从apache_logs表。这些区域有:WHEREHTTP 状态代码的子句筛选器200(成功).

SELECT user_id, request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '200'

下图显示了 Athena 查询 Editor 中的查询结果。


                    从 Athena 查询 Apache 日志的 HTTP200条目。