Meminta log Application Load Balancer - Amazon Athena

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

Meminta log Application Load Balancer

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 dan log Koneksi untuk Application Load Balancer di Panduan Pengguna untuk Application Load Balancer.

Prasyarat

Membuat tabel untuk log akses ALB

  1. Salin dan tempel CREATE TABLE pernyataan berikut ke editor kueri di konsol Athena. Untuk informasi tentang memulai dengan konsol Athena, lihat. Memulai 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 di Panduan Pengguna untuk Penyeimbang Beban Aplikasi. Untuk informasi tentang setiap bidang file log, lihat Mengakses entri log.

    catatan

    BerikutCREATE TABLEpernyataan termasuk baru-baru ini ditambahkanclassificationdanclassification_reasonkolom. Untuk membuat tabel untuk Application Load Balancer akses log yang tidak berisi entri ini, menghapus dua kolom ini dariCREATE TABLEpernyataan dan memodifikasi regex 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 ) 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://DOC-EXAMPLE-BUCKET/access-log-folder-path/'
  2. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena registeralb_access_logstabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

Membuat tabel untuk log akses ALB di Athena menggunakan proyeksi partisi

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 menggunakanALTER TABLE ADD PARTITION.

CREATE TABLEPernyataan 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 di Panduan Pengguna untuk Penyeimbang Beban Aplikasi. Untukprojection.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.

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 ) 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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}" )

Untuk informasi selengkapnya tentang proyek partisi, lihat Proyeksi partisi dengan Amazon Athena.

Contoh kueri untuk log akses ALB

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_logs GROUP BY request_verb, client_ip LIMIT 100;

Kueri lain menunjukkan URL yang dikunjungi oleh pengguna peramban Safari:

SELECT request_url FROM alb_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_logs WHERE elb_status_code >= 500

Contoh berikut menunjukkan cara mengurai log dengandatetime:

SELECT client_ip, sum(received_bytes) FROM alb_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 ALB dari hari yang ditentukan.

SELECT * FROM alb_logs WHERE day = '2022/02/12'

Membuat tabel untuk log koneksi ALB

  1. Salin dan tempel CREATE TABLE pernyataan berikut ke editor kueri di konsol Athena. Untuk informasi tentang memulai dengan konsol Athena, lihat. Memulai 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 di Panduan Pengguna untuk Penyeimbang Beban Aplikasi. Untuk informasi tentang setiap bidang file log, lihat Entri log koneksi.

    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 ) 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://DOC-EXAMPLE-BUCKET/connection-log-folder-path/'
  2. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena registeralb_connection_logstabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

Membuat tabel untuk log koneksi ALB di Athena menggunakan proyeksi partisi

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 menggunakanALTER TABLE ADD PARTITION.

CREATE TABLEPernyataan 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 di Panduan Pengguna untuk Penyeimbang Beban Aplikasi. Untukprojection.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.

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 ) 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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}" )

Untuk informasi selengkapnya tentang proyek partisi, lihat Proyeksi partisi dengan Amazon Athena.

Contoh kueri untuk log koneksi ALB

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);

Lihat juga