Questo documento descrive come gestire i servizi e gli obiettivi del livello di servizio (SLO) utilizzando l'API Cloud Monitoring.
Service Monitoring aggiunge le seguenti risorse all'API Monitoring:
Questo documento si riferisce a queste aggiunte collettivamente come API SLO e illustra gli utilizzi principali. Per una panoramica generale delle strutture nell'API SLO, consulta Costrutti nell'API. Il materiale di riferimento completo viene visualizzato in API Cloud Monitoring v3.
Puoi utilizzare l'API SLO per:
Crea e gestisci i servizi.
Crea obiettivi del livello di servizio (SLO) basati su indicatori del livello del servizio (SLI) personalizzati o predefiniti per qualsiasi servizio.
Identificatori validi
Diversi metodi dell'API SLO utilizzano identificatori per elementi diversi, in particolare identificatori per progetti e servizi. Questi ID rispettano le seguenti regole:
- Lunghezza: 1-63 caratteri
- Caratteri: solo lettere minuscole, numeri e trattini
- Carattere iniziale: lettera minuscola
- Carattere terminale: lettera minuscola o numero, ma non un trattino
L'espressione regolare per queste regole è la seguente:
[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?
Esempi di utilizzo di curl
Questa sezione descrive le convenzioni e la configurazione utilizzate per richiamare l'API SLO utilizzando lo strumento curl
. Se utilizzi questa API tramite una libreria client, puoi saltare questa sezione.
Gli esempi in questa pagina accedono all'API SLO utilizzando lo strumento
curl
per inviare richieste HTTP agli endpoint REST. Utilizza le seguenti
informazioni sull'autenticazione e sull'invocazione di curl
per impostare le variabili
utilizzate nelle invocazioni.
Autenticazione
Crea una variabile di ambiente per contenere l'ID del progetto di ambito di un ambito delle metriche. Questi esempi utilizzano
PROJECT_ID
:PROJECT_ID=my-test-service
Esegui l'autenticazione in Google Cloud CLI:
gcloud auth login
Per evitare di dover specificare l'ID progetto con ogni comando, impostalo come predefinito utilizzando gcloud CLI:
gcloud config set project ${PROJECT_ID}
Crea un token di autorizzazione e acquisiscilo in una variabile di ambiente. Questi esempi chiamano la variabile
ACCESS_TOKEN
:ACCESS_TOKEN=`gcloud auth print-access-token`
Devi aggiornare periodicamente il token di accesso. Se i comandi che funzionavano improvvisamente segnalano che non sei autenticato, esegui di nuovo questo comando.
Per verificare di aver ricevuto un token di accesso, visualizza la variabile
ACCESS_TOKEN
:echo ${ACCESS_TOKEN} ya29.GluiBj8o....
Richiamo di curl
Ogni invocazione di curl
include un insieme di argomenti,
seguito dall'URL di una risorsa API SLO. Gli argomenti comuni includono
i valori specificati dalle variabili di ambiente PROJECT_ID
e ACCESS_TOKEN
.
Potresti anche dover specificare altri argomenti, ad esempio per specificare il tipo
di richiesta HTTP (ad esempio, -X DELETE
). La richiesta predefinita è GET
,
quindi gli esempi non la specificano.
Ogni chiamata di curl
ha questa struttura generale:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
Ad esempio, per elencare tutti i servizi nel tuo progetto, invia la seguente richiesta GET
:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services
Questa richiesta restituisce un array di descrizioni dei servizi, con voci come la seguente, un servizio di workload GKE con l'ID servizio "my-test-service":
{ "services": [ { "name": "projects/PROJECT_NUMBER/services/my-test-service", "displayName": "My Test GKE Workload Service", "basicService": { "serviceType": "GKE_WORKLOAD", "serviceLabels": { "cluster_name": "workload-test", "location": "us-central1-c", "namespace_name": "kube-system", "project_id": "lesser-weevil", "top_level_controller_name": "gke-metrics-controller", "top_level_controller_type": "DaemonSet" } }, "gkeWorkload": { "projectId": "lesser-weevil", "location": "us-central1-c", "clusterName": "workload-test", "namespaceName": "kube-system", "topLevelControllerType": "DaemonSet", "topLevelControllerName": "gke-metrics-controller" }, "source": "USER", "telemetry": { "resourceName": "//container.googleapis.com/projects/PROJECT_ID/zones/us-central1-c/clusters/workload-test/k8s/namespaces/kube-system/apps/daemonsets/gke-metrics-controller" } }, ... ] }
Per visualizzare la configurazione utilizzata per creare questo servizio, consulta Creazione di un
servizio. Tieni presente che la struttura gkeWorkload
in questa scheda
deriva dalla struttura basicService
utilizzata per creare il servizio.
Per saperne di più sulla struttura di un servizio, consulta Service
.
Gestione dei servizi
La risorsa Service
funge da elemento principale per l'organizzazione
dei servizi. Gli aspetti di un determinato servizio, ad esempio i relativi SLO, sono
organizzati in base al nome del servizio. Sono supportati i seguenti tipi di servizio:
- Servizio App Engine:
APP_ENGINE
- Servizio Cloud Endpoints:
CLOUD_ENDPOINTS
- Servizio Istio canonico:
ISTIO_CANONICAL_SERVICE
- Servizio Istio del cluster:
CLUSTER_ISTIO
- Servizio Cloud Run:
CLOUD_RUN
- Un insieme di servizi basati su Google Kubernetes Engine:
- Servizio GKE:
GKE_SERVICE
- Spazio dei nomi GKE:
GKE_NAMESPACE
- Workload GKE:
GKE_WORKLOAD
- Servizio GKE:
- Servizi personalizzati:
CUSTOM
Per saperne di più, vedi Tipi di servizi di base o Tipi di servizi GKE di base.
Puoi aggiungere SLO a qualsiasi servizio nel tuo progetto utilizzando l'API. Gestione degli SLO descrive i comandi per manipolare gli SLO.
ID servizio
Ogni servizio ha un identificatore completo chiamato nome risorsa. Questo
identificatore è memorizzato nel campo name
della descrizione del servizio, ad esempio:
"name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-a-cloudrun-istio-system-cluster-local-gateway",
Incorporato nel nome della risorsa è presente un ID più breve per il servizio, la
parte del nome della risorsa dopo la sottostringa
projects/PROJECT_NUMBER/services/
Se hai creato un tuo servizio con il nome della risorsa
projects/PROJECT_NUMBER/services/my-test-service
, l'ID servizio è
my-test-service
.
Per brevità e accuratezza, molti esempi di curl
presuppongono che l'ID servizio sia contenuto
nella variabile di ambiente SERVICE_ID
, in modo da poterlo fare riferimento ripetutamente.
Servizi di elenchi
Per recuperare informazioni su tutti i servizi nel tuo progetto, richiama
il metodo services.list
. Per recuperare informazioni su un servizio specifico in base all'ID servizio, utilizza il metodo services.get
:
Protocollo
Per elencare le informazioni sui servizi utilizzandocurl
, richiama il metodo
services.list
o
services.get
inviando una richiesta GET
a:
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services
per elencare tutti i servizihttps://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/SERVICE_ID
per ottenere un servizio specifico
Ad esempio, la seguente richiesta recupera informazioni sul servizio identificato dal valore memorizzato nella variabile di ambiente SERVICE_ID
:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}
crea un servizio
Per creare un servizio, specifica una rappresentazione del tipo di servizio
e inviala al metodo services.create
.
Puoi utilizzare le strutture dei tipi di servizio descritte in
Tipi di servizio di base e
Tipi di servizio GKE di base.
Le strutture variano, ma la procedura per chiamare l'API è la stessa.
Devi specificare un nome visualizzato per il servizio e
un campo basicService
contenente la rappresentazione del servizio.
Se vuoi, puoi specificare l'ID servizio che vuoi che abbia il servizio. L'esempio seguente mostra la creazione di un servizio del workload {[gke_name_short}}:
Protocollo
Per creare il servizio utilizzando curl
, invia un messaggio POST
all'endpoint
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services
:
Se vuoi fornire un ID per il servizio, crea una variabile per l'ID servizio:
SERVICE_ID=my-test-service
Questo valore viene fornito nel parametro di query URL
service_id
.Crea una variabile per contenere il corpo della richiesta che descrive il servizio:
CREATE_SERVICE_POST_BODY=$(cat <<EOF { "displayName": "My Test GKE Workload Service", "basicService": { "serviceType": "GKE_WORKLOAD", "serviceLabels": { "cluster_name": "workload-test", "location": "us-central1-c", "namespace_name": "kube-system", "project_id": "PROJECT_ID", "top_level_controller_name": "gke-metrics-controller", "top_level_controller_type": "DaemonSet" } } } EOF )
Pubblica il corpo della richiesta nell'endpoint e specifica l'ID servizio come valore del parametro di query
service_id
:curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SERVICE_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services?service_id=${SERVICE_ID}
Per esempi delle strutture associate ad altri servizi, vedi Tipi di servizi di base o Tipi di servizi GKE di base.
Eliminazione di un servizio
Per eliminare un servizio che hai creato, richiama il metodo
services.delete
e specifica l'ID servizio.
Protocollo
Per eliminare un servizio utilizzandocurl
, invia una richiesta DELETE
all'endpoint
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/SERVICE_ID
:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" -X DELETE https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}
Gestione degli SLO
Puoi creare, eliminare e recuperare gli SLO utilizzando l'API SLO. Puoi avere fino a 500 SLO per ogni servizio.
Per gestire gli SLO per un servizio, devi disporre dell'ID servizio. Gli SLO vengono denominati in base al servizio a cui appartengono. Per informazioni sull'identificazione degli ID servizio, vedi ID servizio.
Elenco degli SLO
Per recuperare informazioni su tutti gli SLO associati a un servizio, richiama il metodo services.serviceLevelObjectives.list
.
Per recuperare informazioni su un SLO specifico in base al nome, utilizza il metodo
services.serviceLevelObjectives.get
:
Protocollo
Per elencare le informazioni sui servizi utilizzandocurl
, richiama il metodo
services.serviceLevelObjectives.list
o
services.serviceLevelObjectives.get
inviando una richiesta
GET
a:
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives
per elencare tutti gli SLOhttps://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives/SLO_ID
per ottenere un SLO specifico
Ad esempio, la seguente richiesta elenca tutti gli SLO associati all'ID servizio archiviato nella variabile di ambiente SERVICE_ID
:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives
Di seguito è riportato uno SLO di disponibilità recuperato dal servizio "currencyservice":
{ "name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ", "displayName": "98% Availability in Calendar Week" "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.98, "calendarPeriod": "WEEK", },
Questo SLO è basato su uno SLI di disponibilità, imposta un obiettivo di rendimento del 98% e misura la conformità in una settimana di calendario. Per ulteriori informazioni sugli SLI di disponibilità, consulta Indicatori del livello del servizio.
Per ulteriori informazioni sulla struttura degli SLO, consulta ServiceLevelObjective
.
Recuperare un SLO specifico
Ogni SLO ha un identificatore univoco all'interno del servizio, costituito dalla stringa che segue
serviceLevelObjectives
nel campo name
dello SLO. Nel seguente esempio:
"name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ",
L'ID SLO è la stringa 3kavNVTtTMuzL7KcXAxqCQ
.
Per recuperare informazioni su questo SLO specifico, richiedilo per ID.
Protocollo
Per ottenere un SLO specifico utilizzandocurl
, richiama il metodo
services.serviceLevelObjectives.get
inviando una richiesta GET
a https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/SERVICE_ID/serviceLevelObjectives/SLO_ID
:
SLO_ID=dhefHDM4TwSRZEKIV4ZYEg curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}
Creazione di uno SLO
Per creare uno SLO utilizzando l'API SLO, devi creare un oggetto
ServiceLevelObjective
e passarlo al metodo
serviceLevelObjectives.create
.
La struttura di un SLO ha molte strutture incorporate, tra cui
una per il valore del campo serviceLevelIndicator
.
Per Cloud Service Mesh, Istio su Google Kubernetes Engine e i servizi App Engine, gli indicatori SLI sono predefiniti. Puoi utilizzare la console Cloud Service Mesh per creare SLO; devi solo specificare gli obiettivi di rendimento e i periodi di conformità.
Per altri servizi, devi definire gli SLO utilizzando l'API SLO. Per specificare uno SLO, devi creare anche un valore per il campo
serviceLevelIndicator
. Consulta Creazione di un indicatore del livello del servizio per alcune tecniche e Creazione di SLI dalle metriche per un insieme di esempi basati su varie origini.
Puoi anche creare gli indicatori SLI utilizzando la console Google Cloud . Per saperne di più, consulta Creazione di un SLO.
Struttura di uno SLO
La struttura di base per la creazione dello SLO è la seguente:
{ "displayName": string, "serviceLevelIndicator": { object (ServiceLevelIndicator) }, "goal": number, // Union field period can be only one of the following: "rollingPeriod": string, "calendarPeriod": enum (CalendarPeriod) // End of list of possible types for union field period. }
Devi specificare quanto segue:
- Nome visualizzato: una descrizione dell'SLO
- Un indicatore del livello del servizio, che è uno dei tre tipi:
- L'obiettivo di rendimento (una percentuale)
- Il periodo di conformità, che può essere di due tipi:
- Un periodo mobile di una determinata durata (in secondi)
- Un periodo di calendario
Per ulteriori informazioni su indicatori di livello del servizio, obiettivi di rendimento e periodi di conformità, consulta Concetti relativi al monitoraggio del servizio.
Per i servizi Cloud Service Mesh, Istio su Google Kubernetes Engine e App Engine, il tipo di SLI è l'SLI di base.
Per altri servizi, devi creare un SLI basato su richiesta o un SLI basato su finestra. Consulta la sezione Creazione di un indicatore del livello del servizio per alcune tecniche.
Esempio
Una volta ottenuto l'SLI, puoi creare l'SLO. L'esempio seguente definisce un SLO per un servizio che utilizza un SLI di base. Potresti avere diversi SLO su un singolo SLI, ad esempio uno per la disponibilità del 95% e uno per la disponibilità del 99%. L'esempio seguente mostra un SLO per una disponibilità del 95% in una settimana di calendario:
{ "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.95, "calendarPeriod": "WEEK", "displayName": "95% Availability in Calendar Week" }
Questo esempio specifica uno SLO per una disponibilità del 75% in un periodo di 3 giorni:
{ "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.75, "rollingPeriod": "259200s", "displayName": "75% Availability in Rolling 3 Days" }
Protocollo
Per creare un SLO utilizzandocurl
, invia un messaggio POST
all'endpoint
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/SERVICE_ID/serviceLevelObjectives
:
Crea una variabile per l'ID servizio:
SERVICE_ID=custom:my-test-service
Crea una variabile per contenere il corpo della richiesta, un'istanza dell'oggetto
ServiceLevelObjective
. Questo esempio utilizza uno degli SLO descritto in precedenza:CREATE_SLO_POST_BODY=$(cat <<EOF { "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.75, "rollingPeriod": "259200s", "displayName": "75% Availability in Rolling 3 Days" } EOF )
Pubblica il corpo della richiesta nell'endpoint:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SLO_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives
Se vuoi, puoi anche specificare un ID desiderato per l'SLO come valore del parametro di query
service_level_objective_id
:SLO_ID=test-slo-id curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SLO_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives?service_level_objective_id=${SLO_ID}
Eliminazione di uno SLO
Per eliminare un SLO, richiama il
metodo services.serviceLevelObjectives.delete
e specifica l'ID dell'SLO nel tuo progetto:
Protocollo
Per eliminare un SLO utilizzandocurl
, invia una richiesta DELETE
all'endpoint
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/SERVICE_ID/serviceLevelObjectives/SLO_ID
:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" -X DELETE https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}
Accedere alle serie temporali SLO
I dati SLO vengono archiviati in serie temporali, quindi puoi utilizzare il metodo
timeSeries.list
per recuperarli.
Tuttavia, questi dati non vengono memorizzati nei tipi di metriche standard, quindi
non puoi utilizzare il meccanismo standard di specificare un filtro
per il tipo di metrica nel metodo timeSeries.list
.
Le serie temporali SLO vengono recuperate specificando un altro tipo di
filtro, un selettore di serie temporali, al metodo timeSeries.list
nel
parametro filter
.
Per informazioni sull'utilizzo di questi selettori, consulta Recupero dati SLO.
Utilizzi anche i selettori delle serie temporali per configurare i criteri di avviso in modo programmatico. Per ulteriori informazioni, consulta la sezione Avvisi sulla velocità di consumo.