[小ネタ] ALB による負荷分散の偏りを Athena のワンクエリで確認する方法
はじめに
アノテーション テクニカルサポートの Shimizu です。
弊社サポートによくいただくお問い合わせで「ALB 配下にある EC2 の負荷状況が偏っているようなので、リクエストの振り分けが均等に行われているか確認したい」というご依頼があります。
一見すると調査が難しそうですが、ALB のアクセスログさえ取得していれば、Athena のクエリを1つ実行するだけで簡単に確認できます。
以下に、サンプルクエリと実際の使用例をご紹介します!
Athena のクエリ説明
下記の Athena クエリを使用します。
※ Athenaのテーブル名と検索期間は、実際の値に置き換えましょう。
SELECT target_ip, count(target_ip) as count
FROM my_table -- Athenaのテーブル名
WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')
BETWEEN timestamp '2025-01-01 00:00 Asia/Tokyo' -- 検索期間(この日時から)
AND timestamp '2025-01-01 00:00 Asia/Tokyo' -- 検索期間(この日時まで)
GROUP BY target_ip
ORDER BY count DESC
上記クエリは ALB アクセスログ内の指定した期間範囲で、ログ行数をターゲットIPアドレス(target_ip)ごとに集計します。つまりこの結果から、どのターゲット(EC2 や ECS)に何件のリクエストが振り分けられたかを確認できます。
※ ALB アクセスログに記録されるタイムスタンプは UTC ですが、上記クエリでは日本時間(Asia/Tokyo)を指定して検索できます。*1 こちらの記事 を参考にさせていただきました。
やってみた
実際にクエリを発行し、ALB の負荷分散に偏りがないか確認してみました。
※ 前準備として ALB アクセスログの有効化、Athena テーブルの作成が必要ですが、ここでは割愛します。これらの設定がまだの場合は参考資料 *2 *3 を参考に設定しましょう。
Athena のクエリエディタ画面に前述のクエリを貼り付け「実行」ボタンをクリックします。
下記例ではテーブル名 alb_access_logs
に対し、日本時間 2025/5/4 17:00 〜 18:00 の間、負荷分散が均等であったかを確認しています。
すると以下のような結果が得られました。
上記例では指定した期間にターゲットIP「10.5.10.20」へのリクエストが 8659 行、「10.5.11.205」へのリクエストが 8649 行記録されているため、それぞれの IP アドレスを持つ 2 台のターゲット EC2 に対して、ほぼ偏りがなく均等にリクエストが割り振られていたと判断できます。
さいごに
いかがでしたでしょうか。
調査の原因切り分けで、取り急ぎ「ALB による負荷分散が均等かどうかを確認したい」という場合、有用な方法かと思います。
なお確認した結果「負荷分散に大きな偏りがあるため原因を調査したい」という場合は AWS のトラブルシューティング記事 *4 を参考に、当てはまる原因がないか確認しましょう。
(例えばスティッキーセッションが有効化されている、アベイラビリティゾーン間でインスタンスの台数が均等でない、など)
この記事がお役に立てば幸いです!
参考資料
- *1 [小ネタ]AthenaでALBアクセスログ のtimestampのタイムゾーンの変換をする | DevelopersIO
- *2 Application Load Balancer のアクセスログ
- *3 Application Load Balancer ログをクエリする - Amazon Athena
- *4 ELB の不均等なトラフィックルーティングのトラブルシューティング | AWS re:Post
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。