Utilizzo delle metriche basate su log

Questa pagina illustra le nozioni di base sull'emissione di log per creare SLI di disponibilità e latenza. Fornisce inoltre esempi di implementazione di come definire gli SLO utilizzando metriche basate su log.

L'utilizzo degli elementi di dati nelle voci di log per creare indicatori del livello di servizio consente di sfruttare facilmente i payload del log esistenti. In caso contrario, potrebbe essere possibile aggiungere il logging a un servizio esistente, il che potrebbe essere più semplice della creazione di strumentazione delle metriche.

Log e metriche

I log raccolgono record chiamati voci di log che descrivono eventi specifici che si verificano nei sistemi informatici. I log sono scritti da codice, dai servizi della piattaforma su cui viene eseguito il codice (ad esempio, Dataflow) e dall'infrastruttura da cui dipende la piattaforma (ad esempio, le istanze di Compute Engine).

Poiché i log nei sistemi moderni diminuiscono, e talvolta sono ancora, i file di testo scritti su disco, una voce di log è analogia a una riga in un file di log e può essere considerata l'unità quantistica di logging.

Una voce di log include, in genere, due elementi:

  • Un timestamp che indica quando si è verificato l'evento o quando è stato importato nel sistema di logging.
  • Il payload del testo, ovvero dati di testo non strutturati o dati strutturati, più comunemente in formato JSON.

I log possono anche contenere metadati associati, soprattutto quando vengono importati in Cloud Logging. Tali metadati potrebbero includere la risorsa che sta scrivendo il log, il nome del log e la gravità di ogni voce.

Log

I log vengono utilizzati per due scopi principali:

  • I log degli eventi descrivono eventi specifici che si verificano nel sistema. Puoi utilizzare i log eventi per inviare messaggi che assicurano agli utenti che le cose stanno funzionando bene (e attività non riuscita) oppure per fornire informazioni quando le cose non funzionano (è stata ricevuta un'eccezione dal server).
  • I log delle transazioni descrivono i dettagli di ogni transazione elaborata da un sistema o un componente. Ad esempio, un bilanciatore del carico registra ogni richiesta ricevuta, indipendentemente dal fatto che la richiesta sia stata completata correttamente o meno, e registra informazioni aggiuntive come l'URL richiesto, il codice di risposta HTTP ed eventualmente informazioni come il backend utilizzato per soddisfare la richiesta.

Metriche

A differenza dei log, le metriche in genere non descrivono eventi specifici. Più comunemente, le metriche vengono utilizzate per rappresentare lo stato o l'integrità di un sistema nel corso del tempo. Una metrica è costituita da una serie di punti dati che misurano qualcosa del sistema; ogni punto dati include un timestamp e un valore numerico.

Le metriche possono anche essere associate a metadati; la serie di punti dati, denominata serie temporali, può includere informazioni quali il nome della metrica, una descrizione e spesso etichette che specificano la risorsa che sta scrivendo i dati. Per informazioni sul modello di metrica Monitoring, consulta Metriche, serie temporali e risorse.

Metriche basate su log

Le metriche basate su log sono metriche create dalle voci di log mediante l'estrazione di informazioni dalle voci di log e la loro trasformazione in dati delle serie temporali. Cloud Logging offre meccanismi per la creazione di due tipi di metriche dalle voci di log:

  • Metriche dei contatori, che contano il numero di voci di log corrispondenti a un filtro specifico. Puoi utilizzare una metrica contatore per determinare, ad esempio, il numero di richieste o errori registrati nel log.

  • Metriche di distribuzione, che utilizzano espressioni regolari per analizzare il payload in ogni voce di log per estrarre valori numerici come distribuzione.

Per ulteriori informazioni sulle metriche basate su log in Cloud Logging, consulta Utilizzo delle metriche basate su log.

Utilizzo di metriche basate su log come SLI

Le metriche basate su log consentono di estrarre i dati dai log in un formato utilizzabile per creare gli SLI in Monitoring:

  • Puoi usare le metriche del contatore basate su log per esprimere uno SLI di disponibilità basato sulla richiesta.

  • Puoi utilizzare una metrica di distribuzione basata su log per esprimere uno SLI di latenza basato sulla richiesta.

Voci di log di esempio

L'applicazione Stack Doctor è un esempio di servizio strumentale per emettere messaggi di log contenenti informazioni su tutte le richieste, gli errori e la latenza apportati al servizio. Il codice per il servizio è disponibile nel repository di GitHub stack-doctor.

Il servizio genera voci di log di Cloud Logging nel log projects/stack-doctor/logs/bunyan_log. La voce di log per ogni tipo di evento include un valore message diverso. Le voci dei log relative a diversi tipi di eventi hanno il seguente aspetto:

  • Per ogni richiesta:

    {
     "insertId": "..........iTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "pid": 81846,
       "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
       "hostname": "",
       "level": 30,
       "message": "request made",
       "v": 0,
       "name": "sli-log"
     },
       "resource": {
       "type": "global",
       "labels": {
         "project_id": "stack-doctor"
       }
     },
     "timestamp": "2020-09-01T03:30:49.263999938Z",
     "severity": "INFO",
     "logName": "projects/stack-doctor/logs/bunyan_log",
     "receiveTimestamp": "2020-09-01T03:30:50.003471183Z"
    }
    
  • Per le richieste andate a buon fine:

    {
     "insertId": "..........qTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "name": "sli-log",
       "v": 0,
       "pid": 81846,
       "level": 30,
       "hostname": "",
       "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
       "message": "success!"
     },
     "resource": {
       "type": "global",
       "labels": {
         "project_id": "stack-doctor"
       }
     },
     "timestamp": "2020-09-01T03:30:49.874000072Z",
     "severity": "INFO",
     "logName": "projects/stack-doctor/logs/bunyan_log",
     "receiveTimestamp": "2020-09-01T03:30:50.201547371Z"
    }
    
  • Per le richieste completate:

    {
     "insertId": "..........mTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
       "level": 30,
       "name": "sli-log",
       "message": "slept for 606 ms",
       "hostname": "",
       "pid": 81846,
       "v": 0
     },
     "resource": {
       "type": "global",
       "labels": {
         "project_id": "stack-doctor"
       }
     },
     "timestamp": "2020-09-01T03:30:49.874000072Z",
     "severity": "INFO",
     "logName": "projects/stack-doctor/logs/bunyan_log",
     "receiveTimestamp": "2020-09-01T03:30:50.201547371Z"
    }
    
  • In caso di errore:

    {
     "insertId": "..........DTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "hostname": "",
       "level": 50,
       "pid": 81846,
       "message": "failure!",
       "name": "sli-log",
       "time": "Mon Aug 31 2020 20:30:44 GMT-0700 (Pacific Daylight Time)",
       "v": 0
     },
     "resource": {
       "type": "global",
       "labels": {
         "project_id": "stack-doctor"
       }
     },
     "timestamp": "2020-09-01T03:30:44.414999961Z",
     "severity": "ERROR",
     "logName": "projects/stack-doctor/logs/bunyan_log",
     "receiveTimestamp": "2020-09-01T03:30:46.182157077Z"
    }
    

