

# Classic Load Balancer ログをクエリする
<a name="elasticloadbalancer-classic-logs"></a>

Classic Load Balancer ログを使用して、Elastic Load Balancing インスタンスおよびバックエンドアプリケーションとの間で送受信されるトラフィックパターンを分析して理解します。トラフィックの送信元、レイテンシー、および転送されたバイト数を確認できます。

Elastic Load Balancing ログを分析する前に、宛先の Amazon S3 バケットでの保存用にそれらを設定します。詳細については、「[Classic Load Balancer のアクセスログの有効化](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html)」を参照してください。

**Elastic Load Balancing ログのテーブルを作成する**

1. 以下の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。Elastic Load Balancing ログレコードの[構文](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/access-log-collection.html#access-log-entry-format)をチェックします。以下のクエリを更新して、最新バージョンのレコードのための列と Regex 構文を含めることが必要になる場合があります。

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs (
    
    timestamp string,
    elb_name string,
    request_ip string,
    request_port int,
    backend_ip string,
    backend_port int,
    request_processing_time double,
    backend_processing_time double,
    client_response_time double,
    elb_response_code string,
    backend_response_code string,
    received_bytes bigint,
    sent_bytes bigint,
    request_verb string,
    url string,
    protocol string,
    user_agent string,
    ssl_cipher string,
    ssl_protocol 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.-]*)$'
   )
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{AWS_account_ID}}/elasticloadbalancing/';
   ```

1. `LOCATION` Amazon S3 バケットを変更して、Elastic Load Balancing ログの宛先を指定します。

1. Athena コンソールでクエリを実行します。クエリが完了すると、Athena が `elb_logs` テーブルを登録して、その中のデータをクエリ向けに準備します。詳細については、「[クエリの例](#query-elb-classic-example)」を参照してください。

## クエリの例
<a name="query-elb-classic-example"></a>

以下の例のようなクエリを使用します。この例では、`4XX` または `5XX` エラーレスポンスコードを返したバックエンドアプリケーションサーバーを示しています。`LIMIT` 演算子を使用すると、一度にクエリするログの数を制限できます。

```
SELECT
 timestamp,
 elb_name,
 backend_ip,
 backend_response_code
FROM elb_logs
WHERE backend_response_code LIKE '4%' OR
      backend_response_code LIKE '5%'
LIMIT 100;
```

後続のクエリを使用して、バックエンド IP アドレスと Elastic Load Balancing インスタンス名でグループ分けされたすべてのトランザクションの応答時間を合算します。

```
SELECT sum(backend_processing_time) AS
 total_ms,
 elb_name,
 backend_ip
FROM elb_logs WHERE backend_ip <> ''
GROUP BY backend_ip, elb_name
LIMIT 100;
```

詳細については、「[Athena を使用した S3 のデータの分析](https://aws.amazon.com/blogs/big-data/analyzing-data-in-s3-using-amazon-athena/)」を参照してください。