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.
Argomenti
- Prerequisiti
- Creazione della tabella per i log di accesso ALB
- Creazione della tabella per i log di accesso ALB in Athena utilizzando la proiezione delle partizioni
- Query di esempio per i log di accesso ALB
- Creazione della tabella per i log di connessione ALB
- Creazione della tabella per i log di connessione ALB in Athena utilizzando la proiezione delle partizioni
- Query di esempio per i log di connessione ALB
- Risorse aggiuntive
Prerequisiti
-
Abilita la registrazione degli accessi o la registrazione delle connessioni in modo che i log di Application Load Balancer possano essere salvati nel tuo bucket Amazon S3.
-
Un database per mantenere la tabella da creare per Athena. Per creare un database, puoi usare Athena o AWS Glue la console. Per ulteriori informazioni, consulta Creazione di database in Athena in questa guida o Lavorare con i database nella console AWS Glue nella Guida per gli sviluppatori di AWS Glue .
Creazione della tabella per i log di accesso ALB
-
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 nellaLOCATION
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 TABLE
istruzione di esempio seguente include le colonneclassification
classification_reason
, econn_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 TABLE
istruzione 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
/' -
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 TABLE
istruzione 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
-
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 nellaLOCATION
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
/' -
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 TABLE
istruzione 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
-
Come posso analizzare i log di accesso di Application Load Balancer utilizzando Amazon Athena?
nel Centro conoscenze di AWS . -
Per informazioni sui codici di stato HTTP in Elastic Load Balancing, consulta Risoluzione dei problemi con Application Load Balancer nella Guida per l'utente di Application Load Balancer.
-
Cataloga e analizza i log di Application Load Balancer in modo più efficiente con classificatori AWS Glue personalizzati e Amazon Athena
nel Big Data Blog.AWS