View a markdown version of this page

Consulta de logs de acesso nas Tabelas do S3 - Amazon Simple Storage Service

Consulta de logs de acesso nas Tabelas do S3

Quando você habilita a integração das Tabelas do Amazon S3, o Amazon CloudWatch Logs entrega seus logs de acesso ao servidor no formato Apache Iceberg para o bucket de tabelas gerenciado aws-cloudwatch. Como os dados estão no formato do Iceberg, você pode consultá-los com qualquer ferramenta compatível com o Apache Iceberg, incluindo:

  • Amazon Athena: execute consultas SQL diretamente do console do Athena usando o catálogo de Tabelas do S3.

  • Estúdio Unificado Amazon SageMaker: use o editor SQL integrado para consultar seus dados de log junto com outros workloads de análise.

  • Amazon Redshift: consulte tabelas do Iceberg por meio do Redshift Spectrum ou da integração direta.

  • Apache Spark no Amazon EMR: use o Spark SQL ou a API DataFrame com o conector do Iceberg.

  • Ferramentas de código aberto: qualquer ferramenta que ofereça suporte ao catálogo REST do Apache Iceberg, como Trino, DuckDB ou PyIceberg.

nota

Para consultar logs interativamente no CloudWatch Logs Insights (sem SQL), consulte Consulta de logs com o CloudWatch Logs Insights.

Pré-requisitos

Antes de consultar logs de acesso nas Tabelas do S3, é necessário concluir as etapas a seguir:

  1. Habilite a integração das Tabelas do S3. Consulte Como habilitar a integração das Tabelas do S3 (opcional).

  2. Habilite a integração das Tabelas do S3 com serviços de analytics. No console do Amazon S3, navegue até Buckets de tabela e escolha Habilitar integração. Isso cria o catálogo federado s3tablescatalog no Catálogo de Dados e torna suas tabelas visíveis para os serviços de análise. Por padrão, o acesso é controlado por meio de permissões do IAM. Se desejar, você pode usar AWS Lake Formation para controle de acesso refinado. Para obter mais informações, consulte Integração das Tabelas do Amazon S3 Tables aos serviços de análise da AWS.

  3. Aguarde até que os dados sejam preenchidos. Os dados geralmente aparecem em até uma hora após a primeira entrega ao CloudWatch Logs.

Conexão ao Amazon Athena

  1. Abra o console do Athena em https://console.aws.amazon.com/athena/.

  2. No editor de consultas, selecione o catálogo de Tabelas do Amazon S3 no menu suspenso da fonte de dados.

  3. Suas tabelas de log aparecem na lista de bancos de dados no namespace logs.

O nome da tabela para os logs de acesso ao servidor é amazon_s3__server_access. A referência de tabela totalmente qualificada é:

"s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access"

Análise de tráfego

exemplo Volume de solicitações ao longo do tempo
SELECT date_trunc('minute', request_time) AS interval, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY date_trunc('minute', request_time) ORDER BY interval ASC;
exemplo Mistura de solicitações por tipo de operação
SELECT operation, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY operation ORDER BY cnt DESC;
exemplo Tráfego por bucket
SELECT bucket_arn, COUNT(*) AS requests, SUM(bytes_sent_size) AS bytes_out FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY bucket_arn ORDER BY requests DESC;

Solução de erros

exemplo Detalhamento da taxa de erros
SELECT http_status, error_code, operation, COUNT(*) AS error_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status >= 400 GROUP BY http_status, error_code, operation ORDER BY error_count DESC;
exemplo Solicitações de 403 Acesso negado
SELECT key_name, remote_ip, requester, COUNT(*) AS denied_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 403 GROUP BY key_name, remote_ip, requester ORDER BY denied_count DESC;
exemplo Solicitações de 404 Não encontrado
SELECT key_name, error_code, remote_ip, COUNT(*) AS miss_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 404 GROUP BY key_name, error_code, remote_ip ORDER BY miss_count DESC;
exemplo Eventos 503 Lentidão (controle de utilização)
SELECT key_name, remote_ip, COUNT(*) AS throttle_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 503 GROUP BY key_name, remote_ip ORDER BY throttle_count DESC;

