Misura i tuoi SLO

Last reviewed 2024-03-29 UTC

Questo documento del framework dell'architettura di Google Cloud si basa sulle discussioni precedenti sugli obiettivi del livello di servizio (SLO) esplorando cosa e come misurare rispetto ai carichi di lavoro dei servizi comuni. Questo documento si basa sui concetti definiti in Componenti degli obiettivi del livello di servizio.

Decidi cosa misurare

Indipendentemente dal tuo dominio, molti servizi condividono caratteristiche comuni e possono utilizzare SLO generici. Questa sezione discute gli SLO generici per diversi tipi di servizi e fornisce spiegazioni dettagliate degli SLI applicabili a ciascun SLO.

Ognuna delle sottosezioni seguenti identifica un particolare tipo di servizio e fornisce una breve descrizione del servizio. Poi, elencate sotto ogni servizio sono possibili SLI, una definizione dell'indicatore e altre informazioni correlati allo SLI.

Servizi basati su richiesta

Questo tipo di servizio riceve una richiesta da un client (un utente o un altro servizio), esegue alcuni calcoli, eventualmente invia richieste di rete a un backend e quindi restituisce una risposta al client.

Disponibilità come SLI

La disponibilità è la proporzione di richieste valide pubblicate correttamente. Il seguente elenco contiene le informazioni da considerare quando si utilizza la disponibilità come SLI:

  • In qualità di proprietario del servizio, puoi decidere tu che cos'è una richiesta valida. Le definizioni comuni includono non di lunghezza pari a zero o è conforme a un protocollo client-server. Uno. per valutare la validità è la revisione dei codici di risposta HTTP (o RPC). Ad esempio, i codici HTTP 5xx sono errori relativi al server che vengono conteggiati ai fini di un SLO, mentre i codici 4xx sono errori del client che non vengono conteggiati.
  • Ogni codice di risposta restituito dal servizio deve essere esaminato per garantire che l'applicazione li utilizzi in modo corretto e coerente. Il codice è un indicatore accurato dell'esperienza degli utenti con il servizio? Ad esempio, come risponde un sito di e-commerce quando un utente tenta di ordinare un articolo che non è disponibile? La richiesta non va a buon fine e restituisce un messaggio di errore? Il sito suggerisce prodotti simili? I codici di errore devono essere legati alle aspettative degli utenti.
  • Gli sviluppatori possono inavvertitamente fare un uso improprio degli errori. Utilizza il valore out-of-stock del punto precedente, uno sviluppatore potrebbe restituire per errore . Tuttavia, il sistema funziona correttamente e non presenta errori. Il codice deve restituire un messaggio di successo, anche se l'utente non è riuscito ad acquistare l'articolo. Anche se i proprietari dei servizi devono essere informati dello scarso inventario, l'impossibilità di effettuare una vendita non è un errore dal punto di vista del cliente non conta ai fini di uno SLO.
  • Un esempio di servizio più complesso è quello che gestisce richieste asincrone o fornisce ai clienti un processo di lunga durata. Sebbene sia possibile mostrare la disponibilità in un altro modo, ti consigliamo di rappresentarla come la proporzione di richieste valide andate a buon fine. La disponibilità può essere anche definita come il numero di minuti di esecuzione del carico di lavoro di un cliente (a volte indicato come approccio dei minuti buoni).
  • Prendi in considerazione un servizio che offre macchine virtuali (VM). Puoi misurare la disponibilità in termini di numero di minuti dopo una richiesta iniziale che la VM è disponibile per l'utente.

Latenza come SLI

La latenza (o velocità) è la proporzione di richieste valide gestite più velocemente rispetto a una soglia. Pertanto, la latenza indica la velocità del servizio e può misurata calcolando la differenza tra i tempi di inizio e di fine di una un determinato tipo di richiesta. Ricorda che si tratta della percezione della latenza da parte dell'utente e che i proprietari di servizi misurano comunemente questo valore con troppa precisione. In realtà, gli utenti non riesce a distinguere tra un aggiornamento di 100 millisecondi (ms) e un aggiornamento di 300 ms e potrebbe accettare risposte comprese tra 300 ms e 1000 ms come al solito. Per ulteriori informazioni, consulta il modello ferroviario.

