Log e metriche per i servizi di backend

Questo documento mostra come configurare e utilizzare Cloud Logging e Cloud Monitoring con bilanciatori del carico delle applicazioni classici, bilanciatori del carico delle applicazioni esterni globali e Cloud CDN.

Logging

Puoi attivare, disattivare e visualizzare i log per un servizio di backend del bilanciatore del carico delle applicazioni esterno. Per i bilanciatori del carico delle applicazioni esterni con bucket di backend, il logging è attivato automaticamente e non può essere disattivato.

Attiva o disattiva il logging per ogni servizio di backend. Puoi configurare se registrare tutte le richieste o una frazione campionata in modo casuale.

Devi assicurarti di non avere un'esclusione dei log applicata ai bilanciatori del carico delle applicazioni esterni. Per istruzioni su come verificare che i log Cloud HTTP Load Balancer siano consentiti, consulta Visualizzare le esclusioni per tipo di risorsa.

Campionamento e raccolta dei log

Le richieste (e le risposte corrispondenti) gestite dalle istanze di macchine virtuali (VM) del backend del bilanciatore del carico vengono campionate. Queste richieste campionate vengono quindi elaborate per generare i log. Puoi controllare la frazione delle richieste che vengono generate come voci di log in base al parametro logConfig.sampleRate. Quando logConfig.sampleRate è 1.0 (100%), significa che i log vengono generati per tutte le richieste e scritti in Cloud Logging.

Attivazione del logging su un nuovo servizio di backend

Console

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico.

  3. Fai clic su Modifica.

  4. Fai clic su Configurazione backend.

  5. Seleziona Crea un servizio di backend.

  6. Compila i campi del servizio di backend richiesti.

  7. Nella sezione Logging, seleziona la casella di controllo Attiva il logging.

  8. Imposta una frazione di Frequenza di campionamento. Puoi impostare un numero compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Il valore predefinito è 1.0.

  9. Per completare la modifica del servizio di backend, fai clic su Aggiorna.

  10. Per completare la modifica del bilanciatore del carico, fai clic su Aggiorna.

gcloud: modalità globale

Crea un servizio di backend e abilita la registrazione utilizzando il comando gcloud compute backend-services create.

gcloud compute backend-services create BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --load-balancing-scheme=EXTERNAL_MANAGED

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con i bilanciatori del carico delle applicazioni esterni globali.
  • --enable-logging abilita il logging per il servizio di backend.
  • --logging-sample-rate ti consente di specificare un valore compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Ha significato solo con il parametro --enable-logging. Attivare il logging, ma impostare la frequenza di campionamento su 0.0 equivale a disattivare il logging. Il valore predefinito è 1.0.

gcloud: modalità classica

Crea un servizio di backend e abilita la registrazione utilizzando il comando gcloud compute backend-services create.

gcloud compute backend-services create BACKEND_SERVICE \
 --global \
 --enable-logging \
 --logging-sample-rate=VALUE \
 --load-balancing-scheme=EXTERNAL

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con un bilanciatore del carico delle applicazioni classico.
  • --enable-logging abilita il logging per il servizio di backend.
  • --logging-sample-rate ti consente di specificare un valore compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Ha significato solo con il parametro --enable-logging. Attivare il logging, ma impostare la frequenza di campionamento su 0.0 equivale a disattivare il logging. Il valore predefinito è 1.0.

Attivazione del logging su un servizio di backend esistente

Console

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico.

  3. Fai clic su Modifica.

  4. Fai clic su Configurazione backend.

  5. Fai clic su Modifica accanto al servizio di backend.

  6. Nella sezione Logging, seleziona la casella di controllo Attiva il logging.

  7. Imposta la probabilità di campionamento nel campo Frequenza di campionamento. Puoi impostare un numero compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Il valore predefinito è 1.0.

  8. Per completare la modifica del servizio di backend, fai clic su Aggiorna.

  9. Per completare la modifica del bilanciatore del carico, fai clic su Aggiorna.

gcloud: modalità globale

Abilita il logging su un servizio di backend esistente con il comando gcloud compute backend-services update.

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con i bilanciatori del carico delle applicazioni esterni globali.
  • --enable-logging abilita il logging per il servizio di backend.
  • --logging-sample-rate ti consente di specificare un valore compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Ha significato solo con il parametro --enable-logging. Attivare il logging, ma impostare la frequenza di campionamento su 0.0 equivale a disattivare il logging. Il valore predefinito è 1.0.

gcloud: modalità classica

Abilita il logging su un servizio di backend esistente con il comando gcloud compute backend-services update.

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con un bilanciatore del carico delle applicazioni classico.
  • --enable-logging abilita il logging per il servizio di backend.
  • --logging-sample-rate ti consente di specificare un valore compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Ha significato solo con il parametro --enable-logging. Attivare il logging, ma impostare la frequenza di campionamento su 0.0 equivale a disattivare il logging. Il valore predefinito è 1.0.

Disattivare o modificare il logging su un servizio di backend esistente

