Questa pagina illustra le nozioni di base sull'invio dei log per creare disponibilità e gli SLI di latenza. Fornisce inoltre esempi di implementazione relativi alla definizione degli SLO utilizzando metriche basate su log.
L'uso di elementi di dati nelle voci di log per creare indicatori del livello del servizio è uno per sfruttare i payload di log esistenti. In caso contrario, aggiungere il logging a un servizio esistente, il che potrebbe essere più semplice rispetto creando la strumentazione delle metriche.
Log e metriche
I log raccolgono record chiamati voci di log che descrivono eventi specifici che avvengono nei sistemi informatici. I log sono scritti dal codice e dalla piattaforma su cui è in esecuzione il codice (ad esempio, Dataflow) e infrastruttura da cui dipende la piattaforma (ad esempio, Compute Engine di Compute Engine).
Poiché i log nei sistemi moderni provengono da... lo sono ancora: file di testo scritti su disco, una voce di log analoga a una riga in un file di log e può essere considerata l'unità quantistica di log.
Una voce di log è composta minimo da due cose:
- Un timestamp che indica quando si è verificato o quando si è verificato importati nel sistema di logging
- Il payload del testo, sotto forma di dati di testo non strutturati o dati strutturati, più comunemente in JSON.
I log possono anche includere metadati associati, soprattutto quando vengono importati in Cloud Logging. Questi metadati potrebbero includere la risorsa scrivere il log, il nome log e il livello di gravità per ciascuna voce.
Log
I log vengono utilizzati per due scopi principali:
- I log degli eventi descrivono eventi specifici che si verificano all'interno del sistema. Puoi utilizzare i log eventi per inviare messaggi che rassicurano gli utenti che se gli elementi funzionano bene ("attività completata") o per fornire informazioni in caso di errore ("ricevuta eccezione dal server").
- I log delle transazioni descrivono i dettagli di ogni transazione elaborata un sistema o un componente. Ad esempio, un bilanciatore del carico registra ogni richiesta che riceve, indipendentemente dal fatto che la richiesta sia stata completata correttamente o meno, e registra informazioni aggiuntive, come l'URL richiesto, la risposta HTTP codice ed eventualmente informazioni come il backend utilizzato richiesta.
Metriche
A differenza dei log, le metriche di solito non descrivono eventi specifici. Di solito, le metriche vengono utilizzate per rappresentare lo stato o l'integrità di un sistema nel tempo. Una metrica è costituita da una serie di punti dati che misurano qualcosa su il tuo sistema; ciascun punto dati include un timestamp e un valore numerico.
Alle metriche possono essere associati anche metadati; la serie di punti dati, denominata serie temporale, può includere informazioni quali il nome della metrica, una descrizione, spesso con etichette che specificano quale risorsa scrive e i dati di Google Cloud. Per informazioni sul modello di metrica di Monitoring, consulta Metriche, serie temporali e risorse.
Metriche basate su log
Le metriche basate su log sono metriche create dalle voci di log estraendo dalle voci di log, trasformandole in dati di serie temporali. Cloud Logging fornisce meccanismi per creare due tipi di metriche dalle voci di log:
Metriche contatore, che contano il numero di voci di log corrispondenti a una un filtro specifico. Puoi utilizzare una metrica sui contatori per determinare, ad esempio, il numero di richieste o errori registrati nel log.
Metriche di distribuzione, che utilizzano espressioni regolari per analizzare il payload ogni voce di log per estrarre i valori numerici come distribuzione.
Per saperne di più sulle metriche basate su log in Cloud Logging, consulta Utilizzo di metriche basate su log.
uso 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 SLI in Monitoring:
Puoi usare le metriche dei contatori basate su log per esprimere una richiesta SLI di disponibilità.
Puoi utilizzare una metrica di distribuzione basata su log per esprimere una metrica di distribuzione basata su richiesta lo SLI di latenza.
Voci di log di esempio
L'applicazione Stack Doctor è un esempio di servizio instrumentato
per emettere messaggi di log contenenti informazioni su tutte le richieste,
e latenza al servizio. Il codice del servizio sia disponibile
nel
stack-doctor
Repository GitHub.
Il servizio genera le voci di log di Cloud Logging nella directory
Log di projects/stack-doctor/logs/bunyan_log
. La voce di log per ogni tipo
include un valore message
diverso. Le voci di log per le diverse
tipi di eventi sono simili ai seguenti:
A ogni richiesta:
{ "insertId": "..........iTRVT5MOK2VOsVe31bzrTD", "jsonPayload": { "pid": 81846, "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)", "hostname": "<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": "<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": "<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": "<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" }
In base a queste voci, puoi creare metriche basate su log che contano tutti le richieste, conta gli errori e monitora la latenza delle richieste. Puoi quindi utilizzare metriche basate su log per creare SLI di disponibilità e latenza.
Creazione di metriche basate su log per gli SLI.
Prima di poter creare SLI sulle metriche basate su log, devi creare le metriche basate su log.
- Per gli SLI di disponibilità relativi ai conteggi delle richieste e degli errori, usa le metriche contatore.
- 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 cercandoli 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 di "buon" o "scarso" richieste alle richieste totali. Questo rapporto è utilizzato in
il campo goodTotalRatio
di un RequestBasedSli
alla struttura del centro di costo.
Devi creare metriche dei contatori basate su log che possono essere utilizzate per generare questo rapporto. Devi creare almeno due dei seguenti elementi:
Una metrica che conteggia il totale degli eventi. utilizza questa metrica nel parametro
totalServiceFilter
.Per i "stack-doctor" Ad esempio, puoi creare una metrica basata su log che conteggia le voci di log in cui la stringa del messaggio "richiesta effettuata" .
Una metrica che conta le parole "non corrette" utilizza questa metrica nel parametro
badServiceFilter
.Per i "stack-doctor" Ad esempio, puoi creare una metrica basata su log conta le voci di log in cui la stringa del messaggio "failure!" .
Una metrica che conta le valutazioni "buone" utilizza questa metrica nel parametro
goodServiceFilter
.Per i "stack-doctor" Ad esempio, puoi creare una metrica basata su log conta le voci di log in cui la stringa del messaggio "success!" .
Lo SLI descritto in questo esempio si basa su una metrica per le richieste totali
denominata log_based_total_requests
e una metrica per gli errori denominati
log_based_errors
.
Puoi creare metriche basate su log utilizzando la console Google Cloud, l'API Cloud Logging o Google Cloud CLI. Per creare un contatore basato su log di Google Cloud utilizzando la console Google Cloud, puoi utilizzare le procedura:
-
Nella console Google Cloud, vai alla pagina Metriche basate su log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
La pagina delle metriche basate su log mostra una tabella delle metriche definite dall'utente metriche e una tabella di metriche definite dal sistema.
Fai clic su Crea metrica sopra la tabella delle metriche definite dall'utente.
Nel riquadro Tipo di metrica, seleziona Contatore.
Nel riquadro Dettagli, assegna un nome alla nuova metrica. Per il "stack-doctor" ad esempio, inserisci
log_based_total_requests
olog_based_errors
.Puoi ignorare gli altri campi di questo esempio.
Nel riquadro Selezione filtro, crea una query che recupera solo le voci di log che vuoi conteggiare nella metrica.
Per i "stack-doctor" ad esempio, 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 per
logs_based_errors
modifica la stringa del messaggio:resource.type="global" logName="projects/stack-doctor/logs/bunyan_log" jsonPayload.message="failure!"
Fai clic su Anteprima log per verificare il filtro e, se necessario, modificarlo.
Ignora il riquadro Etichette per questo esempio.
Fai clic su Crea metrica per completare la procedura.
Per saperne di più sulla creazione di metriche dei contatori basate su log, vedi Creazione di una metrica dei contatori.
Metriche per gli SLI di latenza
Esprimi uno SLI di latenza basato sulle richieste nell'API Cloud Monitoring
utilizzando una struttura DistributionCut
, ovvero
utilizzata nel campo distributionCut
di una RequestBasedSli
alla struttura del centro di costo.
Per creare uno SLI di latenza, devi creare una metrica di distribuzione basata su log.
In questo esempio viene creata una metrica di distribuzione basata su log denominata log_based_latency.
Puoi creare metriche basate su log utilizzando la console Google Cloud, l'API Cloud Logging o Google Cloud CLI. per creare una distribuzione basata su log. di Google Cloud utilizzando la console Google Cloud, puoi utilizzare le procedura:
-
Nella console Google Cloud, vai alla pagina Metriche basate su log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
La pagina delle metriche basate su log mostra una tabella delle metriche definite dall'utente metriche e una tabella di metriche definite dal sistema.
Fai clic su Crea metrica sopra la tabella delle metriche definite dall'utente.
Nel riquadro Tipo di metrica, seleziona Distribuzione.
Nel riquadro Dettagli, assegna un nome alla nuova metrica. Per il "stack-doctor" Ad esempio, inserisci
log_based_latency
.Puoi ignorare gli altri campi di questo esempio.
Nel riquadro Selezione filtro, crea una query che recupera solo le voci di log che vuoi conteggiare nella metrica.
Per il "stack-doctor" ad esempio, 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
Il formato della stringa del messaggio per le richieste completate è "solto per n ms". L'espressione regolare estrae il valore di latenza n dalla stringa.
- Nome campo:
Ignora il riquadro Etichette per questo esempio.
Fai clic su Crea metrica per completare la procedura.
Per saperne di più sulla creazione di metriche di distribuzione basate su log, consulta Creare metriche di distribuzione.
SLI di disponibilità
In Cloud Monitoring, indichi uno SLI di disponibilità basata su richiesta utilizzando un
Struttura di TimeSeriesRatio
. Le seguenti
un esempio mostra uno SLO che utilizza log_based_total_requests
e
log_based_errors
metriche nel rapporto. Questo SLO prevede che il rapporto
Le richieste "buone" al totale sono di almeno il 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, indichi uno SLI di latenza basato sulla richiesta utilizzando un
Struttura di DistributionCut
. Le seguenti
l'esempio mostra uno SLO che utilizza la metrica log_based_latency
e si aspetta
che il 98% delle richieste è 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
- Puoi creare avvisi sui log in Stackdriver? | di Yuri Grinshteyn | Google Cloud - Community
- Configura le notifiche per le metriche basate su log | Cloud Logging
- Estrazione di valore dai log con metriche basate su log