Sulla base di queste voci, puoi creare metriche basate su log che conteggiano tutte le richieste, contano gli errori e monitorano la latenza delle richieste. Puoi quindi utilizzare le metriche basate su log per creare SLI di disponibilità e latenza.

Creazione di metriche basate su log per gli SLI.

Prima di poter creare gli SLI per le metriche basate su log, è necessario creare le metriche basate su log.

  • Per gli SLI di disponibilità su conteggi delle richieste e degli errori, utilizza le metriche dei contatori basate su log.
  • Per gli SLI di latenza, utilizza le metriche di distribuzione basate su log.

Dopo aver creato le metriche basate su log, puoi trovarle in Monitoring cercandole in Metrics Explorer. In Monitoring, le metriche basate su log hanno il prefisso logging.googleapis.com/user.

Metriche per gli SLI di disponibilità

Esprimi uno SLI di disponibilità basato su richiesta nell'API Cloud Monitoring utilizzando la struttura TimeSeriesRatio per configurare un rapporto tra richieste"buone"o"routine"e"richieste"rispetto alle richieste totali. Questo rapporto viene utilizzato nel campo goodTotalRatio di una struttura RequestBasedSli.

Devi creare metriche del contatore basate su log che possono essere utilizzate per creare questo rapporto. Devi creare almeno due dei seguenti elementi:

  1. Metrica che conta gli eventi totali; utilizza questa metrica nelle proporzioni totalServiceFilter.

    Per l'esempio "stack-doctor", puoi creare una metrica basata su log che conta le voci di log in cui viene visualizzata la stringa del messaggio "requestmade".

  2. Una metrica che conteggia gli eventi"errati", utilizza questa metrica nelle proporzioni badServiceFilter.

    Per l'esempio "stack-doctor", puoi creare una metrica basata su log che conta le voci di log in cui viene visualizzata la stringa del messaggio "failure!".

  3. Una metrica che conta eventi"buona", utilizza questa metrica nelle proporzioni goodServiceFilter.

    Per l'esempio "stack-doctor", puoi creare una metrica basata su log che conta le voci di log in cui viene visualizzata la stringa del messaggio "success!".

Lo SLI descritto per questo esempio si basa su una metrica per le richieste totali denominate log_based_total_requests e una metrica per gli errori denominati log_based_errors.

