Application Load Balancer のアクセスログを分析する必要があります。Amazon Athena を使用して行う方法を教えてください。

デフォルトでは、Elastic Load Balancing のアクセスログ記録は有効化されていません。アクセスログ記録を有効にするには、Amazon Simple Storage Service (Amazon S3) バケットを指定してください。Application Load Balancer および Classic Load Balancer のアクセスログはすべて、その S3 バケットに保存されます。保存後、ロードバランサーのパフォーマンスのトラブルシューティングや分析を行う場合は、Athena を使用して S3 のアクセスログを分析できます。

注意: Application Load Balancer と Classic Load Balancer のいずれも、Athena を使用してアクセスログを分析することはできますが、ここでは Application Load Balancer についてのみ説明します。 

Athena でアクセスログを分析するには、データベースとテーブルを作成します。

1.    Athena コンソールを開きます。

2.    クエリエディタで、次のようなコマンドを実行してデータベースを作成します。
注意: ベストプラクティスとして、データベースは、S3 バケットと同じ AWS リージョンで作成することをお勧めします。

create database alb_db

3.    ステップ 2 で作成したデータベースで、ALB ログのテーブルを作成します

4.    左側のペインの [テーブル] で、テーブル名の横にある [メニュー] ボタンから [テーブルのプレビュー] を選択します。[結果] ウィンドウに、ALB アクセスログのデータが表示されます。これで、Athena テーブルの作成が完了され、ALB アクセスログに対してクエリを実行できるようになりました。

5.    クエリエディタを使用して、ステップ 3 で作成したテーブルで SQL ステートメントを実行します。クエリの保存や、以前のクエリの表示、CSV 形式でのクエリ結果の保存を行うことができます。

クエリの例

以下の例の alb_log はテーブル名です。クエリに合わせてテーブル名、列の値、その他の変数を変更します。

アクション クエリ

最初の 100 個のアクセスログエントリを新しい順に表示します。

ユースケース: 分析とトラブルシューティング

SELECT *
FROM alb_log
ORDER by time ASC
LIMIT 100;

ALB にアクセスしたすべてのクライアント IP アドレスと、それらが ALB にアクセスした回数を一覧表示します。

ユースケース: 分析とトラブルシューティング

SELECT distinct client_ip, count() as count from alb_log
GROUP by client_ip
ORDER by count() DESC;

リクエスト/レスポンスのペアで ALB を通過しているデータの平均量 (キロバイト) を一覧表示します。

ユースケース: 分析とトラブルシューティング

SELECT (avg(sent_bytes)/1000.0 + avg(received_bytes)/1000.0)
as prewarm_kilobytes from alb_log;

ALB がトラフィックをルーティングしているすべてのターゲット、および ALB がリクエストを各ターゲットにルーティングした回数を割合 (%) の分散で一覧表示します。

ユースケース: 潜在的なターゲットトラフィックの不均衡を特定する

SELECT target_ip, (Count(target_ip)* 100.0 / (Select Count(*) From alb_log))
as backend_traffic_percentage
FROM alb_log
GROUP by target_ip
ORDER By count() DESC;

クライアントが ALB にリクエストを送信してから ALB アイドルタイムアウトが経過するまでに ALB への接続を終了した時間を一覧表示します (HTTP 460 エラー)。

ユースケース: HTTP 460 エラーをトラブルシューティングする

SELECT * from alb_log where elb_status_code = '460'

リスナールールによってリクエストが空のターゲットグループに転送されたことで、クライアントリクエストがルーティングされなかった時間を一覧表示します (HTTP 503 エラー)。

ユースケース: HTTP 503 エラーをトラブルシューティングする

SELECT * from alb_log where elb_status_code = '503'

指定された URL を訪問した回数をクライアント別、降順に一覧表示します。

ユースケース: トラフィックパターンを分析する

SELECT client_ip, elb, request_url, count(*) as count from alb_log
GROUP by client_ip, elb, request_url
ORDER by count DESC;

Firefox ユーザーが最も頻繁にアクセスした上位 10 個の URL を一覧表示します。

ユースケース: トラフィックディストリビューションおよびパターンを分析する

SELECT request_url, user_agent, count(*) as count
FROM alb_log
WHERE user_agent LIKE '%Firefox%'
GROUP by request_url, user_agent
ORDER by count(*) DESC
LIMIT 10;

ALB へのリクエストで送信したデータ量 (メガバイト) で、クライアント別、降順で一覧表示します。

ユースケース: トラフィックディストリビューションおよびパターンを分析する

SELECT client_ip, sum(received_bytes/1000000.0) as client_datareceived_megabytes
FROM alb_log
GROUP by client_ip
ORDER by client_datareceived_megabytes DESC;

目標処理時間が 5 秒を超えた場合の指定された日付範囲の時間を一覧表示します。

ユースケース: 指定されたタイムフレームのレイテンシーをトラブルシューティングする

SELECT * from alb_log
WHERE (parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')
     BETWEEN parse_datetime('2018-08-08-00:00:00','yyyy-MM-dd-HH:mm:ss')
     AND parse_datetime('2018-08-08-02:00:00','yyyy-MM-dd-HH:mm:ss'))
AND (target_processing_time >= 5.0)


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2018 年 12 月 20 日