Questo documento introduce le strutture utilizzate per rappresentare i servizi e gli SLO nell'API SLO e le mappa ai concetti descritti in generale nella sezione Concetti nel monitoraggio dei servizi.
L'API SLO viene utilizzata per configurare gli obiettivi del livello del servizio (SLO) per monitorare l'integrità dei servizi.
Service Monitoring aggiunge le seguenti risorse all'API Monitoring:
Per informazioni su come richiamare l'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 di
BasicService
. - Un oggetto di configurazione della telemetria fornito dal sistema
Per definire un servizio di base, devi specificare il tipo di servizio e fornire un insieme di etichette specifiche del servizio che descrivono il servizio:
{ "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 campo serviceType
è uno dei seguenti:
APP_ENGINE
CLOUD_ENDPOINTS
CLUSTER_ISTIO
ISTIO_CANONICAL_SERVICE
CLOUD_RUN
Ciascuno di questi tipi di servizio utilizza l'indicatore del livello del servizio di 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" }, }, }
Istio per i cluster
{ "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 del servizio GKE
create sul tipo BasicService
, in cui il valore
del campo serviceType
è uno dei seguenti:
GKE_NAMESPACE
GKE_WORKLOAD
GKE_SERVICE
Per questi tipi di servizi devi definire gli SLI. Non possono utilizzare gli indicatori del livello del servizio di BasicSli
.
Per saperne di più, 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" } }, }
Carico di lavoro 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": {} }
Per questi tipi di servizi devi definire gli SLI. Non possono utilizzare gli indicatori del livello del servizio di BasicSli
.
Per saperne di più, 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 su una metrica acquisita dal servizio. Il modo esatto in cui viene definito lo SLI dipende dal tipo di metrica utilizzata come metrica dell'indicatore, ma in genere si tratta di un confronto tra i risultati accettabili e i risultati totali.
Uno SLI è rappresentato dall'oggetto ServiceLevelIndicator
. Questo oggetto è un modo collettivo per fare riferimento ai tre tipi di SLI supportati:
Uno SLI di base, 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 richiesta, che puoi utilizzare per conteggiare gli eventi che rappresentano un servizio accettabile. L'utilizzo di questo tipo di SLI è descritto in SLO basati su richiesta; è rappresentato da un oggetto
RequestBasedSli
.Uno SLI basato su finestra, che puoi utilizzare per contare i periodi di tempo che soddisfano alcuni criteri di idoneità. L'utilizzo di questo tipo di SLI è descritto negli SLO basati su Windows ed è rappresentato da un oggetto
WindowsBasedSli
.
Ad esempio, di seguito viene mostrato uno SLI di disponibilità di base:
{ "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }
Strutture per 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 risultati positivi e il numero totale di richieste.
Esistono due modi per creare uno SLI basato su richiesta:
- Come
TimeSeriesRatio
, quando il rapporto tra buon servizio e servizio totale viene calcolato a partire da due serie temporali i cui valori hanno un tipo di metrica diDELTA
oCUMULATIVE
. - Come
DistributionCut
, quando le serie temporali hanno il tipo di valoreDISTRIBUTION
e i cui valori hanno un tipo di metricaDELTA
oCUMULATIVE
. Il valore Good-service indica il conteggio degli elementi che rientrano nei bucket degli istogrammi in un intervallo specificato, mentre il totale è il conteggio di tutti i valori nella distribuzione.
Di seguito viene mostrata la rappresentazione JSON di uno SLI che utilizza un rapporto di 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 in cui 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 uno stato HTTP 2xx rispetto al numero totale di richieste.
Di seguito viene mostrata la rappresentazione JSON di uno SLI che utilizza un taglio di 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 di un'etichetta della metrica:
- Risorsa:
https_lb_rule
- Tipo di metrica:
loadbalancing.googleapis.com/https/backend_latencies
- Coppia etichetta-valore:
response_code_class
=200
L'intervallo di latenze considerate valide è 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 SLI basati su finestre
Uno SLI basato su finestre conteggia le finestre temporali in cui il servizio fornito è considerato valido. Il criterio per determinare il livello di servizio fa parte della definizione dello SLI.
Tutti gli SLI basati su finestre includono un periodo di finestra, 60-86.400 secondi (1 giorno).
Esistono due modi per specificare il criterio Good Service per uno SLI basato su Windows:
- Crea una stringa di filtro, descritta in Filtri di monitoraggio, che
restituisce una serie temporale con valori booleani. Una finestra è buona se il relativo valore
è
true
. Questo filtro è chiamatogoodBadMetricFilter
. Crea un oggetto
PerformanceThreshold
che rappresenta una soglia per prestazioni accettabili. Questo oggetto viene specificato come valore dell'elementogoodTotalRatioThreshold
.Un oggetto
PerformanceThreshold
specifica un valore di soglia e uno SLI di prestazioni. Se il valore dello SLI di prestazioni soddisfa o supera il valore di soglia, la finestra temporale viene considerata buona.Esistono due modi per specificare lo SLI delle prestazioni:
- Come oggetto
BasicSli
nel campobasicPerformanceSli
. - Come oggetto
RequestBasedSli
nel campoperformance
. Se utilizzi uno SLI basato su richiesta, il tipo di metrica dello SLI deve essereDELTA
oCUMULATIVE
. Non puoi utilizzare le metricheGAUGE
negli SLI basati su richieste.
- Come oggetto
Di seguito viene mostrata la rappresentazione JSON di uno SLI basato su finestre creata con una soglia di prestazioni per uno SLI di disponibilità di base:
{ "windowsBased": { "goodTotalRatioThreshold": { "threshold": 0.9, "basicSliPerformance": { "availability": {}, "location": [ "us-central1-c" ] } }, "windowPeriod": "300s" } }
Questo SLI specifica buone prestazioni come una finestra di 5 minuti in cui la disponibilità raggiunge il 90% o una migliore. La struttura di uno SLI di base è illustrata negli indicatori del livello di servizio.
Puoi anche incorporare uno SLI basato su richiesta nello SLI basato su finestre. Per ulteriori informazioni sulle strutture incorporate, consulta Strutture per gli SLI basati su richiesta.
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
- Lo SLI di destinazione; un oggetto
ServiceLevelIndicator
incorporato - L'obiettivo di prestazioni per lo SLI
- Il periodo di conformità per lo SLI
Di seguito viene mostrata la rappresentazione JSON di uno SLO che utilizza uno 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 a una disponibilità del 98% su un periodo di una settimana.