7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VPC Flow Logs × Athenaでトラフィック分析してみた!

Last updated at Posted at 2025-08-18

本記事は、「2025 Japan AWS Jr. Champions夏のQiitaリレー🌻」
46日目の記事となります!
これまでの投稿は、以下のリンクにまとめられているので、
ぜひ他の記事も読んでいただければと思います
https://qiita.com/natsumi_a/items/80539843482fed4cd648

1.背景

オンプレミス環境からAWSへクラウド移行したとき、
トラフィックレポート、クラウドではどうやって作成するの?
という壁にぶつかりました。

そこで今回は、VPC Flow Logsを使ってトラフィックログを取得し、
Athenaで分析する方法を試してみました!

ログはS3に保存し、Athenaでクエリ分析をすることで、
通信の傾向を簡単にチェックし、トラフィックの可視化に繋がります。

この記事では、こんな方におすすめです:

  • オンプレミスからAWSへのシステム移行を検討している方
  • VPC Flow Logsを使ってみたいけど、どう始めればいいか迷っている方
  • Athenaでのログ分析に興味がある方

2.使うAWSサービスはこの3つだけ!

今回の構成はとってもシンプル。使うのはこの3つだけです:

🧩 VPC Flow Logs

VPC内の通信(IP、ポート、プロトコルなど)をログとして記録するサービス。

📦 Amazon S3

取得したログを保存するストレージ。
Athenaで分析するためには、S3バケットに保存しておく必要があります。

🔍 Amazon Athena

S3に保存されたログに対して、クエリを実行できるサーバーレス分析サービス。
Glueなどを使わなくても、手動でテーブル定義すればすぐに使えます!

3.VPC Flow Logsを有効化してみよう

まずは、VPC内のトラフィックを記録するために、VPC Flow Logsを有効化します。

✅ 手順(コンソールから設定する場合)

  1. VPCコンソールを開く
  2. 対象のVPCを選択
  3. 「Flow Logs」タブを開き、「Create flow log」をクリック
  4. 以下の項目を設定:
    • FilterALL(すべてのトラフィックを記録)
    • DestinationSend to an S3 bucket
    • Destination bucket:任意のS3バケット(事前に作成しておく)
    • Log formatcustom format
  5. 「Create flow log」で完了!

💡 補足ポイント

  • Filterの選び方ALL を選ぶと送受信両方のログが取得できます。

  • ログ形式custom format を選択することで、柔軟な分析が可能です。
    今回は、V2属性のフィールドと、flow-direction を指定します。

image.png


Flow Logsの設定が完了すると、数分以内にログファイルが保存され始めます。
次はこのログをAthenaで分析する準備をしていきます!

4. Athenaで分析する準備

ログをAthenaで分析するには、データベーステーブル定義が必要です。

✅ 手順(コンソールから設定する場合)

  1. Athenaコンソールを開く
  2. 「Editor」タブを開き、SQLクエリを実行してデータベースを作成
  3. 作成したデータベースを選択
  4. テーブル定義を作成
  5. パーティションを追加

🏗️ データベースの作成

まずは、Athenaでクエリを実行するためのデータベースを作成します。
以下のSQLをクエリエディタで実行します:

CREATE DATABASE test_vpc_flowlogs;

🛠 テーブル定義の作成

次に、S3に保存されたVPC Flow Logsを参照するためのテーブル定義を作成します。

以下のSQLをクエリエディタで実行します:

{your-bucket-name} 実際のS3バケットのパスに置き換えてください。
{AWS ID} ご自身のAWSアカウントID(12桁)に置き換えてください。

CREATE EXTERNAL TABLE IF NOT EXISTS test_vpc_flowlogs.test_table_vpc_flowlogs (
  version INT,
  accountid STRING,
  interfaceid STRING,
  srcaddr STRING,
  dstaddr STRING,
  srcport INT,
  dstport INT,
  protocol INT,
  packets INT,
  bytes BIGINT,
  start INT,
  endtime INT,
  action STRING,
  logstatus STRING,
  flowdirection STRING
)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://{your-bucket-name}/AWSLogs/{AWS ID}/vpc-flow-logs/ap-northeast-1/'
TBLPROPERTIES ("skip.header.line.count"="1");

📅 パーティション追加

テーブル定義を作成後、パーティション設定を変更します。
パーティション(dt) を使うことで、日付ごとの絞り込みが可能になり、
クエリの効率が向上します。

以下のSQLをクエリエディタで実行します:

{yyyy/mm/dd} 任意の日付に置き換えてください。
{your-bucket-name} 実際のS3バケットのパスに置き換えてください。
{AWS ID} ご自身のAWSアカウントID(12桁)に置き換えてください。

ALTER TABLE 
test_vpc_flowlogs.test_table_vpc_flowlogs
ADD PARTITION (dt='{yyyy/mm/dd}')
location 's3://{your-bucket-name}/AWSLogs/{AWS ID}/vpcflowlogs/ap-northeast-1/yyyy/mm';

5. クエリ例と分析結果

ここからが本番!Athenaで実行できるクエリ例を紹介します。

📥 受信トラフィック量(合計)

SELECT
  date_trunc('hour', from_unixtime(start)) AS hour,
  SUM(bytes) AS received_bytes
FROM
  test_vpc_flowlogs.test_table_vpc_flowlogs
WHERE
  action = 'ACCEPT'
  AND flowdirection = 'ingress'
GROUP BY
  1
ORDER BY
  1;

📤 送信トラフィック量(合計)

SELECT
  date_trunc('hour', from_unixtime(start)) AS hour,
  SUM(bytes) AS sent_bytes
FROM
  test_vpc_flowlogs.test_table_vpc_flowlogs
WHERE
  action = 'ACCEPT'
  AND flowdirection = 'egress'
GROUP BY
  1
ORDER BY
  1;

📈 最大受信量(1時間単位)

SELECT
  date_trunc('hour', from_unixtime(start)) AS hour,
  MAX(bytes) AS max_bytes
FROM
  test_vpc_flowlogs.test_table_vpc_flowlogs
WHERE
  action = 'ACCEPT'
  AND flowdirection = 'ingress'
GROUP BY
  1
ORDER BY
  1;

📉 最大送信量(1時間単位)

SELECT
  date_trunc('hour', from_unixtime(start)) AS hour,
  MAX(bytes) AS max_bytes
FROM
  test_vpc_flowlogs.test_table_vpc_flowlogs
WHERE
  action = 'ACCEPT'
  AND flowdirection = 'egress'
GROUP BY
  1
ORDER BY
  1;

✅ クエリ結果の確認とCSVダウンロード

正常に完了した場合は、Completedと表示されます。
image.png

以下の手順で、分析結果をCSVファイルとしてダウンロードできます。:

  1. クエリ結果の右上にある 「Download results」 をクリック
  2. 「Download CSV of results」 を選択
  3. ローカルに保存!

📊 グラフで可視化してみた!

分析結果をグラフ化すると、傾向が一目でわかります!

image.png

6. まとめ

今回の検証では、VPC Flow Logs × Athena によって、
トラフィック分析ができることを確認しました!

また、Athenaのクエリ結果をCSVで出力→グラフ化することで、
トラフィックの変動を視覚的に把握できるようになります。

今回は22時間分のログを対象に分析しましたが、対象範囲を拡大することで、
月次レポートの作成など運用業務に役立つはずです!

🔮今後の展望

次回は、QuickSightを使ってダッシュボード化に挑戦予定です!
Athenaの分析結果を “見える化” して、運用にもっと活かしていきます!

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?