Puoi creare metriche basate su log utilizzando Google Cloud Console, l'API Cloud Logging o l'interfaccia a riga di comando di Google Cloud. Per creare metriche del contatore basate su log mediante Cloud Console, puoi utilizzare la seguente procedura:

  1. In Cloud Console, seleziona Logging, quindi seleziona Metriche basate su log.

    Vai alle metriche basate su log

    La pagina delle metriche basate su log mostra una tabella delle metriche definite dall'utente e una tabella delle metriche definite dal sistema.

  2. Fai clic su Crea metrica sopra la tabella delle metriche definite dall'utente.

  3. Nel riquadro Tipo di metrica seleziona Contatore.

  4. Nel riquadro Dettagli, assegna un nome alla nuova metrica. Come esempio, "stack-doctor", inserisci log_based_total_requests o log_based_errors.

    Puoi ignorare gli altri campi per questo esempio.

  5. Nel riquadro Selezione filtro, crea una query che recuperi solo le voci di log che vuoi conteggiare nella metrica.

    Per l'esempio"stack-doctor", la query per log_based_total_requests potrebbe includere:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="request made"
    

    La query di logs_based_errors modifica la stringa di messaggio:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="failure!"
    
  6. Fai clic su Anteprima log per controllare il filtro e, se necessario, modificarlo.

  7. Ignora il riquadro Etichette per questo esempio.

  8. Fai clic su Crea metrica per completare la procedura.

Per ulteriori informazioni sulla creazione delle metriche del contatore basate su log, consulta la sezione Creare una metrica del contatore.

Metriche per gli SLI di latenza

Esprimi uno SLI di latenza basato su richiesta nell'API Cloud Monitoring utilizzando una struttura DistributionCut, che viene utilizzata nel campo distributionCut di una struttura RequestBasedSli. Devi creare una metrica di distribuzione basata su log per creare uno SLI di latenza. In questo esempio viene creata una metrica di distribuzione basata su log denominata log_based_latency.

Puoi creare metriche basate su log utilizzando Google Cloud Console, l'API Cloud Logging o l'interfaccia a riga di comando di Google Cloud. Per creare metriche di distribuzione basate su log utilizzando Cloud Console, puoi utilizzare la seguente procedura:

  1. In Cloud Console, seleziona Logging, quindi seleziona Metriche basate su log.

    Vai alle metriche basate su log

    La pagina delle metriche basate su log mostra una tabella delle metriche definite dall'utente e una tabella delle metriche definite dal sistema.

  2. Fai clic su Crea metrica sopra la tabella delle metriche definite dall'utente.

  3. Nel riquadro Tipo di metrica, seleziona Distribuzione.

  4. Nel riquadro Dettagli, assegna un nome alla nuova metrica. Per l'esempio "stack-doctor", inserisci log_based_latency.

    Puoi ignorare gli altri campi per questo esempio.

  5. Nel riquadro Selezione filtro, crea una query che recuperi solo le voci di log che vuoi conteggiare nella metrica.

    Per l'esempio "stack-doctor", la query per log_based_latency potrebbe includere:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="slept for"
    

    Specifica i seguenti campi per la query di filtro:

    • Nome campo: json.message
    • Espressione regolare: \s(\d*)\s

      La stringa messaggio per le richieste completate ha il formato "nl" per n ms". L'espressione regolare estrae il valore di latenza n dalla stringa.

  6. Ignora il riquadro Etichette per questo esempio.

  7. Fai clic su Crea metrica per completare la procedura.

Per ulteriori informazioni sulla creazione delle metriche di distribuzione basate su log, consulta Creazione di metriche di distribuzione.

SLI di disponibilità

In Cloud Monitoring, espressi uno SLI di disponibilità basato su richiesta utilizzando una struttura TimeSeriesRatio. L'esempio seguente mostra uno SLO che utilizza le metriche log_based_total_requests e log_based_errors nel rapporto. Questo SLO prevede che il rapporto tra le richieste "buone" e "totali" sia almeno del 98% in un periodo continuativo di 24 ore:

{
 "serviceLevelIndicator": {
   "requestBased": {
     "goodTotalRatio": {
       "totalServiceFilter":
         "metric.type=\"logging.googleapis.com/user/log_based_total_requests\"
          resource.type=\"global\"",
       "badServiceFilter":
         "metric.type=\"logging.googleapis.com/user/log_based_errors\"
          resource.type=\"global\""
     }
   }
 },
 "goal": 0.98,
 "rollingPeriod": "86400s",
 "displayName": "Log-Based Availability"
}

SLI di latenza

In Cloud Monitoring, espressi uno SLI di latenza basato su richiesta utilizzando una struttura DistributionCut. L'esempio seguente mostra uno SLO che utilizza la metrica log_based_latency e prevede che il 98% delle richieste sia inferiore a 500 ms in un periodo continuativo di 24 ore:

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"logging.googleapis.com/user/log_based_latency\"
          resource.type=\"global\"",
        "range": {
          "min": 0,
          "max": 500
        }
      }
    }
  },
  "goal": 0.98,
  "rollingPeriod": "86400s",
  "displayName": "98% requests under 500 ms"
}

Risorse aggiuntive