Questa pagina illustra le nozioni di base della creazione di metriche OpenCensus per gli SLI di disponibilità e latenza. Fornisce inoltre esempi di implementazione di come definire gli SLO utilizzando le metriche di OpenCensus.
Nozioni di base su OpenCensus
OpenCensus è un'unica distribuzione open source di librerie, disponibile nella pagina GitHub di OpenCensus, che raccoglie automaticamente tracce e metriche e le invia a qualsiasi backend. OpenCensus può essere utilizzato per instrumentare i servizi per emettere metriche personalizzate che possono essere importate in Cloud Monitoring. Puoi quindi utilizzare queste metriche come SLI.
Per un esempio in cui viene utilizzato OpenCensus per creare metriche di Monitoring che non sono progettate specificamente come SLI, consulta Metriche personalizzate con OpenCensus.
Metriche
Per raccogliere i dati delle metriche dal servizio mediante OpenCensus, devi utilizzare i seguenti costrutti di OpenCensus:
-
Measure
, che rappresenta il tipo di metrica da registrare, specificato con un nome metrica. UnMeasure
può registrare valori Int64 o Float64. -
Measurement
: registra un punto dati specifico raccolto e scritto da unMeasure
per un particolare evento. Ad esempio, unMeasurement
potrebbe registrare la latenza di una risposta specifica. -
View
, che specifica un'aggregazione applicata a unMeasure
. OpenCensus supporta i seguenti tipi di aggregazione:- Conteggio: un conteggio del numero di punti di misurazione.
- Distribuzione: una distribuzione a istogrammi dei punti di misurazione.
- Somma: una somma dei valori di misurazione.
- LastValue: l'ultimo valore registrato dalla misurazione.
Per ulteriori informazioni, consulta Statistiche/metriche di OpenCensus. Tieni presente che OpenCensus spesso fa riferimento alle metriche come statistiche.
Strumentazione
Le librerie OpenCensus sono disponibili per diverse lingue. Per informazioni specifiche per la lingua sulla strumentazione del tuo servizio per l'emissione di metriche, consulta Supporto delle lingue OpenCensus. Inoltre, le metriche personalizzate con OpenCensus forniscono esempi per le lingue comunemente utilizzate con Monitoring.
Nel caso di base, devi procedere come segue:
- Instrumenta il tuo servizio per registrare ed esportare le metriche.
- Definisci un esportatore che riceva le metriche.
Per ogni metrica, devi definire un Measure
per specificare il tipo di valore: Int64 o Float64. Devi inoltre definire e registrare View
per specificare il tipo di aggregazione (conteggio, distribuzione, somma o ultimo valore). Per utilizzare il tipo di aggregazione della distribuzione, devi anche specificare esplicitamente i confini del bucket a istogrammi. Devi specificare anche un nome per la metrica in View
.
Esportatore
Infine, devi utilizzare un esportatore per raccogliere le metriche e scriverle in Cloud Monitoring o in un altro backend. Per informazioni sugli esportatori specifici per lingua disponibili per Monitoring, consulta Esportatori di OpenCensus.
Puoi anche scrivere un esportatore personalizzato. Per ulteriori informazioni, consulta Scrivere un esportatore personalizzato.
Creazione di metriche per gli SLI
L'applicazione deve creare metriche OpenCensus che possano essere utilizzate come SLI in Cloud Monitoring:
- Per gli SLI di disponibilità sui conteggi delle richieste e degli errori, utilizza un elemento
Measure
con aggregazione del conteggio. - Per gli SLI di latenza, utilizza un
Measure
con aggregazione di distribuzione.
Metriche per gli SLI di disponibilità
Per esprimere uno SLI di disponibilità basato su richiesta nell'API Cloud Monitoring puoi utilizzare la struttura TimeSeriesRatio
per configurare un rapporto tra richieste "valide" o "non valide" rispetto alle richieste totali. Questo rapporto viene utilizzato nel campo goodTotalRatio
di una struttura RequestBasedSli
.
L'applicazione deve creare metriche OpenCensus che possano essere utilizzate per costruire questo rapporto. Nella tua applicazione, devi creare almeno due dei seguenti elementi:
Una metrica che conteggia gli eventi totali; utilizza questa metrica nell'elemento
totalServiceFilter
del rapporto.Puoi creare una metrica OpenCensus di tipo Int64 con aggregazione dei conteggi, in cui registri un valore pari a
1
per ogni richiesta ricevuta.Una metrica che conteggia gli eventi "non validi", utilizza questa metrica nell'elemento
badServiceFilter
del rapporto.Puoi creare una metrica OpenCensus di tipo Int64 con aggregazione dei conteggi, in cui registri un valore pari a
1
per ogni errore o richiesta non riuscita.Una metrica che conteggia gli eventi "validi", utilizza questa metrica nell'elemento
goodServiceFilter
del rapporto.Puoi creare una metrica OpenCensus di tipo Int64 con aggregazione dei conteggi, in cui registri un valore pari a
1
per ogni risposta riuscita.
Metriche per gli SLI di latenza
Esprimi uno SLI di latenza basato su richiesta nell'API Cloud Monitoring utilizzando una struttura DistributionCut
. Questa struttura viene utilizzata nel campo distributionCut
di una struttura RequestBasedSli
.
Puoi creare un Measure
Int64 o Float64 con un View
utilizzando il
tipo di aggregazione di distribuzione. Devi inoltre definire esplicitamente i confini
dei bucket. Tieni presente che è fondamentale definire i bucket in modo da
misurare con precisione la percentuale di richieste che rientrano
nella soglia desiderata. Per una discussione su questo argomento, consulta
Implementazione degli SLO
nella
Guida di Site Reliability Engineering.
Esempio di implementazione
Questa sezione presenta un esempio che implementa le metriche per gli SLI di disponibilità di base e di latenza utilizzando OpenCensus in Node.js.
Strumentazione
Per consentire al tuo servizio di emettere metriche utilizzando OpenCensus:
- Includi le librerie necessarie:
Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
- Definisci e registra l'esportatore:
Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
- Definisci un valore
Measure
per ogni metrica:Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
- Definisci e registra il
View
per ogniMeasure
con il tipo di aggregazione appropriato e, per la latenza di risposta, i limiti dei bucket:
Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
- Registra i valori per le metriche di numero di richieste ed errori:
Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
- Registra i valori di latenza:
Go
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per eseguire l'autenticazione a Monitoring, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Metriche importate
Quando le metriche vengono esportate in Cloud Monitoring, vengono visualizzate come tipi di metriche con un prefisso che ne indica che hanno avuto origine da OpenCensus. Ad esempio, il nome di ogni View
di OpenCensus nell'implementazione Node.js è mappato come segue:
request_count_sli
diventacustom.googleapis.com/opencensus/request_count_sli
.error_count_sli
diventacustom.googleapis.com/opencensus/error_count_sli
.response_latency_sli
diventacustom.googleapis.com/opencensus/response_latency_sli
.
Quando il servizio è in esecuzione, puoi confermare che le metriche vengono importate in Monitoring cercandole in Metrics Explorer.
SLI di disponibilità
In Cloud Monitoring, puoi esprimere uno SLI di disponibilità basato su richiesta utilizzando una struttura TimeSeriesRatio
. L'esempio seguente mostra uno SLO che utilizza le metriche OpenCensus importate e prevede che il servizio abbia una disponibilità del 98%, come calcolato da un rapporto compreso tra error_count_sli
e request_count_sli
, in una finestra temporale continua di 28 giorni:
{
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"custom.googleapis.com/opencensus/request_count_sli\",
"badServiceFilter":
"metric.type=\"custom.googleapis.com/opencensus/error_count_sli\"
}
}
},
"goal": 0.98,
"rollingPeriod": "2419200s",
"displayName": "98% Availability, rolling 28 days"
}
SLI di latenza
In Cloud Monitoring, esprimi uno SLI di latenza basato su richiesta utilizzando una struttura DistributionCut
. L'esempio seguente mostra uno SLO che utilizza la metrica di latenza OpenCensus importata e si aspetta che il 98% delle richieste venga completato in meno di 1000 ms in una finestra temporale continuativa di un giorno:
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"custom.googleapis.com/opencensus/response_latency_sli\",
"range": {
"min": 0,
"max": 1000
}
}
}
},
"goal": 0.98,
"rollingPeriod": "86400s",
"displayName": "98% requests under 1000 ms"
}