Console

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic sul nome del bilanciatore del carico.

  3. Fai clic su Modifica.

  4. Fai clic su Configurazione backend.

  5. Fai clic su Modifica accanto al servizio di backend.

  6. Per disattivare completamente il logging, nella sezione Logging, deseleziona la casella di controllo Abilita il logging.

  7. Se lasci abilitato il logging, puoi impostare una frazione di Frequenza di campionamento diversa. Puoi impostare un numero compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Il valore predefinito è 1.0. Ad esempio, 0.2 significa che il 20% delle richieste campionate genera log.

  8. Per completare la modifica del servizio di backend, fai clic su Aggiorna.

  9. Per completare la modifica del bilanciatore del carico, fai clic su Aggiorna.

gcloud: modalità globale

Disattiva il logging su un servizio di backend con il comando gcloud compute backend-services update.

Disattivare completamente il logging

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con i bilanciatori del carico delle applicazioni esterni globali.
  • --region indica che il servizio di backend è regionale. Utilizza questo campo per i servizi di backend utilizzati con bilanciatori del carico delle applicazioni esterni regionali.
  • --no-enable-logging disattiva il logging per il servizio di backend.

Modificare la frequenza di campionamento del logging

gcloud compute backend-services update BACKEND_SERVICE \
 --global \
 --logging-sample-rate=VALUE

gcloud: modalità classica

Disattiva il logging su un servizio di backend con il comando gcloud compute backend-services update.

Disattivare completamente il logging

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con un bilanciatore del carico delle applicazioni classico.
  • --no-enable-logging disattiva il logging per il servizio di backend.

Modificare la frequenza di campionamento del logging

gcloud compute backend-services update BACKEND_SERVICE \
 --global \
 --logging-sample-rate=VALUE

dove

  • --global indica che il servizio di backend è globale. Utilizza questo campo per i servizi di backend utilizzati con un bilanciatore del carico delle applicazioni classico.
  • --logging-sample-rate ti consente di specificare un valore compreso tra 0.0 e 1.0, dove 0.0 indica che nessuna richiesta viene registrata e 1.0 indica che il 100% delle richieste viene registrato. Ha significato solo con il parametro --enable-logging. Attivare il logging, ma impostare la frequenza di campionamento su 0.0 equivale a disattivare il logging.

Visualizza i log


Per seguire le indicazioni dettagliate per questa attività direttamente nella console Google Cloud, fai clic su Procedura guidata:

Procedura guidata


I log HTTP(S) vengono indicizzati prima da una regola di inoltro, poi da una mappa URL.

Per visualizzare i log, vai alla pagina Esplora log:

Vai a Esplora log

  • Per visualizzare tutti i log, nel menu del filtro Risorsa, seleziona Bilanciatore del carico HTTP Cloud > Tutte le regole di inoltro.

  • Per visualizzare i log di una regola di forwarding, seleziona il nome di una singola regola di forwarding.

  • Per visualizzare i log di una mappa URL, seleziona una regola di forwarding e poi una mappa URL.

In genere, i campi dei log di tipo booleano vengono visualizzati solo se hanno un valore true. Se un campo booleano ha un valore false, il campo viene omesso dal log.

La codifica UTF-8 è obbligatoria per i campi di log. I caratteri non UTF-8 vengono sostituiti con punti di domanda. Per i bilanciatori del carico delle applicazioni classici e esterni globali, puoi esportare le metriche basate su log utilizzando i log delle risorse (resource.type="http_load_balancer"). Le metriche create si basano sulla risorsa "Regola bilanciatore del carico delle applicazioni (metriche basate su log)" (l7_lb_rule), disponibile nelle dashboard di Cloud Monitoring anziché nella risorsa https_lb_rule.

Che cosa viene registrato nei log

Le voci di log del bilanciatore del carico delle applicazioni esterno contengono informazioni utili per monitorare ed eseguire il debug del traffico HTTP(S). I record dei log contengono campi obbligatori, che sono i campi predefiniti di ogni record del log.

Campo Formato del campo Tipo di campo: obbligatorio o facoltativo Descrizione
severity
insertID
logName
LogEntry Obbligatorio I campi generali descritti in una voce di log.
timestamp string (Timestamp format) Facoltativo Il momento in cui il primo livello GFE riceve la richiesta.
httpRequest HttpRequest Obbligatorio Un protocollo comune per la registrazione delle richieste HTTP.

HttpRequest.protocol non è compilato per resource.type="http_load_balancer"

.
resource MonitoredResource Obbligatorio

MonitoredResource è il tipo di risorsa associato a una voce di log.

MonitoredResourceDescriptor descrive lo schema di un oggetto MonitoredResource utilizzando un nome di tipo e un insieme di etichette. Per ulteriori informazioni, consulta Etichette delle risorse.

jsonPayload object (formato Struct) Obbligatorio Il payload della voce di log espresso come oggetto JSON. L'oggetto JSON contiene i seguenti campi:
  • statusDetails
  • backendTargetProjectNumber
  • overrideResponseCode
  • errorService
  • errorBackendStatusDetails
  • authzPolicyInfo
  • loadBalancingScheme
