Esecuzione di query nei log di Application Load Balancer - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di query nei log di Application Load Balancer

Un Application Load Balancer è un'opzione di bilanciamento del carico in Elastic Load Balancing che consente di smistare il traffico in una distribuzione a microservizi con container. Eseguire query sui log dell'Application Load Balancer consente di individuare l'origine del traffico, la latenza e i byte trasferiti a e da istanze Elastic Load Balancing e applicazioni di back-end. Per ulteriori informazioni, consulta i log di accesso per l'Application Load Balancer e i log di connessione per l'Application Load Balancer nella User Guide for Application Load Balancer.

Prerequisiti

Creazione della tabella per i log di accesso ALB

  1. Copia e incolla la seguente CREATE TABLE istruzione nell'editor di query nella console Athena, quindi modificala se necessario per i tuoi requisiti di immissione dei log. Per informazioni sull'utilizzo della console Athena, consulta Nozioni di base. Sostituisci il percorso nella LOCATION clausola con la posizione della cartella del log di accesso di Amazon S3. Per ulteriori informazioni sulla posizione dei file di log di accesso, consulta Access log files nella User Guide for Application Load Balancers.

    Per informazioni su ogni campo del file di registro, vedere Access log entry nella User Guide for Application Load Balancers.

    Nota

    L'CREATE TABLEistruzione di esempio seguente include le colonne classificationclassification_reason, e conn_trace_id ('traceability ID' o TID) aggiunte di recente. Per creare una tabella per i log di accesso di Application Load Balancer che non contengono queste voci, rimuovete le colonne corrispondenti dall'CREATE TABLEistruzione e modificate l'espressione regolare di conseguenza.

    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://DOC-EXAMPLE-BUCKET/access-log-folder-path/'
  2. Eseguire la query nella console Athena. Una volta completata la query, Athena registra la tabella alb_access_logs, rendendo i dati in essa contenuti pronti per l'esecuzione di query.

Creazione della tabella per i log di accesso ALB in Athena utilizzando la proiezione delle partizioni

Poiché i log di accesso ALB hanno una struttura nota il cui schema di partizione è possibile specificare in anticipo, è possibile ridurre il tempo di esecuzione delle query e automatizzare la gestione delle partizioni utilizzando la funzionalità di proiezione delle partizioni Athena. La proiezione delle partizioni aggiunge automaticamente nuove partizioni man mano che vengono aggiunti nuovi dati. Ciò elimina la necessità di aggiungere manualmente le partizioni utilizzando ALTER TABLE ADD PARTITION.

L'CREATE TABLEistruzione di esempio seguente utilizza automaticamente la proiezione delle partizioni nei log di accesso ALB da una data specificata fino ad oggi per una singola regione. AWS L'istruzione si basa sull'esempio della sezione precedente, ma aggiunge le clausole PARTITIONED BY e TBLPROPERTIES per abilitare la proiezione delle partizioni. Nelle storage.location.template clausole LOCATION and, sostituisci i segnaposto con valori che identificano la posizione del bucket Amazon S3 dei log di accesso ALB. Per ulteriori informazioni sulla posizione dei file di log di accesso, consulta Access log files nella User Guide for Application Load Balancers. Su projection.day.range, sostituire 2022/01/01 con la data di inizio che si desidera usare. Dopo aver eseguito la query con esito positivo, è possibile eseguire query sulla tabella. Non è necessario eseguire ALTER TABLE ADD PARTITION per caricare le partizioni. Per informazioni su ogni campo del file di registro, vedere Access log entry.

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://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}" )

Per maggiori informazioni sulla proiezione delle partizioni, consulta Proiezione delle partizioni con Amazon Athena.

Query di esempio per i log di accesso ALB

La seguente query conteggia il numero di richieste HTTP GET ricevute dal load balancer, raggruppate in base all'indirizzo IP del client:

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

Un'altra query mostra gli URL visitati dagli utenti del browser Safari:

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

La seguente query mostra i record con valori del codice di stato ELB maggiori o uguali a 500.

SELECT * FROM alb_access_logs WHERE elb_status_code >= 500

Il seguente esempio illustra come analizzare i log per 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;

La seguente query interroga la tabella che utilizza la proiezione delle partizioni per tutti i log di accesso ALB del giorno specificato.

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

Creazione della tabella per i log di connessione ALB

  1. Copia e incolla la seguente CREATE TABLE istruzione di esempio nell'editor di query nella console Athena, quindi modificala se necessario per i tuoi requisiti di immissione del registro. Per informazioni sull'utilizzo della console Athena, consulta Nozioni di base. Sostituisci il percorso nella LOCATION clausola con la posizione della cartella del log di connessione Amazon S3. Per ulteriori informazioni sulla posizione dei file di registro delle connessioni, consulta File di registro delle connessioni nella Guida utente per Application Load Balancers. Per informazioni su ogni campo del file di registro, vedere Connection log entry.

    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://DOC-EXAMPLE-BUCKET/connection-log-folder-path/'
  2. Eseguire la query nella console Athena. Una volta completata la query, Athena registra la tabella alb_connection_logs, rendendo i dati in essa contenuti pronti per l'esecuzione di query.

Creazione della tabella per i log di connessione ALB in Athena utilizzando la proiezione delle partizioni

Poiché i log di connessione ALB hanno una struttura nota il cui schema di partizione è possibile specificare in anticipo, è possibile ridurre il tempo di esecuzione delle query e automatizzare la gestione delle partizioni utilizzando la funzionalità di proiezione delle partizioni Athena. La proiezione delle partizioni aggiunge automaticamente nuove partizioni man mano che vengono aggiunti nuovi dati. Ciò elimina la necessità di aggiungere manualmente le partizioni utilizzando ALTER TABLE ADD PARTITION.

L'CREATE TABLEistruzione di esempio seguente utilizza automaticamente la proiezione delle partizioni nei log di connessione ALB da una data specificata fino ad oggi per una singola regione. AWS L'istruzione si basa sull'esempio della sezione precedente, ma aggiunge le clausole PARTITIONED BY e TBLPROPERTIES per abilitare la proiezione delle partizioni. Nelle storage.location.template clausole LOCATION and, sostituisci i segnaposto con valori che identificano la posizione del bucket Amazon S3 dei log di connessione ALB. Per ulteriori informazioni sulla posizione dei file di registro delle connessioni, consulta File di registro delle connessioni nella Guida utente per Application Load Balancers. Perprojection.day.range, sostituisci 2023/01/01 con la data di inizio che desideri utilizzare. Dopo aver eseguito la query con esito positivo, è possibile eseguire query sulla tabella. Non è necessario eseguire ALTER TABLE ADD PARTITION per caricare le partizioni. Per informazioni su ogni campo del file di registro, consulta Voci del registro di connessione.

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://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}" )

Per maggiori informazioni sulla proiezione delle partizioni, consulta Proiezione delle partizioni con Amazon Athena.

Query di esempio per i log di connessione ALB

Le seguenti query contano le occorrenze in cui il valore per non tls_verify_status era'Success', raggruppate per indirizzo IP del client:

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

La seguente query cerca le occorrenze in cui il valore di tls_handshake_latency è superiore a 2 secondi nell'intervallo di tempo specificato:

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

Risorse aggiuntive