使用 Amazon Athena 查询 Amazon S3 日志文件中的互联网测量数据
您可以使用 Amazon Athena,来查询和查看 Amazon CloudWatch 网络监测仪发布到 Amazon S3 存储桶的互联网测量数据。网络监测仪中有一个选项,选择此选项后可将应用程序的互联网测量数据发布到 S3 存储桶,以了解所监测城市-网络 [客户端位置和 ASN,后者通常是互联网服务提供商(ISP)] 的互联网流量。无论您是否选择将测量数据发布到 S3,Internet Monitor 每五分钟都会自动将每个监测仪的前 500 个(按流量计)城市网络的互联网测量数据发布到 CloudWatch Logs。
本章包括如何在 Athena 中为位于 S3 日志文件中的互联网测量数据创建表的步骤,然后提供示例查询以查看测量数据的不同视图。例如,您可以按延迟影响查询受影响的前 10 个城市网络。
使用 Amazon Athena 在 Internet Monitor 中创建互联网测量数据表
要开始将 Athena 与您的网络监测仪 S3 日志文件结合使用,您首先需要为互联网测量数据创建一个表。
按照此过程中的步骤在 Athena 中根据 S3 日志文件创建表。然后,您可以在表上运行 Athena 查询,例如这些示例互联网测量数据查询,以获取有关测量数据的信息。
创建 Athena 表
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 在 Athena 查询编辑器中,输入查询语句以生成一个包含 Internet Monitor 互联网测量数据的表。将 LOCATION 参数的值替换为存储 Internet Monitor 互联网测量数据的 S3 存储桶的位置。
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');输入一条语句来创建一个分区以读取数据。例如,以下示例查询创建了指定日期和位置的单个分区:
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
';选择运行。
互联网测量数据的 Athena 语句示例
下面是用于生成表的语句示例:
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');
以下是用于创建分区以读取数据的语句示例:
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/'
用于 Internet Monitor 中互联网测量数据的 Amazon Athena 查询示例
本节包含查询示例,您可以在 Amazon Athena 中使用这些查询来获取有关发布到 Amazon S3 的应用程序互联网测量数据的信息。
查询前 10 个(按流量的总百分比计)受影响的客户端位置和 ASN
运行此 Athena 查询,返回受影响的前 10 个(按流量的总百分比计)城市网络(即客户端位置和 ASN,通常是互联网服务提供商)。
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
查询受影响的前 10 个(按可用性计)客户端位置和 ASN
运行此 Athena 查询,返回受影响的前 10 个(按流量的总百分比计)城市网络(即客户端位置和 ASN,通常是互联网服务提供商)。
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
查询受影响的前 10 个(按延迟计)客户端位置和 ASN
运行此 Athena 查询,返回受影响的前 10 个(按延迟影响计)城市网络(即客户端位置和 ASN,通常是互联网服务提供商)。
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
查询您的客户端位置和 ASN 的流量亮点
运行此 Athena 查询以返回流量亮点,包括可用性分数、性能分数以及城市网络(即客户端位置和 ASN,通常是互联网服务提供商)的首字节时间。
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
有关使用 Athena 的更多信息,请参阅 Amazon Athena 用户指南。