string Obbligatorio Il campo statusDetails contiene una stringa che spiega perché il bilanciatore del carico ha restituito lo stato HTTP visualizzato. Per ulteriori informazioni su queste stringhe di log, consulta Messaggi di esito positivo HTTP statusDetails e Messaggi di errore HTTP statusDetails.
string Obbligatorio Il campo backendTargetProjectNumber contiene il numero del progetto in cui è stata creata la destinazione di backend, ovvero il servizio di backend o il bucket di backend. Questo campo è nel formato: "projects/PROJECT_NUMBER". Queste informazioni sono disponibili solo per i bilanciatori del carico delle applicazioni esterni globali che utilizzano le risposte agli errori personalizzate.
integer Obbligatorio overrideResponseCode contiene il codice di risposta di override applicato alla risposta inviata al client. Queste informazioni sono disponibili solo per i bilanciatori del carico delle applicazioni esterni globali che utilizzano le risposte agli errori personalizzate.
string Obbligatorio Il campo errorService contiene il servizio di backend che ha fornito la risposta di errore personalizzata. Queste informazioni sono disponibili solo per i bilanciatori del carico delle applicazioni esterni globali che utilizzano le risposte agli errori personalizzate.
string Obbligatorio Il campo errorBackendStatusDetails contiene il statusDetails della risposta finale inviata al client. Queste informazioni sono disponibili solo per i bilanciatori del carico delle applicazioni esterni globali che utilizzano le risposte agli errori personalizzate.
AuthzPolicyInfo Obbligatorio Il campo authzPolicyInfo memorizza le informazioni sul risultato del criterio di autorizzazione. Queste informazioni sono disponibili solo per i bilanciatori del carico delle applicazioni esterni globali per i quali è stato attivato il criterio di autorizzazione. Per ulteriori informazioni, consulta cosa viene registrato per i criteri di autorizzazione.
string Facoltativo Il campo loadBalancingScheme viene compilato solo per i clienti che utilizzano la funzionalità di migrazione del bilanciatore del carico delle applicazioni classico. Questo campo contiene una stringa che descrive lo schema di bilanciamento del carico utilizzato per instradare la richiesta. I valori possibili sono EXTERNAL o EXTERNAL_MANAGED.

Etichette risorse

La tabella seguente elenca le etichette delle risorse per resource.type="http_load_balancer".

Campo Tipo Descrizione
backend_service_name string Il nome del servizio di backend.
forwarding_rule_name string Il nome dell'oggetto regola di forwarding.
project_id string L'identificatore del progetto Google Cloud associato a questa risorsa.
target_proxy_name string Il nome dell'oggetto proxy target a cui fa riferimento la regola di forwarding.
url_map_name string Il nome dell'oggetto mappa URL configurato per selezionare un servizio di backend.
zone string La zona in cui è in esecuzione il bilanciatore del carico. La zona è global.

Messaggi di successo HTTP statusDetails

statusDetails (esito positivo) Significato Codici di risposta comuni associati
byte_range_caching La richiesta HTTP è stata pubblicata utilizzando la memorizzazione nella cache dell'intervallo di byte di Cloud CDN. È possibile utilizzare qualsiasi codice di risposta memorizzabile nella cache.
response_from_cache La richiesta HTTP è stata pubblicata da una cache Cloud CDN. È possibile utilizzare qualsiasi codice di risposta memorizzabile nella cache.
response_from_cache_validated Il codice di ritorno è stato impostato da una voce memorizzata nella cache di Cloud CDN convalidata da un backend. È possibile utilizzare qualsiasi codice di risposta memorizzabile nella cache.
response_sent_by_backend La richiesta HTTP è stata proxyata correttamente al backend e la risposta è stata restituita dal backend. Il codice di risposta HTTP viene impostato dal software in esecuzione sul backend.

Messaggi di errore HTTP statusDetails

statusDetails (errore) Significato Codici di risposta comuni associati
aborted_request_due_to_backend_early_response Una richiesta con corpo è stata interrotta a causa dell'invio da parte del backend di una risposta prematura con un codice di errore. La risposta è stata inoltrata al cliente. La richiesta è stata interrotta. 4XX o 5XX
backend_connection_closed_after_partial_response_sent La connessione di backend si è chiusa in modo imprevisto dopo che è stata inviata al client una risposta parziale.

Il codice di risposta HTTP viene impostato dal software in esecuzione sul backend. Il codice di risposta HTTP 0 (zero) indica che il backend ha inviato intestazioni HTTP incomplete.

Il codice di risposta HTTP è 101 se è stato eseguito l'upgrade della connessione HTTP(S) a una connessione WebSocket.

backend_connection_closed_before_data_sent_to_client Il backend ha chiuso inaspettatamente la connessione al bilanciatore del carico prima che la risposta venisse proxy al client.

502, 503

Il codice di risposta HTTP è 101 se è stato eseguito l'upgrade della connessione HTTP(S) a una connessione WebSocket.

backend_early_response_with_non_error_status Il backend ha inviato una risposta non di errore (1XX o 2XX) a una richiesta prima di ricevere l'intero corpo della richiesta. 502, 503
backend_interim_response_not_supported Il backend ha inviato una risposta temporanea 1XX alla richiesta in un contesto in cui le risposte temporanee non sono supportate.

502, 503

backend_response_corrupted Il corpo della risposta HTTP inviato dal backend ha un'codifica di trasferimento con chunking non valida o è danneggiato. Qualsiasi codice di risposta possibile a seconda della natura della corruzione. Spesso 502, 503.
backend_response_headers_too_long Le intestazioni di risposta HTTP inviate dal backend hanno superato il limite consentito. Per ulteriori informazioni, consulta la sezione Dimensione intestazione per bilanciatori del carico delle applicazioni esterni. 502, 503
backend_timeout

