AWS Global Accelerator フローログをクエリする - Amazon Athena

AWS Global Accelerator フローログをクエリする

AWS Global Accelerator を使用して、ネットワークトラフィックを AWS グローバルネットワーク経由で最適なエンドポイントに転送するアクセラレーターを作成できます。Global Accelerator の詳細については、「AWS Global Accelerator とは?」を参照してください。

Global Accelerator フローログは、アクセラレーター内のネットワークインターフェイス間で送受信される IP アドレストラフィックに関する情報の取得を可能にします。フローログデータは Amazon S3 にパブリッシュされ、そこでデータを取得して表示できます。詳細については、「AWS Global Accelerator のフローログ」を参照してください。

Athena を使用して、Amazon S3 内の Global Accelerator フローログの場所を指定するテーブルを作成することによって、フローログをクエリすることができます。

Global Accelerator フローログのテーブルを作成する
  1. 以下の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。このクエリでは、ROW FORMAT DELIMITED を指定し、SerDe の指定は省略します。この場合、クエリでは LazySimpleSerDe が使用されます。このクエリでは、フィールドはスペースで終了します。

    CREATE EXTERNAL TABLE IF NOT EXISTS aga_flow_logs ( version string, account string, acceleratorid string, clientip string, clientport int, gip string, gipport int, endpointip string, endpointport int, protocol string, ipaddresstype string, numpackets bigint, numbytes int, starttime int, endtime int, action string, logstatus string, agasourceip string, agasourceport int, endpointregion string, agaregion string, direction string ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region/' TBLPROPERTIES ("skip.header.line.count"="1");
  2. ログデータが含まれる Amazon S3 バケットをポイントするように LOCATION 値を変更します。

    's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/'
  3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena が aga_flow_logs テーブルを登録し、そのデータをクエリに使用できるようにします。

  4. 次のサンプルクエリのように、パーティションを作成してデータを読み取ります。このクエリは、指定日の 1 つのパーティションを作成します。日付と場所のプレースホルダーを置き換えます。

    ALTER TABLE aga_flow_logs ADD PARTITION (dt='YYYY-MM-dd') LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/YYYY/MM/dd';

AWS Global Accelerator フローログのクエリ例

例 – 特定のエッジロケーションを通過するリクエストをリストする

以下のクエリ例は、LHR エッジロケーションを通過するリクエストをリストします。LIMIT 演算子を使用すると、一度にクエリするログの数を制限できます。

SELECT clientip, agaregion, protocol, action FROM aga_flow_logs WHERE agaregion LIKE 'LHR%' LIMIT 100;
例 – HTTPS リクエストの大部分の受信するエンドポイント IP アドレスをリストする

最大数の HTTPS リクエストを受信しているエンドポイント IP アドレスを確認するには、次のクエリを使用します。このクエリは、HTTPS ポート 443 で受信したパケット数をカウントし、送信先 IP アドレス別にグループ分けして、上位 10 の IP アドレスを返します。

SELECT SUM(numpackets) AS packetcount, endpointip FROM aga_flow_logs WHERE endpointport = 443 GROUP BY endpointip ORDER BY packetcount DESC LIMIT 10;