Padrões de acesso

exemplo Tráfego por IP de origem
SELECT remote_ip, COUNT(*) AS total_requests, SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) AS errors, SUM(bytes_sent_size) AS bytes_transferred FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY remote_ip ORDER BY total_requests DESC;
exemplo Operações por solicitante
SELECT requester, operation, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY requester, operation ORDER BY requests DESC;
exemplo Chaves mais acessadas
SELECT key_name, COUNT(*) AS access_count, SUM(bytes_sent_size) AS bytes_out FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY key_name ORDER BY access_count DESC LIMIT 10;

Análise de latência

exemplo Latência por tipo de operação
SELECT operation, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.5) AS p50_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms, MAX(total_duration) AS max_ms, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY operation;
exemplo Teclas mais lentas por latência de p95
SELECT key_name, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation = 'REST.GET.OBJECT' GROUP BY key_name ORDER BY p95_ms DESC LIMIT 10;
exemplo Latência ao longo do tempo
SELECT date_trunc('minute', request_time) AS interval, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY date_trunc('minute', request_time) ORDER BY interval ASC;

Atribuição de custos

exemplo Transferência de dados por operação
SELECT operation, SUM(bytes_sent_size) AS total_bytes_out, SUM(object_size) AS total_object_bytes, COUNT(*) AS request_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT', 'REST.DELETE.OBJECT') GROUP BY operation ORDER BY total_bytes_out DESC;
exemplo Maiores objetos veiculados
SELECT key_name, MAX(object_size) AS max_size, AVG(object_size) AS avg_size, COUNT(*) AS reads FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation = 'REST.GET.OBJECT' AND bytes_sent_size > 0 GROUP BY key_name ORDER BY max_size DESC LIMIT 10;

Análise de segurança

exemplo IPs com altas taxas de erros
SELECT remote_ip, COUNT(*) AS total, SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) AS errors FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY remote_ip HAVING SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) > 10 ORDER BY errors DESC;
exemplo Tentativas de acesso com falha por chave
SELECT remote_ip, key_name, operation, http_status, COUNT(*) AS attempts FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status >= 400 GROUP BY remote_ip, key_name, operation, http_status ORDER BY attempts DESC LIMIT 20;
exemplo Distribuição da versão TLS
SELECT tls_version, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY tls_version ORDER BY cnt DESC;

Uso de agentes de IA para consultar logs de acesso ao servidor do Amazon S3

Os agentes de IA compatíveis com MCP podem descobrir as tabelas do S3 que contêm seus logs de acesso ao servidor do Amazon S3, gerar consultas SQL e analisar os resultados. Como seus logs de acesso ao servidor do Amazon S3 são exportados como tabelas do Iceberg no bucket de tabela aws-cloudwatch, os agentes podem consultá-los no mesmo catálogo de Tabelas do S3 que você usa com o Amazon Athena, o Amazon EMR, o Amazon Redshift ou qualquer ferramenta compatível com o Iceberg.

O Agent Toolkit for AWS possui habilidades que fornecem aos agentes procedimentos validados para trabalhar com dados da AWS. A habilidade Consultar tabelas de sistema do CloudWatch Logs executa consultas SQL em dados do CloudWatch Logs exportados para Tabelas do S3, incluindo seus logs de acesso ao servidor do Amazon S3 no bucket de tabela aws-cloudwatch. Para usá-la, baixe a habilidade do repositório no GitHub e adicione-a ao diretório de habilidades do agente.

Por exemplo, você pode pedir a um agente que mostre os 10 principais endereços IP de origem por contagem de solicitações nos logs de acesso ao servidor do S3 nas últimas 24 horas. O agente usa a habilidade para localizar a tabela de log de acesso e executar a consulta no Athena.