Sviluppa metriche basate sull'attività e incentrate sull'utente. Di seguito sono riportati alcuni esempi di queste metriche:

  • Interattivo: un utente attende 1000 ms per un risultato dopo aver fatto clic su un elemento.
  • Scrittura: una modifica a un sistema distribuito sottostante richiede 1500 ms. Mentre questo periodo di tempo è considerato lento, gli utenti tendono ad accettarlo. Ti consigliamo di distinguere esplicitamente tra scritture e letture nelle tue metriche.
  • In background: le azioni non visibili all'utente, come un aggiornamento periodico dei dati o altre richieste asincrone, non richiedono più di 5000 ms per essere completate.

La latenza viene comunemente misurata come distribuzione e come indicato in Scegliere gli SLI. Data una distribuzione, puoi misurare vari percentili. Ad esempio, potresti misurare il numero di richieste più lente rispetto al percentile 99 storico. Gli eventi che superano questa soglia sono considerati buoni; più lento non sono considerate buone. Imposta questa soglia in base al prodotto i tuoi requisiti. Puoi anche impostare più SLO di latenza, ad esempio tipici di latenza e latenza di coda.

Non utilizzare solo la latenza media (o mediana) come SLI. Se la latenza mediana è troppo lenta, metà dei tuoi utenti non è già soddisfatta. Inoltre, il tuo servizio possono riscontrare una scarsa latenza per alcuni giorni prima che tu rilevi il problema. Pertanto, definisci lo SLO per la latenza finale (95° percentile) e per la latenza mediana (50° percentile).

Nell'articolo di ACM Metrics That Matter, Benjamin Treynor Sloss scrive quanto segue:

  • "Una buona regola pratica ... è che la latenza al 99° percentile non dovrebbe essere più di tre a cinque volte la latenza mediana."
  • "Troviamo le misure di latenza del 50°, 95° e 99° percentile per un ogni servizio ha un valore individuale e idealmente imposteremo gli SLO su su ciascuno".

Determina le soglie di latenza in base ai percentili storici, quindi misura e quante richieste rientrano in ogni bucket. Questo approccio è un buon modello per seguire.

Qualità come SLI

La qualità è la proporzione di richieste valide che vengono gestite senza un peggioramento del servizio. Ad esempio, la qualità è uno SLI utile per attività complesse e che sono progettati per eseguire gli errori in modo controllato. Per spiegarci meglio, consideriamo un modello pagina che carica il contenuto principale da un datastore e carica asset facoltativi da altri 100 servizi e datastore. Se uno degli elementi facoltativi non è attivo o è troppo lento, la pagina viene comunque visualizzata senza gli elementi facoltativi. In questo scenario, puoi utilizzare gli SLI per:

  • Misurando il numero di richieste che ricevono una risposta ridotta (una risposta senza risposta da almeno un servizio di backend), puoi segnalare il rapporto tra richieste errate.
  • Puoi monitorare il numero di risposte a cui manca una risposta da un singolo backend o da più backend.

Servizi di elaborazione dati

Questi servizi consumano dati da un input, li elaborano e generano un output. Le prestazioni del servizio nei passaggi intermedi non sono importanti quanto come risultato finale. Gli SLI più importanti sono aggiornamento, copertura, correttezza e throughput. La latenza e la disponibilità sono meno utili.

Aggiornamento come SLI

