Questo documento introduce le strutture utilizzate per rappresentare i servizi e gli SLO nell'API SLO e li mappa ai concetti descritti in generale in Concetti di monitoraggio dei servizi.
L'API SLO viene utilizzata per configurare gli obiettivi del livello di servizio (SLO) che possono essere utilizzati per monitorare l'integrità dei servizi.
Il monitoraggio dei servizi aggiunge le seguenti risorse all'API Monitoring:
Per informazioni sull'invocazione dell'API, consulta Utilizzo dell'API.
Servizi
Un servizio è rappresentato da un oggetto Service
.
Questo oggetto include i seguenti campi:
- Un nome: un nome risorsa completo per questo servizio
- Un nome visualizzato: un'etichetta da utilizzare nei componenti della console
- Una struttura per uno dei tipi
BasicService
. - Un oggetto di configurazione della telemetria fornito dal sistema
Per definire un servizio di base, specifica il tipo di servizio e fornisci un insieme di etichette specifiche del servizio che lo descrivono:
{ "serviceType": string, "serviceLabels": { string: string, ... } }
Le sezioni seguenti forniscono esempi per ogni tipo di servizio.
Tipi di servizi di base
Questa sezione fornisce esempi di definizioni di servizi basate sul tipo
BasicService
, in cui il valore del
serviceType
è uno dei seguenti:
APP_ENGINE
CLOUD_ENDPOINTS
CLUSTER_ISTIO
ISTIO_CANONICAL_SERVICE
CLOUD_RUN
Ognuno di questi tipi di servizio utilizza l'indicatore del livello del servizio BasicSli
.
App Engine
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "APP_ENGINE", "serviceLabels": { "module_id": "MODULE_ID" }, }, }
Cloud Endpoints
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLOUD_ENDPOINTS", "serviceLabels": { "service": "SERVICE" }, }, }
Cluster Istio
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLUSTER_ISTIO", "serviceLabels": { "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "service_namespace": "SERVICE_NAMESPACE", "service_name": "SERVICE_NAME" }, }, }
Servizio canonico Istio
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "ISTIO_CANONICAL_SERVICE", "serviceLabels": { "mesh_uid": "MESH_UID", "canonical_service_namespace": "CANONICAL_SERVICE_NAMESPACE", "canonical_service": "CANONICAL_SERVICE" }, }, }
Cloud Run
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLOUD_RUN", "serviceLabels": { "service_name": "SERVICE_NAME", "location": "LOCATION" }, }, }
Tipi di servizi GKE di base
Questa sezione contiene esempi di definizioni di servizi GKE basate sul tipo BasicService
, in cui il valore del campo serviceType
è uno dei seguenti:
GKE_NAMESPACE
GKE_WORKLOAD
GKE_SERVICE
Devi definire gli SLI per questi tipi di servizi. Non possono utilizzare
gli indicatori del livello di servizio BasicSli
.
Per ulteriori informazioni, consulta Indicatori del livello del servizio.
Spazio dei nomi GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_NAMESPACE", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME" } }, }
Workload GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_WORKLOAD", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME", "top_level_controller_type": "TOPLEVEL_CONTROLLER_TYPE", "top_level_controller_name": "TOPLEVEL_CONTROLLER_NAME", } }, }
Servizio GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_SERVICE", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME", "service_name": "SERVICE_NAME" } }, }
Servizi personalizzati
Puoi creare servizi personalizzati se nessuno dei tipi di servizi di base è adatto. Un servizio personalizzato ha il seguente aspetto:
{ "displayName": "DISPLAY_NAME", "custom": {} }
Devi definire gli SLI per questi tipi di servizi. Non possono utilizzare
gli indicatori del livello di servizio BasicSli
.
Per ulteriori informazioni, consulta Indicatori del livello del servizio.
Indicatori del livello del servizio
Un indicatore del livello del servizio (SLI) fornisce una misura delle prestazioni di un servizio. Uno SLI si basa sulla metrica acquisita dal servizio. La modalità esatta di definizione dell'SLI dipende dal tipo di metrica utilizzata come metrica dell'indicatore, ma in genere si tratta di un confronto tra risultati accettabili e risultati totali.
Un SLI è rappresentato dall'oggetto
ServiceLevelIndicator
. Questo oggetto è un modo collettivo per fare riferimento ai tre tipi di indicatori di prestazioni dei servizi supportati:
Un SLI di base, che viene creato automaticamente per le istanze del tipo di servizio
BasicService
. Questo tipo di SLI è descritto in Obiettivi del livello di servizio. È rappresentato da un oggettoBasicSli
e misura la disponibilità o la latenza.Uno SLI basato su richieste, che puoi utilizzare per conteggiare gli eventi che rappresentano un servizio accettabile. L'utilizzo di questo tipo di SLI è descritto in SLO basati su richieste. È rappresentato da un oggetto
RequestBasedSli
.Uno SLI basato su finestre, che puoi utilizzare per conteggiare i periodi di tempo chesoddisfano un criterio di idoneità. L'utilizzo di questo tipo di SLI è descritto in SLO basati su Windows. È rappresentato da un oggetto
WindowsBasedSli
.
Ad esempio, di seguito è riportato un SLI di disponibilità di base:
{ "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }
Strutture per gli SLI basati su richiesta
Uno SLI basato su richiesta si basa su una metrica che conteggia le unità di servizio come rapporto tra un determinato risultato e il totale. Ad esempio, se utilizzi una metrica che conteggia le richieste, puoi creare il rapporto tra il numero di richieste che restituiscono un risultato positivo e il numero totale di richieste.
Esistono due modi per creare un SLI basato su richieste:
- Come
TimeSeriesRatio
, quando il rapporto tra servizio buono e servizio totale viene calcolato da due serie temporali i cui valori hanno un tipo di metricaDELTA
oCUMULATIVE
. - Come
DistributionCut
, quando la serie temporale ha il tipo di valoreDISTRIBUTION
e i cui valori hanno un tipo di metricaDELTA
oCUMULATIVE
. Il valore del servizio di buona qualità è il conteggio degli elementi che rientrano nei bucket dell'istogramma in un intervallo specificato e il totale è il conteggio di tutti i valori nella distribuzione.
Di seguito è riportata la rappresentazione JSON di un SLI che utilizza un rapporto delle serie temporali:
{ "requestBased": { "goodTotalRatio": { "totalServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count"", "goodServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count" metric.label.response_code_class=200", } } }
Le serie temporali in questo rapporto sono identificate dalla coppia di tipo di risorsa monitorata e tipo di metrica:
- Risorsa:
https_lb_rule
- Tipo di metrica:
loadbalancing.googleapis.com/https/request_count
Il valore di totalServiceFilter
è rappresentato dalla coppia di
metrica e tipo di risorsa. Il valore di goodServiceFilter
è rappresentato dalla stessa coppia, ma alcune etichette hanno un valore particolare; in questo caso, quando il valore dell'etichetta response_code_class
è 200
.
Il rapporto tra i filtri misura il numero di richieste che restituiscono un stato HTTP 2xx rispetto al numero totale di richieste.
Di seguito è riportata la rappresentazione JSON di un SLI che utilizza un taglio della distribuzione:
{ "requestBased": { "distribution_cut": { "distribution_filter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/backend_latencies" metric.label.response_code_class=200", "range": { "min": "-Infinity", "max": 500.0 } } } }
La serie temporale è identificata dal tipo di risorsa monitorata, dal tipo di metrica e dal valore per un'etichetta della metrica:
- Risorsa:
https_lb_rule
- Tipo di metrica:
loadbalancing.googleapis.com/https/backend_latencies
- Coppia di etichette:
response_code_class
=200
L'intervallo di latenze considerato buono è indicato dal campo range
.
Questo SLI calcola il rapporto tra le latenze delle risposte di classe 2xx inferiori a 500
e le latenze di tutte le risposte di classe 200.
Strutture per gli SLI basati su finestre
Uno SLI basato su finestre conteggia le finestre di tempo in cui il servizio fornito è considerato buono. Il criterio per determinare la qualità del servizio fa parte della definizione di SLI.
Tutti gli SLI basati su finestre includono un periodo di finestra compreso tra 60 e 86.400 secondi (1 giorno).
Esistono due modi per specificare il criterio di servizio adeguato per un SLI basato su finestre:
- Crea una stringa filtro, descritta in Filtri di monitoraggio, che
restituisce una serie temporale con valori booleani. Una finestra è buona se il valore corrispondente è
true
. Questo filtro è chiamatogoodBadMetricFilter
. Crea un oggetto
PerformanceThreshold
che representi una soglia per il rendimento accettabile. Questo oggetto viene specificato come valore digoodTotalRatioThreshold
.Un oggetto
PerformanceThreshold
specifica un valore di soglia e un SLI per le prestazioni. Se il valore dell'SLI delle prestazioni soddisfa o supera il valore di soglia, la finestra temporale viene considerata buona.Esistono due modi per specificare l'SLI sul rendimento:
- Come oggetto
BasicSli
nel campobasicPerformanceSli
. - Come oggetto
RequestBasedSli
nel campoperformance
. Se utilizzi un SLI basato su richiesta, il tipo di metrica deve essereDELTA
oCUMULATIVE
. Non puoi utilizzare le metricheGAUGE
negli SLI basati su richiesta.
- Come oggetto
Di seguito è riportata la rappresentazione JSON di un SLI basato su Windows creato su una soglia di prestazioni per un SLI di disponibilità di base:
{ "windowsBased": { "goodTotalRatioThreshold": { "threshold": 0.9, "basicSliPerformance": { "availability": {}, "location": [ "us-central1-c" ] } }, "windowPeriod": "300s" } }
Questo SLI specifica un buon rendimento come una finestra di 5 minuti in cui la disponibilità raggiunge il 90% o più. La struttura di un SLI di base è illustrata in Indicatori del livello del servizio.
Puoi anche incorporare un SLI basato su richiesta nello SLI basato su finestre. Per ulteriori informazioni sulle strutture incorporate, consulta la sezione Strutture per gli SLI basati su richieste.
Obiettivi del livello di servizio
Un obiettivo del livello di servizio (SLO) è rappresentato da un oggetto
ServiceLevelObjective
. Questo oggetto include i seguenti campi:
- Un nome
- Un nome visualizzato
- L'SLI target; un oggetto
ServiceLevelIndicator
incorporato - L'obiettivo di rendimento per l'SLI
- Il periodo di conformità per l'SLI
Di seguito è riportata la rappresentazione JSON di un'SLO che utilizza un SLI di disponibilità di base come valore del campo serviceLevelIndicator
:
{ "name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ", "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.98, "calendarPeriod": "WEEK", "displayName": "98% Availability in Calendar Week" }
Questo SLO imposta l'obiettivo di prestazioni sulla disponibilità del 98% su un periodo di una settimana.