

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

Athena を使用して、Network Load Balancer からのログを分析および処理します。これらのログは、Network Load Balancer に送信された Transport Layer Security (TLS) リクエストに関する詳細情報を受け取ります。これらのアクセスログを使用して、トラフィックパターンを分析し、問題のトラブルシューティングを行うことができます。

Network Load Balancer のアクセスログを分析する前に、ログを宛先の Amazon S3 バケットに保存するためにログを設定します。詳細および各 Network Load Balancer アクセスログエントリの詳細については、「[Network Load Balancer のアクセスログ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html)」を参照してください。

**Network Load Balancer ログのテーブルを作成する**

1. 以下の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。Network Load Balancer ログレコードの[構文](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html#access-log-file-format)をチェックします。ログレコードに対応する列と正規表現を含めるために、必要に応じてステートメントを更新します。

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS nlb_tls_logs (
               type string,
               version string,
               time string,
               elb string,
               listener_id string,
               client_ip string,
               client_port int,
               target_ip string,
               target_port int,
               tcp_connection_time_ms double,
               tls_handshake_time_ms double,
               received_bytes bigint,
               sent_bytes bigint,
               incoming_tls_alert int,
               cert_arn string,
               certificate_serial string,
               tls_cipher_suite string,
               tls_protocol_version string,
               tls_named_group string,
               domain_name string,
               alpn_fe_protocol string,
               alpn_be_protocol string,
               alpn_client_preference_list string,
               tls_connection_creation_time 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]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{AWS_account_ID}}/elasticloadbalancing/{{region}}';
   ```

1. `LOCATION` の Simple Storage Service (Amazon S3) バケットを変更して、Network Load Balancer ログの宛先を指定します。

1. Athena コンソールでクエリを実行します。クエリが完了すると、Athena が `nlb_tls_logs` テーブルを登録して、その中のデータをクエリ向けに準備します。

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

証明書の使用回数を確認するには、次の例のようなクエリを使用します。

```
SELECT count(*) AS 
         ct,
         cert_arn
FROM "nlb_tls_logs"
GROUP BY  cert_arn;
```

次のクエリでは、1.3 より前の TLS バージョンを使用しているユーザーの数を表示します。

```
SELECT tls_protocol_version,
         COUNT(tls_protocol_version) AS 
         num_connections,
         client_ip
FROM "nlb_tls_logs"
WHERE tls_protocol_version < 'tlsv13'
GROUP BY tls_protocol_version, client_ip;
```

次のクエリを使用して、TLS ハンドシェイクに長い時間がかかっている接続を特定します。

```
SELECT *
FROM "nlb_tls_logs"
ORDER BY  tls_handshake_time_ms DESC 
LIMIT 10;
```

次のクエリは、過去 30 日間にネゴシエートされた TLS プロトコルのバージョンと暗号化スイートを特定し、その数をカウントするために使用します。

```
SELECT tls_cipher_suite,
         tls_protocol_version,
         COUNT(*) AS ct
FROM "nlb_tls_logs"
WHERE from_iso8601_timestamp(time) > current_timestamp - interval '30' day
        AND NOT tls_protocol_version = '-'
GROUP BY tls_cipher_suite, tls_protocol_version
ORDER BY ct DESC;
```