

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Log Query Application Load Balancer
<a name="application-load-balancer-logs"></a>

Application Load Balancer adalah opsi load balancing untuk LoElastic Load Balancing yang memungkinkan distribusi lalu lintas dalam deployment mikroservices menggunakan kontainer. Kueri Application Load Balancer log memungkinkan Anda melihat sumber lalu lintas, latency, dan byte yang ditransfer ke dan dari contoh Elastic Load Balancing dan aplikasi backend. Untuk informasi selengkapnya, lihat [Log akses untuk Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) dan [log Koneksi untuk Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) Balancer di *Panduan Pengguna untuk* Application Load Balancer.

## Prasyarat
<a name="application-load-balancer-logs-prerequisites"></a>
+ Aktifkan [pencatatan akses](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) atau [pencatatan koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) sehingga log Application Load Balancer dapat disimpan ke bucket Amazon S3 Anda.
+ Database untuk menyimpan tabel yang akan Anda buat untuk Athena. Untuk membuat database, Anda dapat menggunakan Athena atau AWS Glue konsol. Untuk informasi selengkapnya, lihat [Buat database di Athena](creating-databases.md) di panduan ini atau [Bekerja dengan database di konsol AWS lem](https://docs.aws.amazon.com/glue/latest/dg/console-databases.html) di *Panduan AWS Glue Pengembang*. 

**Topics**
+ [Prasyarat](#application-load-balancer-logs-prerequisites)
+ [Buat tabel untuk log akses ALB](create-alb-access-logs-table.md)
+ [Buat tabel untuk log akses ALB di Athena menggunakan proyeksi partisi](create-alb-access-logs-table-partition-projection.md)
+ [Contoh kueri untuk log akses ALB](query-alb-access-logs-examples.md)
+ [Buat tabel untuk log koneksi ALB](create-alb-connection-logs-table.md)
+ [Buat tabel untuk log koneksi ALB di Athena menggunakan proyeksi partisi](create-alb-connection-logs-table-partition-projection.md)
+ [Contoh kueri untuk log koneksi ALB](query-alb-connection-logs-examples.md)
+ [Sumber daya tambahan](application-load-balancer-logs-additional-resources.md)

# Buat tabel untuk log akses ALB
<a name="create-alb-access-logs-table"></a>

1. Salin dan tempel `CREATE TABLE` pernyataan berikut ke editor kueri di konsol Athena, lalu modifikasi seperlunya untuk persyaratan entri log Anda sendiri. Untuk informasi tentang memulai dengan konsol Athena, lihat. [Memulai](getting-started.md) Ganti jalur di `LOCATION` klausa dengan lokasi folder log akses Amazon S3 Anda. Untuk informasi selengkapnya tentang lokasi file log akses, lihat [Mengakses file log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*.

   Untuk informasi tentang setiap bidang file log, lihat [Mengakses entri log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*.
**catatan**  
`CREATE TABLE`Pernyataan contoh berikut mencakup kolom yang baru ditambahkan`classification`,`classification_reason`, dan `conn_trace_id` ('ID ketertelusuran', atau TID). Untuk membuat tabel untuk log akses Application Load Balancer yang tidak berisi entri ini, hapus kolom yang sesuai dari `CREATE TABLE` pernyataan dan modifikasi ekspresi reguler yang sesuai. 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_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 int,
               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,
               lambda_error_reason string,
               target_port_list string,
               target_status_code_list string,
               classification string,
               classification_reason string,
               conn_trace_id 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]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/access-log-folder-path/'
   ```
**catatan**  
Kami menyarankan bahwa pola *`?( .*)?`* di akhir `input.regex` parameter selalu tetap di tempatnya untuk menangani entri log future jika bidang log ALB baru ditambahkan. 

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`alb_access_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

# Buat tabel untuk log akses ALB di Athena menggunakan proyeksi partisi
<a name="create-alb-access-logs-table-partition-projection"></a>

Karena log akses ALB memiliki struktur yang diketahui skema partisi yang dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada log akses ALB dari tanggal tertentu hingga saat ini untuk satu AWS wilayah. Pernyataan ini didasarkan pada contoh di bagian sebelumnya tetapi menambahkan `PARTITIONED BY` dan `TBLPROPERTIES` klausa untuk mengaktifkan proyeksi partisi. Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 dari log akses ALB Anda. Untuk informasi selengkapnya tentang lokasi file log akses, lihat [Mengakses file log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk`projection.day.range`, ganti *2022**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi. Untuk informasi tentang setiap bidang file log, lihat [Mengakses entri log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format). 

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_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 int,
            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,
            lambda_error_reason string,
            target_port_list string,
            target_status_code_list string,
            classification string,
            classification_reason string,
            conn_trace_id string
            )
            PARTITIONED BY
            (
             day 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]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2022/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

**catatan**  
Kami menyarankan bahwa pola *?( .\$1)?* di akhir `input.regex` parameter selalu tetap di tempatnya untuk menangani entri log future jika bidang log ALB baru ditambahkan. 

# Contoh kueri untuk log akses ALB
<a name="query-alb-access-logs-examples"></a>

Kueri berikut menghitung jumlah permintaan HTTP GET yang diterima oleh load balancer dikelompokkan berdasarkan alamat IP klien:

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

Kueri lain menunjukkan yang URLs dikunjungi oleh pengguna browser Safari:

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

Kueri berikut menunjukkan catatan yang memiliki nilai kode status ELB lebih besar dari atau sama dengan 500.

```
SELECT * FROM alb_access_logs
WHERE elb_status_code >= 500
```

Contoh berikut menunjukkan cara mengurai log dengan`datetime`:

```
SELECT client_ip, sum(received_bytes) 
FROM alb_access_logs
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;
```

Kueri berikut menanyakan tabel yang menggunakan proyeksi partisi untuk semua log akses ALB dari hari yang ditentukan.

```
SELECT * 
FROM alb_access_logs 
WHERE day = '2022/02/12'
```

# Buat tabel untuk log koneksi ALB
<a name="create-alb-connection-logs-table"></a>

1. Salin dan tempel `CREATE TABLE` pernyataan contoh berikut ke editor kueri di konsol Athena, lalu modifikasi seperlunya untuk persyaratan entri log Anda sendiri. Untuk informasi tentang memulai dengan konsol Athena, lihat. [Memulai](getting-started.md) Ganti jalur di `LOCATION` klausa dengan lokasi folder log koneksi Amazon S3 Anda. Untuk informasi selengkapnya tentang lokasi file log [koneksi, lihat File log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk informasi tentang setiap bidang file log, lihat [Entri log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format). 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
            time string,
            client_ip string,
            client_port int,
            listener_port int,
            tls_protocol string,
            tls_cipher string,
            tls_handshake_latency double,
            leaf_client_cert_subject string,
            leaf_client_cert_validity string,
            leaf_client_cert_serial_number string,
            tls_verify_status string,
            conn_trace_id string
            ) 
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/connection-log-folder-path/'
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`alb_connection_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

# Buat tabel untuk log koneksi ALB di Athena menggunakan proyeksi partisi
<a name="create-alb-connection-logs-table-partition-projection"></a>

Karena log koneksi ALB memiliki struktur yang diketahui yang skema partisi dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada log koneksi ALB dari tanggal tertentu hingga saat ini untuk satu AWS wilayah. Pernyataan ini didasarkan pada contoh di bagian sebelumnya tetapi menambahkan `PARTITIONED BY` dan `TBLPROPERTIES` klausa untuk mengaktifkan proyeksi partisi. Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 dari log koneksi ALB Anda. Untuk informasi selengkapnya tentang lokasi file log [koneksi, lihat File log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk`projection.day.range`, ganti *2023**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi. Untuk informasi tentang setiap bidang file log, lihat [Entri log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format).

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
         time string,
         client_ip string,
         client_port int,
         listener_port int,
         tls_protocol string,
         tls_cipher string,
         tls_handshake_latency double,
         leaf_client_cert_subject string,
         leaf_client_cert_validity string,
         leaf_client_cert_serial_number string,
         tls_verify_status string,
         conn_trace_id string
         )
            PARTITIONED BY
            (
             day STRING
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2023/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

# Contoh kueri untuk log koneksi ALB
<a name="query-alb-connection-logs-examples"></a>

Perhitungan kueri berikut terjadi di mana nilai untuk `tls_verify_status` tidak`'Success'`, dikelompokkan berdasarkan alamat IP klien:

```
SELECT DISTINCT client_ip, count() AS count FROM alb_connection_logs
WHERE tls_verify_status != 'Success'
GROUP BY client_ip
ORDER BY count() DESC;
```

Kueri berikut mencari kejadian di mana nilai untuk `tls_handshake_latency` lebih dari 2 detik dalam rentang waktu yang ditentukan:

```
SELECT * FROM alb_connection_logs
WHERE 
  (
    parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') 
    BETWEEN 
    parse_datetime('2024-01-01-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
    AND 
    parse_datetime('2024-03-20-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
  ) 
  AND 
    (tls_handshake_latency >= 2.0);
```

# Sumber daya tambahan
<a name="application-load-balancer-logs-additional-resources"></a>

Untuk informasi selengkapnya tentang penggunaan log ALB, lihat sumber daya berikut.
+ [Bagaimana cara menganalisis log akses Application Load Balancer menggunakan Amazon Athena](https://repost.aws/knowledge-center/athena-analyze-access-logs) *di AWS Pusat Pengetahuan.*
+ Untuk informasi tentang kode status HTTP di Elastic Load Balancing, lihat [Memecahkan masalah penyeimbang beban aplikasi Anda di *Panduan Pengguna* untuk Penyeimbang Beban Aplikasi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html).
+ [Katalog dan analisis log Application Load Balancer lebih efisien dengan pengklasifikasi AWS Glue kustom dan Amazon Athena](https://aws.amazon.com/blogs/big-data/catalog-and-analyze-application-load-balancer-logs-more-efficiently-with-aws-glue-custom-classifiers-and-amazon-athena/) *di Big Data Blog.AWS *