本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Athena 查詢 Amazon S3 日誌檔案中的網際網路測量
您可以使用 Amazon Athena 查詢和檢視網路監視器發佈至 Amazon S3 儲存貯體的網際網路測量結果。網路監視器中有個選項,可讓其針對受監控之城市網路 (用戶端位置和 ASN,通常為網際網路服務供應商 (ISP)) 的面向網際網路流量,將應用程式的網際網路度量發布至 S3 儲存貯體。無論您是否選擇將度量發佈至 S3,網路監視器每五分鐘會針對各監視器的前 500 個 (按流量計算) 城市網路,自動將網際網路度量發佈至 CloudWatch Logs。
本章節包含針對位於 S3 日誌檔案中的網際網路度量在 Athena 中建立資料表的方法步驟,以及提供範例查詢以查看度量的不同檢視。例如,您可以透過延遲影響查詢前 10 個受影響的城市網路。
使用 Amazon Athena 在網路監視器中建立網際網路度量的資料表
若要搭配網路監視器 S3 日誌檔案開始使用 Athena,請先建立網際網路度量的資料表。
按照此程序中的步驟,以根據 S3 日誌檔案在 Athena 中建立資料表。接著,您可以在資料表上執行 Athena 查詢 (例如,這些範例網際網路測量查詢),以取得度量的相關資訊。
建立 Athena 資料表
在 https://console.aws.amazon.com/athena/
中開啟 Athena 主控台。 在 Athena 查詢編輯器中,輸入查詢陳述式,以產生具有網路監視器網際網路度量的資料表。將 LOCATION 參數值取代為 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/'
可搭配使用網路監視器之網際網路度量的範例 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 使用者指南》https://docs.aws.amazon.com/athena/latest/ug/。