Il backend ha superato il tempo di attesa durante la generazione di una risposta.

Per una connessione WebSocket:

  • Per l'Application Load Balancer esterno globale, viene generato un errore quando GFE chiude la connessione WebSocket in stato inattivo dopo la scadenza del timeout del servizio di backend.
  • Per il bilanciatore del carico delle applicazioni classico, viene generato un errore quando il GFE chiude la connessione WebSocket in stato inattivo o attivo dopo la scadenza del timeout del servizio di backend.

502, 503

Il codice di risposta HTTP è 101 se è stato eseguito l'upgrade della connessione HTTP(S) a una connessione WebSocket.

banned_by_security_policy La richiesta è stata vietata da una regola di divieto basata sulla frequenza di Google Cloud Armor. 429
body_not_allowed Il client ha inviato una richiesta HTTP con un corpo, ma il metodo HTTP utilizzato non consente un corpo. 400
byte_range_caching_aborted In precedenza, il bilanciatore del carico aveva ricevuto una risposta che indicava che la risorsa era memorizzabile nella cache e supportava gli intervalli di byte. Cloud CDN ha ricevuto una risposta incoerente (ad esempio, con un codice di risposta diverso da 206 Contenuti parziali previsto). Questo è accaduto quando si è tentato di eseguire il riempimento della cache utilizzando una richiesta di intervallo di byte. Di conseguenza, il bilanciatore del carico ha interrotto la risposta al client. 2XX
byte_range_caching_forwarded_backend_response In precedenza, il bilanciatore del carico aveva ricevuto una risposta che indicava che la risorsa era memorizzabile nella cache e supportava gli intervalli di byte. Cloud CDN ha ricevuto una risposta incoerente (ad esempio, con un codice di risposta diverso da 206 Contenuti parziali previsto). Questo è accaduto quando si è tentato di eseguire il riempimento della cache utilizzando una richiesta di intervallo di byte. Il bilanciatore del carico ha quindi inoltrato la risposta incoerente al client.

Restituito dal backend: è possibile qualsiasi codice di risposta.

byte_range_caching_retrieval_abandoned Il client ha annullato una richiesta di intervallo di byte o di convalida avviata da Cloud CDN.

Restituito dal backend: è possibile qualsiasi codice di risposta.

byte_range_caching_retrieval_from_backend_failed_after_partial_response Una richiesta di intervallo di byte o di convalida avviata da Cloud CDN ha riscontrato un errore. Per lo stato dettagliato del backend, consulta la voce di log Cloud Logging corrispondente per la richiesta avviata da Cloud CDN. 2XX
cache_lookup_failed_after_partial_response Il bilanciatore del carico non è riuscito a fornire una risposta completa dalla cache di Cloud CDN a causa di un errore interno. 2XX
cache_lookup_timeout_after_partial_response Lo stream di ricerca nella cache di Cloud CDN ha superato il tempo di attesa perché il client non ha recuperato i contenuti in modo tempestivo. 2XX
client_disconnected_after_partial_response La connessione al client è stata interrotta dopo che il bilanciatore del carico ha inviato una risposta parziale.

Restituito dal backend: è possibile qualsiasi codice di risposta.

Il codice di risposta HTTP è 101 se è stato eseguito l'upgrade della connessione HTTP(S) a una connessione WebSocket.

client_disconnected_before_any_response La connessione al client è stata interrotta prima che il bilanciatore del carico inviasse una risposta.

0

Il codice di risposta HTTP è 101 se è stato eseguito l'upgrade della connessione HTTP(S) a una connessione WebSocket.

client_timed_out Il front-end di Google (GFE) ha messo in stato inattivo la connessione del client a causa della mancanza di progressi durante il proxy della richiesta o della risposta. 0 o 408
client_cert_invalid_rsa_key_size Un certificato intermedio o finale del client aveva una dimensione della chiave RSA non valida. Per maggiori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_unsupported_elliptic_curve_key Un certificato client o intermedio utilizza una curva ellittica non supportata. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_unsupported_key_algorithm Un certificato client o intermedio utilizza un algoritmo non RSA o non ECDSA. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_pki_too_large L'infrastruttura a chiave pubblica da utilizzare per la convalida ha più di tre certificati intermedi che condividono lo stesso soggetto e le stesse informazioni sulla chiave pubblica del soggetto. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_chain_max_name_constraints_exceeded Un certificato intermedio fornito per la convalida aveva più di dieci vincoli di nome. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_chain_invalid_eku Il certificato client o l'ente che lo ha emesso non ha Extended Key Usage (EKU) che include clientAuth. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_validation_timed_out Tempo limite superato durante la convalida della catena di certificati. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_validation_search_limit_exceeded Il limite di profondità o di iterazione viene raggiunto durante il tentativo di convalidare la catena di certificati. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_validation_not_performed Hai configurato mTLS senza configurare un TrustConfig. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_not_provided Il client non ha fornito il certificato richiesto durante l'handshake. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
client_cert_validation_failed La convalida del certificato client non va a buon fine con TrustConfig quando vengono utilizzati algoritmi di hashing come MD4, MD5 e SHA-1. Per ulteriori informazioni, consulta Errori registrati per le connessioni chiuse. 0
config_not_found

