Utiliser Amazon Athena pour interroger les mesures Internet dans les fichiers journaux Amazon S3 - Amazon CloudWatch

Utiliser Amazon Athena pour interroger les mesures Internet dans les fichiers journaux Amazon S3

Vous pouvez utiliser Amazon Athena pour interroger et afficher les mesures internet que Moniteur Internet publie dans un compartiment Amazon S3. Moniteur Internet propose une option permettant de publier les mesures Internet de votre application dans un compartiment S3 pour le trafic Internet des réseaux urbains que vous surveillez (emplacements clients et ASN, généralement des fournisseurs de services Internet, FSI). Que vous choisissiez de publier les mesures sur S3 ou non, Moniteur Internet publie automatiquement les mesures Internet sur CloudWatch Logs toutes les cinq minutes pour les 500 premiers réseaux urbains (en termes de volume de trafic) pour chaque moniteur.

Ce chapitre explique comment créer une table dans Athena pour les mesures Internet situées dans un fichier journal S3, puis fournit des exemples de requêtes pour voir les mesures de différentes façons. Par exemple, vous pouvez rechercher les 10 réseaux urbains les plus affectés par un impact sur la latence.

Utiliser Amazon Athena pour créer une table des mesures Internet dans Moniteur Internet

Pour commencer à utiliser Athena avec les fichiers journaux S3 de Moniteur Internet, vous devez d'abord créer une table des mesures Internet.

Suivez les étapes de cette procédure pour créer une table dans Athena à partir des fichiers journaux S3. Vous pouvez ensuite exécuter des requêtes Athena sur la table, comme ces exemples de requêtes de mesures Internet, pour obtenir des informations sur vos mesures.

Pour créer une table Athéna

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

  2. Dans l'éditeur de requêtes Athena, saisissez une instruction de requête pour générer une table contenant les mesures Internet Moniteur Internet. Remplacez la valeur du paramètre LOCATION par l'emplacement du compartiment S3 dans lequel sont stockées les mesures Internet de Moniteur Internet.

    CREATE EXTERNAL TABLE internet_measurements ( version INT, timestamp INT, clientlocation STRING, servicelocation STRING, percentageoftotaltraffic DOUBLE, bytesin INT, bytesout INT, clientconnectioncount INT, internethealth STRING, trafficinsights STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/' TBLPROPERTIES ('skip.header.line.count' = '1');
  3. Saisissez une instruction pour créer une partition afin de lire les données. Par exemple, la requête suivante crée une partition unique pour une date et un emplacement spécifiques :

    ALTER TABLE internet_measurements ADD PARTITION (year = 'YYYY', month = 'MM', day = 'dd') LOCATION 's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/YYYY/MM/DD';
  4. Cliquez sur Exécuter.

Exemples d'instructions Athéna pour les mesures Internet

Voici un exemple d'instruction permettant de générer une table :

CREATE EXTERNAL TABLE internet_measurements ( version INT, timestamp INT, clientlocation STRING, servicelocation STRING, percentageoftotaltraffic DOUBLE, bytesin INT, bytesout INT, clientconnectioncount INT, internethealth STRING, trafficinsights STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/' TBLPROPERTIES ('skip.header.line.count' = '1');

Voici un exemple d'instruction permettant de créer une partition pour lire les données :

ALTER TABLE internet_measurements ADD PARTITION (year = '2023', month = '04', day = '07') LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/2023/04/07/'

Exemples de requêtes Amazon Athena à utiliser avec les mesures Internet dans Moniteur Internet

Cette section inclut des exemples de requêtes que vous pouvez utiliser avec Amazon Athena pour obtenir des informations sur les mesures Internet de votre application publiées sur Amazon S3.

Interroger les 10 emplacements clients et ASN les plus affectés (par le pourcentage total du trafic)

Exécutez cette requête Athena pour obtenir les 10 réseaux urbains les plus affectés (par le pourcentage total du trafic), c'est-à-dire les emplacements clients et les ASN, généralement des fournisseurs de services Internet.

SELECT json_extract_scalar(clientLocation, '$.city') as city, json_extract_scalar(clientLocation, '$.networkname') as networkName, sum(percentageoftotaltraffic) as percentageoftotaltraffic FROM internet_measurements GROUP BY json_extract_scalar(clientLocation, '$.city'), json_extract_scalar(clientLocation, '$.networkname') ORDER BY percentageoftotaltraffic desc limit 10

Rechercher les 10 emplacements clients et ASN les plus affectés (par la disponibilité)

Exécutez cette requête Athena pour obtenir les 10 réseaux urbains les plus affectés (par le pourcentage total du trafic), c'est-à-dire les emplacements clients et les ASN, généralement des fournisseurs de services Internet.

SELECT json_extract_scalar(clientLocation, '$.city') as city, json_extract_scalar(clientLocation, '$.networkname') as networkName, sum( cast( json_extract_scalar( internetHealth, '$.availability.percentageoftotaltrafficimpacted' ) as double ) ) as percentageOfTotalTrafficImpacted FROM internet_measurements GROUP BY json_extract_scalar(clientLocation, '$.city'), json_extract_scalar(clientLocation, '$.networkname') ORDER BY percentageOfTotalTrafficImpacted desc limit 10

Rechercher les 10 emplacements clients et ASN les plus affectés (par la latence)

Exécutez cette requête Athena pour obtenir les 10 réseaux urbains les plus affectés (par l'impact sur la latence), c'est-à-dire les emplacements clients et les ASN, généralement des fournisseurs de services Internet.

SELECT json_extract_scalar(clientLocation, '$.city') as city, json_extract_scalar(clientLocation, '$.networkname') as networkName, sum( cast( json_extract_scalar( internetHealth, '$.performance.percentageoftotaltrafficimpacted' ) as double ) ) as percentageOfTotalTrafficImpacted FROM internet_measurements GROUP BY json_extract_scalar(clientLocation, '$.city'), json_extract_scalar(clientLocation, '$.networkname') ORDER BY percentageOfTotalTrafficImpacted desc limit 10

Interroger les informations sur le trafic pour les emplacements clients et les ASN

Exécutez cette requête Athena pour obtenir des informations sur le trafic, notamment le score de disponibilité, le score de performance et le temps jusqu'au premier octet pour vos réseaux urbains, c'est-à-dire les emplacements clients et les ASN, généralement des fournisseurs de services Internet.

SELECT json_extract_scalar(clientLocation, '$.city') as city, json_extract_scalar(clientLocation, '$.subdivision') as subdivision, json_extract_scalar(clientLocation, '$.country') as country, avg(cast(json_extract_scalar(internetHealth, '$.availability.experiencescore') as double)) as availabilityScore, avg(cast(json_extract_scalar(internetHealth, '$.performance.experiencescore') as double)) performanceScore, avg(cast(json_extract_scalar(trafficinsights, '$.timetofirstbyte.currentexperience.value') as double)) as averageTTFB, sum(bytesIn) as bytesIn, sum(bytesOut) as bytesOut, sum(bytesIn + bytesOut) as totalBytes FROM internet_measurements where json_extract_scalar(clientLocation, '$.city') != 'N/A' GROUP BY json_extract_scalar(clientLocation, '$.city'), json_extract_scalar(clientLocation, '$.subdivision'), json_extract_scalar(clientLocation, '$.country') ORDER BY totalBytes desc limit 100

Pour plus d’informations sur l’utilisation d’Athena, consultez le Guide de l’utilisateur Amazon Athena.