

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 查詢 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/)。