L'aggiornamento è la proporzione di dati validi aggiornati più di recente rispetto a una soglia. L'elenco seguente fornisce alcuni esempi di utilizzo dell'aggiornamento come SLI:

  • In un sistema batch, l'aggiornamento è misurato come il tempo trascorso durante ha completato correttamente l'elaborazione per un determinato output.
  • Nell'elaborazione in tempo reale o in sistemi più complessi, l'aggiornamento tiene traccia dell'età dei record più recenti elaborati in una pipeline.
  • In un gioco online che genera riquadri di mappe in tempo reale, gli utenti potrebbero non notare la velocità con cui vengono creati i riquadri della mappa, ma potrebbero notare quando i dati mancano o non sono aggiornati. In questo caso, le tracce di aggiornamento mancanti di dati inattivi.
  • In un servizio che legge i record da un sistema di monitoraggio per generare il messaggio "X articoli disponibili" per un sito web di e-commerce, si potrebbe definire uno SLI di aggiornamento come percentuale di richieste che utilizzano le richieste aggiornate di recente (entro il all'ultimo minuto) le informazioni sulle azioni.
  • Puoi anche utilizzare una metrica per la pubblicazione di dati non aggiornati per aggiornare SLI per la qualità.

Copertura come SLI

La copertura è la proporzione di dati validi elaborati correttamente.

Per definire la copertura:

  1. Determina se accettare un input come valido o saltarlo. Ad esempio, se un record di input è danneggiato o di lunghezza pari a zero e non può essere elaborato, potresti considerarlo non valido come metrica.
  2. Conta il numero di record validi. Questo conteggio può essere eseguito con un semplice metodo *count() * e rappresenta il numero totale di record.
  3. Infine, conta il numero di record che sono stati elaborati correttamente con il numero totale di record validi. Questo valore è il tuo SLI per la copertura.

Correttezza come SLI

La correttezza è la proporzione di dati validi che hanno prodotto un output corretto. Tieni presenti i seguenti punti quando utilizzi la correttezza come SLI:

  • In alcuni casi, i metodi per determinare la correttezza di un output sono utilizzata per convalidare l'elaborazione dell'output. Ad esempio, un sistema che ruota o colora un'immagine non deve mai produrre un'immagine di zero byte o un'immagine con una lunghezza o una larghezza pari a zero. È importante separare questa fase di convalida dalla logica di elaborazione stessa.
  • Un metodo per misurare un SLI di correttezza consiste nell'utilizzare i dati di input di test validi noti. Questo tipo di dati produce un output corretto noto. Ricorda che i dati di input devono essere rappresentativi dei dati utente.
  • In altri casi, è possibile utilizzare un controllo matematico o logico rispetto l'output, come nell'esempio precedente sulla rotazione di un'immagine.
  • Infine, prendi in considerazione un sistema di fatturazione che determina la validità della transazione controllando la differenza tra il saldo prima e dopo una transazione. Se corrisponde al valore della transazione stessa, si tratta di una transazione valida.

Velocità effettiva come SLI

La velocità effettiva è la proporzione di tempo in cui la velocità di elaborazione dei dati è stata più veloce rispetto alla soglia. Ecco alcuni punti da considerare quando si utilizza il throughput come un SLI:

  • La velocità effettiva in un sistema di elaborazione dati è spesso più rappresentativo che una singola misurazione della latenza per una determinata operazione. Se le dimensioni di ogni input variano notevolmente, potrebbe non avere senso confrontare Il tempo impiegato da ogni elemento per completare il processo (se tutti i job avanzano a un livello percentuale).
  • I byte al secondo sono un modo comune per misurare la quantità di lavoro necessaria per elaborare i dati, indipendentemente dalle dimensioni del set di dati. Ma qualsiasi metrica che scala più o meno in modo lineare rispetto al costo di elaborazione.
  • Potrebbe essere utile partizionare i sistemi di elaborazione dei dati in base velocità effettiva previste. In alternativa, implementa un sistema di qualità del servizio che garantisca che gli input di alta priorità vengano gestiti e quelli di bassa priorità messi in coda. In ogni caso, misurando la velocità effettiva come definito aiuta a determinare se il sistema funziona all'interno dello SLO.

Servizi di esecuzione pianificata

Per i servizi che devono eseguire un'azione a intervalli regolari (ad esempio i job cron di Kubernetes), misura lo scostamento e la durata dell'esecuzione. Di seguito è riportato un esempio di cron job pianificato di Kubernetes:

  apiVersion: batch/v1beta1
  kind: CronJob
  metadata:
  name: hello
  spec:
schedule: "0 * * * *"

Skew come SLI

Il disallineamento è la proporzione di esecuzioni che iniziano entro una finestra accettabile di l'ora di inizio prevista. Quando utilizzi il disallineamento, considera quanto segue:

  • Il disallineamento misura la differenza di tempo tra il momento in cui è pianificato l'inizio di un job e l'ora di inizio effettiva. Prendi in considerazione l'esempio di cron job Kubernetes precedente. Se è impostato per iniziare al minuto zero di ogni ora, ma inizia tre minuti dopo l'ora, lo scostamento è di tre minuti. Quando un job viene eseguito in anticipo, si verifica uno scostamento negativo.
  • Puoi misurare la distorsione come distribuzione nel tempo, con intervalli accettabili corrispondenti che definiscono una buona distorsione. Per determinare lo SLI, confronta di esecuzioni entro un buon intervallo.

Durata dell'esecuzione come SLI

La durata dell'esecuzione è la proporzione di esecuzioni completate nell'intervallo di durata accettabile. Di seguito sono riportati concetti importanti relativi all'utilizzo della durata dell'esecuzione:

  • La durata di esecuzione è il tempo impiegato da un job per essere completato. Per una determinata esecuzione, una modalità di errore comune si verifica quando la durata effettiva supera quella pianificata.
  • Un caso interessante è l'applicazione di questo SLI a un job infinito. Poiché questi job non terminano, registra il tempo impiegato per un determinato job anziché aspettare il completamento di un job. Questo approccio fornisce una distribuzione accurata del tempo necessario per completare il lavoro, anche negli scenari peggiori.
  • Come per il disallineamento, puoi monitorare la durata dell'esecuzione come distribuzione e definire limiti superiori e inferiori accettabili per gli eventi validi.

Metriche per altri tipi di impianto

Molti altri carichi di lavoro hanno le proprie metriche per generare SLI e SLO. Considera i seguenti esempi:

  • Sistemi di archiviazione: durabilità, velocità effettiva, time to primo byte, blob la disponibilità del servizio.
  • Contenuti multimediali/video: continuità della riproduzione del client, tempo per avviare la riproduzione. completezza dell'esecuzione del grafico di transcodifica.
  • Giochi: è ora di abbinare i giocatori attivi, è ora di generare una mappa.

Decidere come eseguire la misurazione

La sezione precedente ha trattato gli elementi che stai misurando. Dopo aver determinato cosa misurare, puoi decidere come misurare. Puoi raccogliere le metriche SLI in diversi modi. Le seguenti sezioni illustrano i vari metodi di misurazione, fornire una breve descrizione del metodo, elencare i vantaggi del metodo e svantaggi e identificare gli strumenti di implementazione appropriati per il metodo.

Logging lato server

Il metodo di logging lato server prevede l'elaborazione dei log lato server di richieste o dati elaborati.

Log lato server Dettagli
Vantaggi
  • Esegui nuovamente l'elaborazione dei log esistenti per eseguire il backfill dei record SLI storici.
  • Utilizzare identificatori di sessione tra servizi per ricostruire gli utenti complessi per i vari servizi tra più servizi.
Svantaggi
  • Le richieste che non arrivano al server non vengono registrate.
  • Le richieste che causano l'arresto anomalo di un server potrebbero non essere registrate.
  • Il tempo necessario per elaborare i log può causare SLI inattivi, che potrebbero essere dati inadeguati per una risposta operativa.
  • La scrittura di codice nei log di elaborazione può essere un'attività soggetta a errori e che richiede molto tempo.
Metodo di implementazione e strumenti

Metriche del server delle applicazioni

Il metodo delle metriche del server delle applicazioni prevede l'esportazione delle metriche dello SLI dal codice che gestisce le richieste degli utenti o elabora i loro dati.

Metriche del server delle applicazioni Dettagli
Vantaggi
  • L'aggiunta di nuove metriche al codice è in genere rapida e poco costosa.
Svantaggi
  • Le richieste che non raggiungono i server delle applicazioni non vengono registrate.
  • Le richieste di più servizi potrebbero essere difficili da monitorare.
Metodo e strumenti di implementazione

Metriche dell'infrastruttura frontend

Il metodo delle metriche dell'infrastruttura frontale utilizza le metriche dell'infrastruttura di bilanciamento del carico (ad esempio, un bilanciatore del carico globale Google Cloud).

Metriche di infrastruttura frontend Dettagli
Vantaggi
  • Spesso esistono già metriche e dati storici, il che riduce il lavoro tecnico necessario per iniziare.
  • Le misurazioni vengono effettuate nel punto più vicino al cliente ancora all'interno dell'infrastruttura di distribuzione.
Svantaggi
  • Non è fattibile per gli SLI di elaborazione dei dati.
  • Può solo approssimare i percorsi degli utenti con richieste multiple.
Metodo e strumenti di implementazione

Dati o client sintetici

Il metodo client o dati sintetici prevede l'utilizzo di client che inviano richieste inventate a intervalli regolari e convalida le risposte.

Dati o client sintetici Dettagli
Vantaggi
  • Misura tutte le fasi di un percorso di una richiesta con più utenti.
  • L'invio di richieste dall'esterno dell'infrastruttura acquisisce una parte maggiore del percorso di richiesta complessivo nell'SLI.
Svantaggi
  • L'approssimazione dell'esperienza utente con richieste sintetiche potrebbe essere fuorviante (sia falsi positivi che falsi negativi).
  • Gestire tutti i casi limite è difficile e può trasformarsi in test di integrazione.
  • I target di affidabilità elevata richiedono probe frequenti per una misurazione accurata.
  • Il traffico delle sonde può nascondere il traffico reale.
Metodo e strumenti di implementazione

Strumentazione client

Il metodo di strumentazione del client prevede l'aggiunta di funzionalità di osservabilità al client con cui interagisce l'utente e la registrazione degli eventi nella tua infrastruttura di pubblicazione che monitora gli SLI.

Strumentazione client Dettagli
Vantaggi
  • Fornisce la misura più accurata dell'esperienza utente.
  • Può quantificare l'affidabilità di terze parti, ad esempio CDN o fornitori di servizi di pagamento.
Svantaggi
  • La latenza di importazione ed elaborazione dei log dei client rende questi SLI inadatti all'attivazione di una risposta operativa.
  • Le misurazioni SLI contengono una serie di fattori altamente variabili potenzialmente non direttamente controllabili.
  • L'integrazione della strumentazione nel cliente può richiedere molto lavoro ingegneristico.
Metodo di implementazione e strumenti

Scegliere un metodo di misurazione

Dopo aver deciso cosa e come misurare lo SLO, il passaggio successivo consiste nel scegliere un metodo di misurazione che sia il più in linea con l'esperienza del cliente con il tuo servizio e che richieda il minor impegno da parte tua. A per raggiungere questo ideale, potresti dover utilizzare una combinazione dei metodi nella nelle tabelle precedenti. Ecco alcuni approcci suggeriti che puoi implementare nel tempo, elencati in ordine crescente:

  • Utilizza le esportazioni del server di applicazioni e le metriche dell'infrastruttura. In genere, puoi accedervi immediatamente e forniscono rapidamente un valore. Alcuni strumenti di APM includono strumenti SLO integrati.
  • Utilizza la strumentazione client. Poiché in genere i sistemi legacy mancano la strumentazione client integrata per l'utente finale, la configurazione della strumentazione potrebbe richiedono un investimento significativo. Tuttavia, se utilizzi una suite APM o un framework frontend che fornisce la misurazione del client, puoi ottenere rapidamente informazioni sulla soddisfazione dei clienti.
  • Utilizza l'elaborazione dei log. Se non riesci a implementare le esportazioni del server o l'instrumentazione del client (elenchi precedenti), ma esistono i log, l'elaborazione dei log potrebbe essere il tuo approccio migliore. Un altro metodo consiste nel combinare le esportazioni e l'elaborazione dei log. Utilizza le esportazioni come origine immediata per alcuni SLI (ad esempio la disponibilità immediata) e l'elaborazione dei log per gli indicatori a lungo termine (ad esempio gli avvisi a lenta combustione descritti nella guida SLO e avvisi).
  • Implementa test sintetici. Dopo aver acquisito una conoscenza di base di come i clienti utilizzano il tuo servizio, testa il servizio. Ad esempio, puoi account di test seed con dati validi noti ed eseguire query su di essi. Questo approccio può evidenziano le modalità di errore non immediatamente osservate, come ad esempio e i servizi a traffico ridotto.

Passaggi successivi