View a markdown version of this page

Interrogation des journaux d'accès dans les tables S3 - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation des journaux d'accès dans les tables S3

Lorsque vous activez l'intégration des tables Amazon S3, Amazon CloudWatch Logs fournit les journaux d'accès au serveur au format Apache Iceberg au compartiment de table aws-cloudwatch géré. Les données étant au format Iceberg, vous pouvez les interroger à l'aide de n'importe quel outil compatible avec Apache Iceberg, notamment :

  • Amazon Athena — Exécutez des requêtes SQL directement depuis la console Athena à l'aide du catalogue S3 Tables.

  • Amazon SageMaker Unified Studio : utilisez l'éditeur SQL intégré pour interroger les données de vos journaux parallèlement à d'autres charges de travail d'analyse.

  • Amazon Redshift — Interrogez les tables Iceberg par le biais de Redshift Spectrum ou d'une intégration directe.

  • Apache Spark sur Amazon EMR : utilisez Spark SQL ou l' DataFrame API avec le connecteur Iceberg.

  • Open-source outils — Tout outil compatible avec le catalogue REST d'Apache Iceberg, tel que Trino, DuckDB ou. PyIceberg

Note

Pour interroger les journaux de manière interactive dans CloudWatch Logs Insights (sans SQL), consultez. Interrogation des journaux avec CloudWatch Logs Insights

Conditions préalables

Avant de pouvoir interroger les journaux d'accès dans les tables S3, vous devez effectuer les opérations suivantes :

  1. Activez l'intégration des tables S3. Consultez Activation de l'intégration des tables S3 (facultatif).

  2. Activez l'intégration de S3 Tables aux services d'analyse. Dans la console Amazon S3, accédez à Table buckets et choisissez Enable integration. Cela crée le catalogue s3tablescatalog fédéré dans Data Catalog et rend vos tables visibles pour les services d'analyse. Par défaut, l'accès est contrôlé par le biais des autorisations IAM. Vous pouvez éventuellement l'utiliser AWS Lake Formation pour un contrôle d'accès précis. Pour plus d'informations, consultez la section Intégration des tables S3 aux services AWS d'analyse.

  3. Attendez que les données soient renseignées. Les données apparaissent généralement dans l'heure qui suit leur première livraison à CloudWatch Logs.

Connexion à Amazon Athena

  1. Ouvrez la console à l'adresse https://console.aws.amazon.com/athena/.

  2. Dans l'éditeur de requêtes, sélectionnez le catalogue Amazon S3 Tables dans le menu déroulant des sources de données.

  3. Vos tables de journal apparaissent dans la liste des bases de données sous l'espace de logs noms.

Le nom de table pour les journaux d'accès au serveur estamazon_s3__server_access. La référence de table entièrement qualifiée est :

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

Analyse du trafic

Exemple Volume des demandes au fil du temps
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;
Exemple Mixage des demandes par type d'opération
SELECT operation, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY operation ORDER BY cnt DESC;
Exemple Trafic par compartiment
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;

Résolution des problèmes d'erreur

Exemple Répartition du taux d'erreur
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;
Exemple 403 Demandes d'accès refusées
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;
Exemple 404 requêtes introuvables
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;
Exemple 503 événements SlowDown (d'étranglement)
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;

Modèles d’accès

Exemple Trafic par adresse IP source
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;
Exemple Opérations par le demandeur
SELECT requester, operation, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY requester, operation ORDER BY requests DESC;
Exemple Clés les plus consultées
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;

Analyse de latence

Exemple Latence par type d'opération
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;
Exemple Touches les plus lentes grâce à la latence 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;
Exemple Latence dans le temps
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;

Attribution des coûts

Exemple Transfert de données par opération
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;
Exemple Les plus gros objets servis
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;

Analyse de sécurité

Exemple IP avec des taux d'erreur élevés
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;
Exemple Tentatives d'accès par clé infructueuses
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;
Exemple Distribution des versions TLS
SELECT tls_version, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY tls_version ORDER BY cnt DESC;

Utilisation d'agents d'intelligence artificielle pour interroger les journaux d'accès au serveur Amazon S3

MCP-compatible Les agents d'intelligence artificielle peuvent découvrir les tables S3 qui contiennent les journaux d'accès à votre serveur Amazon S3, générer des requêtes SQL et analyser les résultats. Les journaux d'accès à votre serveur Amazon S3 étant exportés sous forme de tables Iceberg dans le compartiment de aws-cloudwatch tables, les agents peuvent les interroger via le même catalogue de tables S3 que celui que vous utilisez avec Amazon Athena, Amazon EMR, Amazon Redshift ou tout autre outil. Iceberg-compatible

Le kit d'outils pour les agents AWS fournit des compétences qui fournissent aux agents des procédures validées pour travailler avec AWS les données. La compétence Querying CloudWatch Logs System Tables exécute des requêtes SQL sur CloudWatch les données des journaux exportées vers S3 Tables, y compris les journaux d'accès à votre serveur Amazon S3 dans le compartiment de aws-cloudwatch tables. Pour l'utiliser, téléchargez la compétence depuis le référentiel GitHub et ajoutez-la au répertoire des compétences de votre agent.

Par exemple, vous pouvez demander à un agent d'afficher les 10 principales adresses IP sources par nombre de demandes dans les journaux d'accès à votre serveur S3 au cours des dernières 24 heures. L'agent utilise cette compétence pour localiser la table des journaux d'accès et exécuter la requête dans Athena.