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

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

查询Apache日志存储在 Amazon S3

您可以使用 Amazon Athena 要查询 ApacheHTTP服务器日志文件 储存在您的 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日志

在您查询存储在 Amazon S3,您必须为 Athena 这样它就可以读取日志数据。创建 Athena Apache日志表,您可以使用 Grok SerDe. 有关使用GrokSerde的更多信息,请参阅 写入Grok定制分类器AWS Glue 开发人员指南.

创建表格 Athena 对于ApacheWebServer日志

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

  2. 将以下DDL声明粘贴到 Athena 查询编辑器。修改值 LOCATION 's3://bucket-name/apache-log-folder/' 要指向Apache日志 Amazon S3.

    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 表。TheThethe WHERE HTTP状态代码的条目筛选器 404 (未找到页面)。

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

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


                    从 Athena 对于HTTP 404 条目。

例 – 筛选成功请求

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

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

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


                    从 Athena 对于HTTP 200 条目。