使用 Amazon Athena 查詢 Amazon S3 日誌檔案中的網際網路測量 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Athena 查詢 Amazon S3 日誌檔案中的網際網路測量

您可以使用 Amazon Athena 查詢和檢視 Amazon CloudWatch Internet Monitor 發佈至 Amazon S3 儲存貯體的網際網路測量。網路監視器中有一個選項可讓您的應用程式將網際網路測量發佈到 S3 儲存貯體,以用於受監控城市網路的網際網路面向流量 (用戶端和 ASNs,通常是網際網路服務供應商 或 ISPs)。無論您是否選擇將測量結果發佈至 S3,網際網路監視器都會針對每個監視器的前 500 個 (依流量) 城市網路,每五分鐘自動將網際網路測量結果發佈至 CloudWatch 日誌。

本章節包含針對位於 S3 日誌檔案中的網際網路度量在 Athena 中建立資料表的方法步驟,以及提供範例查詢以查看度量的不同檢視。例如,您可以透過延遲影響查詢前 10 個受影響的城市網路。

使用 Amazon Athena 在網路監視器中建立網際網路度量的資料表

若要搭配網路監視器 S3 日誌檔案開始使用 Athena,請先建立網際網路度量的資料表。

按照此程序中的步驟,以根據 S3 日誌檔案在 Athena 中建立資料表。接著,您可以在資料表上執行 Athena 查詢 (例如,這些範例網際網路測量查詢),以取得度量的相關資訊。

建立 Athena 資料表

  1. https://console.aws.amazon.com/athena/ 中開啟 Athena 主控台。

  2. 在 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');
  3. 輸入陳述式以建立讀取資料的分割區。例如,下列查詢會針對指定的日期和位置建立單一分割區:

    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. 選擇執行

網際網路度量的範例 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 個 (以流量總百分比為單位) 的用戶端位置和 ASNs

執行此 Athena 查詢,以傳回受影響的前 10 個 (依總流量百分比) 城市網路,也就是用戶端位置和 ASNs,通常是網際網路服務供應商。

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 個 (依可用性) 用戶端位置和 ASNs

執行此 Athena 查詢,以傳回受影響的前 10 個 (依總流量百分比) 城市網路,也就是用戶端位置和 ASNs,通常是網際網路服務供應商。

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 個用戶端位置和 ASNs

執行此 Athena 查詢,以傳回受影響的前 10 個 (依延遲影響) 城市網路,也就是用戶端位置和 ASNs,通常是網際網路服務供應商。

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

查詢用戶端位置和 的流量重點 ASNs

執行此 Athena 查詢以傳回流量重點,包括可用性分數、效能分數,以及城市網路的第一個位元組時間,也就是用戶端位置和 ASNs,通常是網際網路服務供應商。

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/