Consulta de logs do Apache armazenados no Amazon S3
Você pode usar o Amazon Athena para consultar arquivos de log do servidor HTTP do Apache
Os campos no formato de log comum incluem endereço IP do cliente, ID do cliente, ID do usuário, carimbo de data/hora de recebimento da solicitação, texto da solicitação do cliente, código de status do servidor e tamanho do objeto retornado ao cliente.
O exemplo de dados a seguir mostra o formato de log comum do 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
Criar uma tabela no Athena para logs do Apache
Antes de consultar os logs do Apache armazenados no Amazon S3, você deve criar um esquema de tabela para o Athena no qual ele possa ler os dados do log. Para criar uma tabela do Athena de logs do Apache, você pode usar Grok SerDe. Para obter mais informações sobre como usar o SerDe do Grok, consulte Escrever classificadores grok personalizados no Guia do desenvolvedor do AWS Glue.
Para criar uma tabela no Athena para logs do servidor Web do Apache
Abra o console do Athena em https://console.aws.amazon.com/athena/
. -
Cole a instrução DDL a seguir no editor de consultas do Athena. Modifique os valores em
LOCATION 's3://amzn-s3-demo-bucket/
para apontar para seus logs do Apache no Amazon S3.apache-log-folder
/'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://amzn-s3-demo-bucket/
apache-log-folder
/'; -
Execute a consulta no console do Athena para registrar a tabela
apache_logs
. Quando a consulta for concluída, os logs estarão prontos para você consultar no Athena.
Consultas de exemplo
exemplo – Filtro para erros 404
A consulta de exemplo a seguir seleciona a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela apache_logs
. A cláusula WHERE
filtra o código de status HTTP 404
(página não encontrada).
SELECT request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '404'
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.
exemplo – Filtro para solicitações com êxito
A consulta de exemplo a seguir seleciona o ID do usuário, a hora de recebimento da solicitação, o texto da solicitação do cliente e o código de status do servidor da tabela apache_logs
. A cláusula WHERE
filtra o código de status HTTP 200
(com êxito).
SELECT user_id, request_received_time, client_request, server_status FROM apache_logs WHERE server_status = '200'
A imagem a seguir mostra os resultados da consulta no editor de consultas do Athena.
exemplo – Filtrar por carimbo de data/hora
O exemplo a seguir consulta registros cujo horário de recebimento da solicitação é superior ao horário no carimbo de data/hora especificado.
SELECT * FROM apache_logs WHERE request_received_time > 10/Oct/2023:00:00:00