Al bilanciatore del carico manca la configurazione del progetto. Questo problema potrebbe verificarsi intermittentemente, in particolare dopo aver apportato modifiche alla configurazione che aggiungono una nuova risorsa.

Poiché esistono due livelli di proxy, a volte il GFE di primo livello potrebbe non riuscire a raggiungere il GFE di secondo livello. Ciò potrebbe essere dovuto a un errore interno, come un'implementazione in corso, un sovraccarico del bilanciatore del carico o problemi di configurazione intermittenti.

404, 502, 503
direct_response Il bilanciatore del carico ha ignorato questa richiesta e ha restituito una risposta fissa. Potresti visualizzare qualsiasi codice di risposta HTTP a seconda della natura del problema. Ad esempio, il codice di risposta HTTP 410 indica che il backend è non disponibile a causa di insolvenza nei pagamenti.
denied_by_security_policy Il bilanciatore del carico ha negato questa richiesta a causa di un criterio di sicurezza di Google Cloud Armor. Configurato nel criterio di sicurezza.
error_uncompressing_gzipped_body Si è verificato un errore durante la decompressione di una risposta HTTP compressa con gzip. 502, 503
failed_to_connect_to_backend Il bilanciatore del carico non è riuscito a connettersi al backend. Sono inclusi i timeout durante la fase di connessione. 502, 503
failed_to_pick_backend Il bilanciatore del carico non è riuscito a scegliere un backend funzionante per gestire la richiesta. 502, 503
failed_to_negotiate_alpn Il bilanciatore del carico e il backend non sono riusciti a negoziare un protocollo a livello di applicazione (ad esempio HTTP/2) da utilizzare per comunicare tra loro tramite TLS. 502, 503
headers_too_long Le intestazioni della richiesta erano più grandi del limite massimo consentito. 413
http_version_not_supported Versione HTTP non supportata. Al momento sono supportati solo HTTP 0.9, 1.0, 1.1 e 2.0. 400
internal_error Errore interno nel bilanciatore del carico. In genere rappresenta un errore transitorio nell'infrastruttura del bilanciatore del carico. Riprova a eseguire la query. 4XX
invalid_external_origin_endpoint La configurazione del backend esterno non è valida. Esamina la configurazione del NEG internet e assicurati che specifichi un FQDN/indirizzo IP e una porta validi. 4XX
invalid_request_headers

Le intestazioni delle richieste HTTP ricevute da un client contengono almeno un carattere non consentito da una specifica HTTP applicabile.

