

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à.

# Eseguire query nei log di Application Load Balancer
<a name="application-load-balancer-logs"></a>

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, consultare [Log di accesso per l’Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) e [Log di connessione per Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) nella *Guida per l’utente di Application Load Balancer*.

## Prerequisiti
<a name="application-load-balancer-logs-prerequisites"></a>
+ Abilita i [log di accesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) o i [log di connessione ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) in modo che i log di Application Load Balancer possano essere salvati nel 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 [Creare database in Athena](creating-databases.md) in questa guida o [Lavorare con i database nella console AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-databases.html) nella *Guida per gli sviluppatori di AWS Glue *. 

**Topics**
+ [Prerequisiti](#application-load-balancer-logs-prerequisites)
+ [Creazione della tabella per l’accesso ALB ai log](create-alb-access-logs-table.md)
+ [Creazione della tabella per i log di accesso ALB in Athena utilizzando la proiezione delle partizioni](create-alb-access-logs-table-partition-projection.md)
+ [Esempio di query per i log di accesso di ALB](query-alb-access-logs-examples.md)
+ [Creare la tabella per i log di connessione ALB](create-alb-connection-logs-table.md)
+ [Creazione della tabella per i log di connessione ALB in Athena utilizzando la proiezione delle partizioni](create-alb-connection-logs-table-partition-projection.md)
+ [Esempio di query per i log di connessione ALB](query-alb-connection-logs-examples.md)
+ [Risorse aggiuntive](application-load-balancer-logs-additional-resources.md)

# Creazione della tabella per l’accesso ALB ai log
<a name="create-alb-access-logs-table"></a>

1. Copiare e incollare la seguente dichiarazione `CREATE TABLE` nell’editor di query della console Athena, quindi modificarla se necessario in base alle esigenze di immissione dei log. Per informazioni sull'utilizzo della console Athena, consulta [Nozioni di base](getting-started.md). Sostituire il percorso nella clausola `LOCATION` con la propria posizione della cartella del log di accesso di Amazon S3. Per ulteriori informazioni sulla posizione da cui accedere al file del log, consultare [Accedere a file di log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) nella *Guida per l’utente di Application Load Balancer*.

   Per ulteriori informazioni su ciascun campo, consultare [Voci del log di accesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format) nella *Guida per l’utente per Application Load Balancer*.
**Nota**  
L’istruzione di esempio seguente `CREATE TABLE` include le colonne `classification`, `classification_reason` e `conn_trace_id` (’ID tracciabilità’ o TID). Per creare una tabella per i log di accesso di Application Load Balancer che non contengono queste voci, rimuovere le due colonne corrispondenti dall’istruzione `CREATE TABLE` e modificare 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://amzn-s3-demo-bucket/access-log-folder-path/'
   ```
**Nota**  
Suggeriamo che lo schema *`?( .*)?`* alla fine del parametro `input.regex` rimanga sempre invariato per gestire le future voci del log nel caso in cui vengano aggiunti nuovi campi di log ALB. 

1. 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
<a name="create-alb-access-logs-table-partition-projection"></a>

Poiché i log ALB dispongono di una struttura nota il cui schema di partizione può essere specificato in anticipo, è possibile ridurre il runtime delle query e automatizzare la gestione delle partizioni utilizzando la funzionalità di proiezione delle partizioni di 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’esempio di istruzione seguente `CREATE TABLE` utilizza automaticamente la proiezione delle partizioni nei log ALB da una data specificata fino alla presente 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 clausole `LOCATION` e `storage.location.template`, sostituire i segnaposto con valori che identificano la posizione del bucket Amazon S3 dei propri log di accesso ALB. Per maggiori informazioni sulla posizione del file del log di accesso consultare [File del log di accesso](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) nella *Guida utente per Application Load Balancers*. Per`projection.day.range`, sostituisci *2022**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, vedere [Elenco log di accesso](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}"
            )
```

Per maggiori informazioni sulla proiezione delle partizioni, consulta [Proiezione delle partizioni con Amazon Athena](partition-projection.md).

**Nota**  
Suggeriamo che lo schema *?( .\$1)?* alla fine del parametro `input.regex` rimanga sempre invariato per gestire le future voci del log nel caso in cui vengano aggiunti nuovi campi di log ALB. 

# Esempio di query per i log di accesso di ALB
<a name="query-alb-access-logs-examples"></a>

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 i siti URLs 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 query seguente esegue una query sulla tabella che utilizza la proiezione delle partizioni per tutti i log di accesso ALB dal giorno specificato.

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

# Creare la tabella per i log di connessione ALB
<a name="create-alb-connection-logs-table"></a>

1. Copiare e incollare l’istruzione `CREATE TABLE` del seguente esempio nell’editor di query della console Athena, quindi modificala se necessario per i requisiti di immissione del proprio log. Per informazioni sull'utilizzo della console Athena, consulta [Nozioni di base](getting-started.md). Sostituisci il percorso nella clausola `LOCATION` con la posizione della cartella del log di connessione Amazon S3. Per ulteriori informazioni sulla posizione dei file di log delle connessioni, consultare [File di log delle connessioni](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) nella *Guida utente per Application Load Balancer*. Per informazioni su ogni campo del file di log, vedere [Immissioni log di connessione](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. 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
<a name="create-alb-connection-logs-table-partition-projection"></a>

Poiché i log di connessione ALB dispongono di una struttura nota il cui schema di partizione può essere specificato in anticipo, è possibile ridurre il runtime delle query e automatizzare la gestione delle partizioni utilizzando la funzionalità di proiezione delle partizioni di 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’esempio di istruzione seguente `CREATE TABLE` utilizza automaticamente la proiezione delle partizioni nei log di connessione ALB da una data specificata fino alla presente 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 clausole `LOCATION` e `storage.location.template`, sostituire i segnaposto con valori che identificano la posizione del bucket Amazon S3 dei propri log di connessione ALB. Per ulteriori informazioni sulla posizione dei file di log delle connessioni, vedere [File di log delle connessioni](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) nella *Guida dell’utente per Application Load Balancer*. Per`projection.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 vedere, vedere [Immissioni log di connessione](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}"
            )
```

Per maggiori informazioni sulla proiezione delle partizioni, consulta [Proiezione delle partizioni con Amazon Athena](partition-projection.md).

# Esempio di query per i log di connessione ALB
<a name="query-alb-connection-logs-examples"></a>

Le seguenti query contano le occorrenze in cui il valore per `tls_verify_status` non 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 per `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
<a name="application-load-balancer-logs-additional-resources"></a>

Per ulteriori informazioni sull’utilizzo dei log ALB, consultare le seguenti risorse.
+ [Come posso analizzare i log di accesso di Application Load Balancer utilizzando Amazon Athena?](https://repost.aws/knowledge-center/athena-analyze-access-logs) nel *Centro conoscenze di AWS *.
+ Per informazioni sui codici di stato HTTP in Elastic Load Balancing, consulta [Risoluzione dei problemi con Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html) 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](https://aws.amazon.com/blogs/big-data/catalog-and-analyze-application-load-balancer-logs-more-efficiently-with-aws-glue-custom-classifiers-and-amazon-athena/) *nel Big Data Blog.AWS *