Amazon Athena
ユーザーガイド

Application Load Balancer ログのクエリ

Application Load Balancer は、Elastic Load Balancing の負荷分散オプションであり、コンテナを使用してマイクロサービスのデプロイメントにトラフィックを分散できます。Application Load Balancer のログをクエリすることで、トラフィックの送信元、レイテンシー、Elastic Load Balancing インスタンスとバックエンドアプリケーションとの間で転送されるバイト数を確認できます。

開始する前に、アクセスのログ記録を有効化して Application Load Balancer のログが Amazon S3 バケットに保存されるようにします。

ALB ログのテーブルの作成

  1. 以下の DDL ステートメントをコピーして Athena コンソールに貼り付け、LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/region' の値を変更します。

    次のように alb_logs テーブルを作成します。

    注記

    このクエリには、現在の Application Load Balancer アクセスログのエントリリストに存在するすべてのフィールドが含まれます。また、ALB ログへの追加が必要になる場合阿、最後に new_fieldテーブル列も含まれます。このフィールドによってクエリがブレークされることはありません。ログにない場合は、このフィールドは SerDe プロパティの正規表現では無視されます。

    CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs ( type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int, request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code string, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, new_field string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\"($| \"[^ ]*\")(.*)') LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/region';
  2. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は alb_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

ALB ログのクエリ例

次のクエリでは、ロードバランサーで受信し、クライアント IP アドレス別にグループ分けした HTTP GET リクエストの数をカウントします。

SELECT COUNT(request_verb) AS count, request_verb, client_ip FROM alb_logs GROUP BY request_verb, client_ip LIMIT 100;

別のクエリでは、Safari ブラウザのユーザーがアクセスした URL を表示します。

SELECT request_url FROM alb_logs WHERE user_agent LIKE '%Safari%' LIMIT 10;

次の例は、datetime でログを解析する方法を示しています。

SELECT client_ip, sum(received_bytes) FROM alb_logs_config_us WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN parse_datetime('2018-05-30-12:00:00','yyyy-MM-dd-HH:mm:ss') AND parse_datetime('2018-05-31-00:00:00','yyyy-MM-dd-HH:mm:ss') GROUP BY client_ip;