Ad esempio, i nomi dei campi di intestazione che includono virgolette doppie (") o qualsiasi carattere esterno all'intervallo ASCII standard (ovvero qualsiasi byte >= 0x80) non sono validi.

Per ulteriori informazioni, vedi:

400
invalid_http2_client_header_format Le intestazioni HTTP/2 di un client non sono valide. Per ulteriori informazioni, consulta invalid_request_headers. 400
invalid_http2_client_request_path

Il percorso della richiesta HTTP/2 di un client contiene almeno un carattere non consentito dalla specifica URI.

Per ulteriori informazioni, consulta la sezione "3.3. "Path" di RFC 3986.

400
multiple_iap_policies Non è possibile combinare più policy Identity-Aware Proxy (IAP). Se hai un criterio IAP associato a un servizio di backend e un altro criterio associato a un oggetto serverless, rimuovi uno dei criteri e riprova. Gli oggetti serverless includono App Engine, Cloud Run e le funzioni Cloud Run. 500
malformed_chunked_body Il corpo della richiesta è stato codificato in modo errato. 411
request_loop_detected Il bilanciatore del carico ha rilevato un ciclo di richieste. Questo loop potrebbe essere causato da un'errata configurazione in cui il backend ha inoltrato nuovamente la richiesta al bilanciatore del carico. 502, 503
required_body_but_no_content_length La richiesta HTTP richiede un corpo, ma le intestazioni della richiesta non includevano un'intestazione Content-Length o Transfer-Encoding chunked. 400 o 403
secure_url_rejected Una richiesta con un URL https:// è stata ricevuta tramite una connessione HTTP/1.1 non criptata. 400
ssl_certificate_san_verification_failed Il bilanciatore del carico non è riuscito a trovare un SAN (Subject Alternative Name) nel certificato SSL presentato dal backend che corrisponda al nome host configurato. 502, 503
ssl_certificate_chain_verification_failed Il certificato SSL presentato dal backend non ha superato la verifica. 502, 503
throttled_by_security_policy La richiesta è stata bloccata da una regola di throttling di Google Cloud Armor. 429
unsupported_method Il client ha fornito un metodo di richiesta HTTP non supportato. 400
unsupported_100_continue La richiesta del client includeva l 'intestazione "Expect: 100-continue" su un protocollo che non la supporta. 400
upgrade_header_rejected La richiesta HTTP del client conteneva l'intestazione Upgrade ed è stata rifiutata. 400
websocket_closed La connessione WebSocket è stata chiusa. 101
websocket_handshake_failed L'handshake websocket non è riuscito. Qualsiasi codice di risposta possibile a seconda della natura dell'errore di handshake.
request_body_too_large Il corpo della richiesta HTTP ha superato il limite massimo supportato dal backend. Non applicabile ai backend VM. 413
handled_by_identity_aware_proxy Questa risposta è stata generata da Identity-Aware Proxy durante la verifica dell'identità del cliente prima di consentire l'accesso.

200, 302, 400, 401, 403, 500, 502, 503

429 (limitato da IAP)

serverless_neg_routing_failed La richiesta NEG serverless non può essere inviata. Questo errore può verificarsi quando non è possibile raggiungere la regione specificata nel NEG o quando non è possibile trovare il nome della risorsa (ad esempio il nome delle funzioni Cloud Run). 404, 502, 503
fault_filter_abort Questo errore può verificarsi se il cliente ha configurato un filtro degli errori e questo è stato attivato per la richiesta specificata. Il valore deve essere compreso tra 200 e 599.

Visualizzare i log per la convalida del certificato client mTLS

Per visualizzare gli errori registrati per le connessioni chiuse durante la convalida del certificato client TLS mutuale, completa i seguenti passaggi.

Query della console

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Fai clic sul pulsante di attivazione/disattivazione Mostra query.

  3. Incolla quanto segue nel campo della query. Sostituisci FORWARDING_RULE_NAME con il nome della regola di forwarding.

    jsonPayload.statusDetails=~"client_cert"
    jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    resource.labels.forwarding_rule_name=FORWARDING_RULE_NAME
    
  4. Fai clic su Esegui query.

Log delle richieste dei criteri di autorizzazione

L'oggetto authz_info nel payload JSON della voce del log del bilanciatore del carico contiene informazioni sulle norme di autorizzazione. Puoi configurare le metriche basate su log per il traffico consentito o negato da questi criteri. Controlla altri dettagli dei log dei criteri di autorizzazione.

Campo Tipo Descrizione
authz_info.policies[] oggetto L'elenco dei criteri che corrispondono alla richiesta.
authz_info.policies[].name string Il nome del criterio di autorizzazione corrispondente alla richiesta.
Il nome è vuoto per i seguenti motivi:
  • Nessun criterio ALLOW corrisponde alla richiesta, che viene rifiutata.
  • Nessun criterio DENY corrisponde alla richiesta, che è consentita.
authz_info.policies[].result enum Il risultato può essere ALLOWED o DENIED.
authz_info.policies[].details string I dettagli includono quanto segue:
  • allowed_as_no_deny_policies_matched_request
  • denied_as_no_allow_policies_matched_request
  • denied_by_authz_extension
  • denied_by_cloud_iap
authz_info.overall_result enum Il risultato può essere ALLOWED o DENIED.

Log per Google Cloud Armor

La tabella dei statusDetail messaggi di errore HTTP contiene alcuni messaggi che si applicano a Google Cloud Armor. Per ulteriori informazioni su cosa viene registrato da Google Cloud Armor, consulta Utilizzare il logging delle richieste.

Log per i deployment VPC condiviso

I log e le metriche del bilanciatore del carico delle applicazioni vengono in genere esportati nel progetto con la regola di forwarding. Pertanto, gli amministratori di servizio, ovvero i proprietari o gli utenti dei progetti in cui viene creato il servizio di backend, non avranno accesso ai log e alle metriche del bilanciatore del carico per impostazione predefinita. Puoi utilizzare i ruoli IAM per concedere queste autorizzazioni agli amministratori del servizio. Per scoprire di più sui ruoli IAM disponibili e sulla procedura per fornire l'accesso, consulta Concedere l'accesso al monitoraggio.

Interazione con i log

Puoi interagire con i log del bilanciatore del carico delle applicazioni esterno utilizzando l'API Cloud Logging. L'API Logging fornisce modi per filtrare in modo interattivo i log con campi specifici impostati. Esporta i log corrispondenti in Cloud Logging, Cloud Storage, BigQuery o Pub/Sub. Per ulteriori informazioni sull'API Logging, consulta la panoramica dell'API Cloud Logging.

Monitoraggio

Il bilanciatore del carico esporta i dati di monitoraggio in Cloud Monitoring.

Puoi utilizzare le metriche di monitoraggio per:

  • Valutare la configurazione, l'utilizzo e le prestazioni di un bilanciatore del carico
  • Risoluzione dei problemi
  • Migliorare l'utilizzo delle risorse e l'esperienza utente

Frequenza e conservazione dei report sulle metriche

Le metriche per i bilanciatori del carico delle applicazioni esterni vengono esportate in Cloud Monitoring in batch con granularità di 1 minuto. I dati di monitoraggio vengono conservati per sei (6) settimane.

La dashboard fornisce l'analisi dei dati in intervalli predefiniti di 1H (un'ora), 6H (sei ore), 1D (un giorno), 1W (una settimana) e 6W (sei settimane). Puoi richiedere manualmente l'analisi in qualsiasi intervallo da 6 W a 1 minuto.

Monitoraggio delle metriche

Puoi monitorare le seguenti metriche per i bilanciatori del carico delle applicazioni esterni.

Le seguenti metriche per i bilanciatori del carico delle applicazioni esterni globali vengono registrate in Cloud Monitoring. A queste metriche viene anteposto loadbalancing.googleapis.com/.

Metrica Nome Descrizione
Conteggio delle richieste https/request_count Il numero di richieste gestite dal bilanciatore del carico delle applicazioni esterno
Conteggio byte richiesta https/request_bytes_count Il numero di byte inviati come richieste dai client al bilanciatore del carico delle applicazioni esterno
Conteggio byte risposta https/response_bytes_count Il numero di byte inviati come risposte dal bilanciatore del carico delle applicazioni esterno ai client
Latenze totali https/total_latencies

Una distribuzione della latenza. La latenza è il tempo che intercorre tra il primo byte della richiesta ricevuta e l'ultimo byte della risposta inviata dal GFE.

Le latenze totali vengono misurate in base a richiesta/risposta. Le interruzioni tra le richieste sulla stessa connessione che utilizzano Connection: keep-alive non influiscono sulla misurazione. Questa misurazione viene in genere ridotta al 95° percentile nelle visualizzazioni di Cloud Monitoring.

Per le connessioni WebSocket, questo campo si riferisce all'intera durata della connessione.

Esempio: un bilanciatore del carico riceve 1 richiesta al secondo dal Regno Unito, tutte con una latenza di 100 ms, e 9 richieste al secondo dagli Stati Uniti, tutte con una latenza di 50 ms. In un determinato minuto sono state registrate 60 richieste dal Regno Unito e 540 richieste dagli Stati Uniti. Le metriche di monitoraggio mantengono la distribuzione in tutte le dimensioni. Puoi richiedere informazioni quali:

  • Latenza complessiva mediana (300/600) - 50 ms
  • Latenza media nel Regno Unito (30/60) - 100 ms
  • Latenza complessiva del 95° percentile (570/600) - 100 ms
RTT frontend* https/frontend_tcp_rtt Una distribuzione del tempo di round trip (RTT) uniformato misurata per ogni connessione tra il client e il GFE (misurata dallo stack TCP del GFE). Il RTT appiattito è un algoritmo che gestisce le variazioni e le anomalie che possono verificarsi nelle misurazioni del RTT.
Latenze del backend* https/backend_latencies

Una distribuzione della latenza misurata dal momento in cui il primo byte della richiesta è stato inviato dal GFE al backend fino a quando il GFE non ha ricevuto dal backend l'ultimo byte della risposta.

Per le connessioni WebSocket, le latenze del backend si applicano all'intera durata della sessione WebSocket.

Frazione della classe del codice di risposta Frazione di risposte totali del bilanciatore del carico delle applicazioni esterno che si trovano in ogni classe di codice di risposta (2XX, 4XX e così via). In Cloud Monitoring, questo valore è disponibile solo nelle dashboard predefinite. Non è disponibile per le dashboard personalizzate. Puoi utilizzare l'API per impostare avvisi.
Conteggio richieste di backend https/backend_request_count Il numero di richieste inviate dal bilanciatore del carico delle applicazioni esterno ai backend.
Conteggio byte richiesta di backend https/backend_request_bytes_count Il numero di byte inviati come richieste dal bilanciatore del carico delle applicazioni esterno ai backend.
Conteggio dei byte della risposta del backend https/backend_response_bytes_count Il numero di byte inviati come risposte dai backend (inclusa la cache) al bilanciatore del carico delle applicazioni esterno.

* Non è garantito che la somma delle latenze RTT frontend e delle latenze backend sia inferiore o uguale alle latenze totali. Questo perché, anche se eseguiamo il polling del RTT tramite la socket dal GFE al client al momento dell'ACK della risposta HTTP, ci basiamo sui report del kernel per alcune di queste misurazioni e non possiamo garantire che il kernel abbia una misurazione del RTT per la risposta HTTP specificata. Il risultato finale è un valore RTT appiattito che è influenzato anche dalle risposte HTTP, dai SYN/ACK e dagli handshake SSL precedenti che non influiscono sui tempi effettivi della richiesta HTTP corrente.

Per monitorare le connessioni WebSocket, crea un servizio di backend specifico per i WebSocket.

Filtrare le dimensioni per le metriche

Puoi applicare filtri per le metriche dei bilanciatori del carico delle applicazioni esterni.

Le metriche vengono aggregate per ogni bilanciatore del carico delle applicazioni classico e bilanciatore del carico delle applicazioni esterno globale. Puoi filtrare le metriche aggregate in base alle seguenti dimensioni per resource.type="http_load_balancer" o resource.type="https_lb_rule". Tieni conto che non tutte le dimensioni sono disponibili per tutte le metriche.

Proprietà Descrizione
backend_scope L'ambito Google Cloud (regione o zona) del gruppo di istanze di servizio di backend che ha eseguito la connessione.

Se non era disponibile alcun gruppo di istanze o se la richiesta è stata eseguita da un'altra entità, al posto della regione o della zona del gruppo di istanze del servizio di backend viene visualizzato uno dei seguenti valori.

  • FRONTEND_5XX: si è verificato un errore interno prima che la piattaforma GFE potesse selezionare un backend. Il GFE ha restituito "5XX" al client.
  • INVALID_BACKEND: il GFE non è riuscito a trovare un backend funzionante a cui assegnare la richiesta, pertanto ha restituito una risposta "5XX" al richiedente.
  • NO_BACKEND_SELECTED: si è verificato un errore o un'altra interruzione prima che fosse possibile selezionare un backend o si sia verificato un reindirizzamento dell'URL.
  • MULTIPLE_BACKENDS: la richiesta è stata gestita da potenzialmente più backend. Ciò può accadere quando Cloud CDN ha soddisfatto la richiesta parzialmente dalla cache e ha anche inviato una o più richieste di intervallo di byte al backend. Utilizza la suddivisione backend_scope per visualizzare ogni richiesta dal bilanciatore del carico al backend.

Quando viene scelta questa suddivisione, i grafici mostrano le metriche di backend (da bilanciatore del carico a backend), non le metriche di frontend (da client a bilanciatore del carico).
backend_type

Il nome del gruppo di backend che ha soddisfatto la richiesta del client. Può essere INSTANCE GROUP, NETWORK_ENDPOINT_GROUP o UNKNOWN se il backend non è stato assegnato. Se non è stato disponibile alcun gruppo di backend o se la richiesta è stata eseguita da un'altra entità, anziché un gruppo di backend viene visualizzato uno dei seguenti valori.

  • FRONTEND_5XX: si è verificato un errore interno prima che la piattaforma GFE potesse selezionare un backend. Il GFE ha restituito "5XX" al client.
  • INVALID_BACKEND: il GFE non è riuscito a trovare un backend funzionante a cui assegnare la richiesta, pertanto ha restituito una risposta "5XX" al richiedente.
  • NO_BACKEND_SELECTED: si è verificato un errore o un'altra interruzione prima che fosse possibile selezionare il backend o si sia verificato un reindirizzamento dell'URL.
  • MULTIPLE_BACKENDS: la richiesta è stata gestita da potenzialmente più backend. Ciò può accadere quando Cloud CDN ha soddisfatto la richiesta parzialmente dalla cache e ha anche inviato una o più richieste di intervallo di byte al backend. Utilizza la suddivisione backend_scope per visualizzare ogni richiesta dal bilanciatore del carico al backend.
backend_target_type Il nome del servizio di backend che ha gestito la richiesta. Può essere BACKEND_SERVICE, BACKEND_BUCKET, UNKNOWN se il backend non è stato assegnato o NO_BACKEND_SELECTED se si è verificato un errore o un'altra interruzione prima che fosse possibile selezionare un backend o si sia verificato un reindirizzamento dell'URL.
matched_url_path_rule La regola del percorso della mappa URL che corrisponde al prefisso della richiesta HTTP(S) (fino a 50 caratteri).
forwarding_rule_name Il nome della regola di forwarding utilizzata dal client per inviare la richiesta.
url_map_name

La regola del percorso o della route della mappa URL configurata come parte della chiave della mappa URL. Può essere UNMATCHED o UNKNOWN come valori di riserva.

  • UNMATCHED fa riferimento a una richiesta che non corrisponde a nessuna regola del percorso dell'URL, pertanto url_map_name utilizza la regola del percorso predefinita.
  • UNKNOWN indica un errore interno.
target_proxy_name Il nome dell'oggetto proxy HTTP(S) di destinazione a cui fa riferimento la regola di forwarding.
backend_target_name Il nome della destinazione di backend. La destinazione può essere un servizio o un bucket di backend. UNKNOWN viene restituito se non è stato assegnato un backend.
backend_name Il nome del gruppo di istanze, del bucket o del NEG di backend. UNKNOWN viene restituito se il backend non è stato assegnato o NO_BACKEND_SELECTED se si è verificato un errore o un'altra interruzione prima che fosse possibile selezionare un backend o si verificasse un reindirizzamento dell'URL.
backend_scope_type

Il tipo di ambito del gruppo di backend. Può essere GLOBAL, REGION, ZONE, MULTIPLE_BACKENDS o NO_BACKEND_SELECTED se si è verificato un errore o un'altra interruzione prima che fosse possibile selezionare un backend o si sia verificato un reindirizzamento dell'URL o altre possibili output di backend_type.

MULTIPLE_BACKENDS viene utilizzato quando viene utilizzata la memorizzazione nella cache a blocchi. Più query vengono inviate allo stesso backend per diversi blocchi di dati per supportare una singola richiesta del client.

proxy_continent Continente del GFE HTTP(S) che ha terminato la connessione HTTP(S). (esempi: America, Europe, Asia)
protocol Protocollo utilizzato dal client, uno dei seguenti: HTTP/1.0, HTTP/1.1, HTTP/2.0, QUIC/HTTP/2.0, UNKNOWN.
response_code Il codice di risposta HTTP della richiesta.
response_code_class La classe del codice di risposta HTTP della richiesta: 200, 300, 400, 500 o 0 per nessuno.
cache_result Risultato della cache per l'invio della richiesta HTTP tramite proxy: HIT, MISS, DISABLED, PARTIAL_HIT (per una richiesta inviata parzialmente dalla cache e parzialmente dal backend) o UNKNOWN.
client_country Paese del client che ha emesso la richiesta HTTP (ad esempio, United States o Germany)
load_balancing_scheme Lo schema di bilanciamento del carico utilizzato. Se viene utilizzato il bilanciatore del carico delle applicazioni classico, il valore è EXTERNAL. Se viene utilizzato il bilanciatore del carico delle applicazioni esterno globale, il valore è EXTERNAL_MANAGED.

Passaggi successivi