Questo documento fornisce esempi di criteri di avviso. Gli esempi sono scritti in JSON e utilizzano i filtri di Monitoring. Puoi creare i criteri in JSON o YAML, indipendentemente dal fatto che tu definisca il criterio utilizzando filtri di Monitoring o Monitoring Query Language (MQL). Google Cloud CLI può leggere e scrivere sia JSON che YAML, mentre l'API REST può leggere JSON.
Per esempi di criteri di avviso che utilizzano MQL, consulta i seguenti documenti:
Per informazioni su come configurare i campi criterio di avviso, consulta quanto segue:
- Crea criteri di avviso basati su metriche utilizzando la console Google Cloud
- Crea criteri di avviso basati su metriche utilizzando l'API
Genera YAML per i criteri esistenti
Per generare rappresentazioni YAML dei tuoi criteri di avviso esistenti, utilizza il comando gcloud alpha monitoring policies list
per elencare i criteri e il comando gcloud alpha monitoring policies describe
per stampare il criterio.
Per generare rappresentazioni YAML dei tuoi canali di notifica esistenti, utilizza il comando gcloud alpha monitoring channels list
per elencare i canali e il comando gcloud alpha monitoring channels describe
per stampare la configurazione del canale.
Se non includi il flag --format
nei comandi Google Cloud CLI,
il formato predefinito sarà YAML per entrambi i comandi gcloud ... describe
.
Ad esempio, il seguente comando gcloud alpha monitoring policies describe
recupera un singolo criterio denominato
projects/a-gcp-project/alertPolicies/12669073143329903307
e il reindirizzamento (>
) copia l'output nel file test-policy.yaml
:
gcloud alpha monitoring policies describe projects/a-gcp-project/alertPolicies/12669073143329903307 > test-policy.yaml
Genera JSON per i criteri esistenti
Per generare rappresentazioni JSON dei criteri di avviso e dei canali di notifica esistenti, procedi in uno dei seguenti modi:
Aggiungi il flag
--format="json"
ai comandi dell'interfaccia a riga di comandogcloud
descritti in Generare YAML per i criteri esistenti. Ad esempio, per elencare i criteri, esegui questo comando:elenco dei criteri di monitoraggio alpha gcloud --format=json
Utilizza il widget Explorer API nella pagina di riferimento per ciascun metodo API:
Per i criteri di avviso, vedi i metodi
alertPolicies.list
ealertPolicies.get
.Per i canali di notifica, consulta i metodi
notificationChannels.list
enotificationChannels.get
.
Per maggiori informazioni, consulta Explorer API.
Esempi di criteri
Come mostrato nell'esempio di backup/ripristino, puoi utilizzare i criteri salvati per creare nuove copie di questi criteri.
Puoi utilizzare un criterio salvato in un progetto per crearne uno nuovo o simile in un altro progetto. Tuttavia, devi prima apportare le seguenti modifiche in una copia della norma salvata:
- Rimuovi i seguenti campi da tutti i canali di notifica:
name
verificationStatus
- Crea canali di notifica prima di fare riferimento ai canali nei criteri di avviso (sono necessari i nuovi identificatori di canale).
- Rimuovi i seguenti campi da tutti i criteri di avviso che stai ricreando:
name
condition.name
creationRecord
mutationRecord
I criteri in questo documento sono organizzati utilizzando la stessa terminologia utilizzata da Monitoring nella console Google Cloud, ad esempio "criterio di frequenza di modifica", ed esistono due tipi di condizioni:
- Una condizione di soglia. Quasi tutti i tipi di criteri menzionati nella UI sono varianti di una condizione di soglia
- Una condizione di assenza
Negli esempi riportati di seguito, queste condizioni corrispondono a conditionThreshold
e conditionAbsent
. Per maggiori informazioni, consulta la pagina di riferimento per
Condition
.
Puoi creare molti di questi criteri manualmente utilizzando la console Google Cloud, ma alcuni possono essere creati solo utilizzando l'API Monitoring. Per saperne di più, consulta Creazione di un criterio di avviso (UI) o Creare criteri di avviso utilizzando l'API.
Criterio soglia metrica
Un criterio di soglia delle metriche rileva quando un valore supera un limite predeterminato. I criteri di soglia ti informano che qualcosa si sta avvicinando a un punto importante, quindi puoi intervenire. Ad esempio, la condizione di un criterio di soglia della metrica viene soddisfatta quando lo spazio disponibile su disco è inferiore al 10% dello spazio totale su disco.
Il seguente criterio di avviso utilizza l'utilizzo medio della CPU come indicatore dell'integrità di un gruppo di VM. La condizione del criterio viene soddisfatta quando l'utilizzo medio della CPU delle VM in un progetto, misurato in intervalli di 60 secondi, supera una soglia del 90% di utilizzo per 15 minuti (900 secondi):
{
"displayName": "Very high CPU usage",
"combiner": "OR",
"conditions": [
{
"displayName": "CPU usage is extremely high",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"project"
],
"perSeriesAligner": "ALIGN_MAX"
}
],
"comparison": "COMPARISON_GT",
"duration": "900s",
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
AND resource.type=\"gce_instance\"",
"thresholdValue": 0.9,
"trigger": {
"count": 1
}
}
}
],
}
Criterio di assenza metrica
Una condizione di assenza metrica viene soddisfatta quando non vengono scritti dati in una metrica nell'intervallo di tempo definito dal campo duration
.
Un modo per dimostrarlo è creare una metrica personalizzata.
Di seguito è riportato un descrittore di esempio per una metrica personalizzata. Puoi creare la metrica utilizzando Explorer API.
{
"description": "Number of times the pipeline has run",
"displayName": "Pipeline runs",
"metricKind": "GAUGE",
"type": "custom.googleapis.com/pipeline_runs",
"labels": [
{
"description": "The name of the pipeline",
"key": "pipeline_name",
"valueType": "STRING"
},
],
"unit": "1",
"valueType": "INT64"
}
Per saperne di più, consulta la panoramica delle metriche definite dall'utente.
La condizione nel seguente criterio di avviso si verifica quando i dati non vengono più scritti nella metrica per un periodo di circa un'ora: in altre parole, l'esecuzione della pipeline oraria non è riuscita. Tieni presente che la condizione utilizzata qui è
conditionAbsent
.
{
"displayName": "Data ingestion functioning",
"combiner": "OR",
"conditions": [
{
"displayName": "Hourly pipeline is up",
"conditionAbsent": {
"duration": "3900s",
"filter": "resource.type=\"global\"
AND metric.type=\"custom.googleapis.com/pipeline_runs\"
AND metric.label.pipeline_name=\"hourly\"",
}
}
],
}
Criterio di previsione
Una condizione di previsione è soddisfatta quando si verifica quanto segue:
- Tutte le previsioni per una serie temporale sono le stesse nell'intervallo di tempo
definito dal campo
duration
. - Cloud Monitoring prevede che le serie temporali violeranno la soglia all'interno dell'orizzonte di previsione.
Una condizione di previsione è una condizione di soglia della metrica configurata per utilizzare la previsione. Come illustrato nell'esempio seguente, queste condizioni includono un campo forecastOptions
che consente la previsione e specifica l'orizzonte di previsione. Nell'esempio seguente, l'orizzonte di previsione è impostato su un'ora, ovvero il valore minimo:
{
"displayName": "NFS free bytes alert",
"combiner": "OR",
"conditions": [
{
"displayName": "Filestore Instance - Free disk space percent",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "300s",
"perSeriesAligner": "ALIGN_MEAN"
}
],
"comparison": "COMPARISON_LT",
"duration": "900s",
"filter": "resource.type = \"filestore_instance\" AND metric.type = \"file.googleapis.com/nfs/server/free_bytes_percent\"",
"forecastOptions": {
"forecastHorizon": "3600s"
},
"thresholdValue": 20,
"trigger": {
"count": 1
}
}
}
],
}
Criterio di tasso di variazione
Le condizioni di tasso di variazione vengono soddisfatte quando i valori di una serie temporale aumentano o diminuiscono almeno di una percentuale pari a quella specificata dalla soglia. Quando crei questo tipo di condizione, alla serie temporale viene applicato il calcolo della percentuale di modifica prima del confronto con la soglia.
La condizione calcola la media dei valori della metrica degli ultimi 10 minuti, poi confronta il risultato con la media di 10 minuti misurata poco prima dell'inizio del periodo di allineamento. Non puoi modificare la finestra di 10 minuti utilizzata per i confronti in un criterio di avviso relativo alla frequenza di modifica. Tuttavia, devi specificare il periodo di allineamento quando crei la condizione.
Questo criterio di avviso monitora se l'utilizzo della CPU aumenta rapidamente:
{
"displayName": "High CPU rate of change",
"combiner": "OR",
"conditions": [
{
"displayName": "CPU usage is increasing at a high rate",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "900s",
"perSeriesAligner": "ALIGN_PERCENT_CHANGE",
}],
"comparison": "COMPARISON_GT",
"duration": "180s",
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
"thresholdValue": 0.5,
"trigger": {
"count": 1
}
}
}
],
}
Criterio di aggregazione dei gruppi
Questo criterio di avviso monitora se l'utilizzo medio della CPU in un cluster Google Kubernetes Engine supera una soglia:
{
"displayName": "CPU utilization across GKE cluster exceeds 10 percent",
"combiner": "OR",
"conditions": [
{
"displayName": "Group Aggregate Threshold across All Instances in Group GKE cluster",
"conditionThreshold": {
"filter": "group.id=\"3691870619975147604\" AND metric.type=\"compute.googleapis.com/instance/cpu/utilization\" AND resource.type=\"gce_instance\"",
"comparison": "COMPARISON_GT",
"thresholdValue": 0.1,
"duration": "300s",
"trigger": {
"count": 1
},
"aggregations": [
{
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"project"
]
},
{
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_SUM",
"crossSeriesReducer": "REDUCE_MEAN"
}
]
},
}
],
}
Questo criterio presuppone l'esistenza del seguente gruppo:
{
"name": "projects/a-gcp-project/groups/3691870619975147604",
"displayName": "GKE cluster",
"filter": "resource.metadata.name=starts_with(\"gke-kuber-cluster-default-pool-6fe301a0-\")"
}
Per identificare i campi equivalenti per i tuoi gruppi, elenca i dettagli dei gruppi utilizzando Explorer API nella pagina di riferimento project.groups.list.
Criterio di controllo di uptime
Lo stato dei controlli di uptime viene visualizzato nella pagina Controlli di uptime, ma puoi configurare un criterio di avviso in modo che Cloud Monitoring ti invii una notifica se il controllo di uptime non va a buon fine.
Ad esempio, il seguente JSON descrive un controllo di uptime HTTPS sul sito di Google Cloud. Il criterio di avviso verifica la disponibilità ogni 5 minuti.
Il controllo di uptime è stato creato con la console Google Cloud. La rappresentazione JSON qui è stata creata elencando i controlli di uptime nel progetto utilizzando l'API Monitoring; consulta uptimeCheckConfigs.list
.
Puoi anche creare controlli di uptime con l'API Monitoring.
{
"name": "projects/a-gcp-project/uptimeCheckConfigs/uptime-check-for-google-cloud-site",
"displayName": "Uptime check for Google Cloud site",
"monitoredResource": {
"type": "uptime_url",
"labels": {
"host": "cloud.google.com"
}
},
"httpCheck": {
"path": "/index.html",
"useSsl": true,
"port": 443,
"authInfo": {}
},
"period": "300s",
"timeout": "10s",
"contentMatchers": [
{}
]
}
Per creare un criterio di avviso per un controllo di uptime, fai riferimento al controllo di uptime
tramite UPTIME_CHECK_ID
. Questo ID viene impostato al momento della creazione del controllo; viene visualizzato
come ultimo componente del campo name
ed è visibile nella UI come
Check ID
nel riepilogo della configurazione. Se
utilizzi l'API Monitoring, il metodo
uptimeCheckConfigs.create
restituisce l'ID.
L'ID deriva da displayName
, che in questo caso è stato impostato nella UI.
Per verificarli, elenca i controlli di uptime e osserva il valore
name
.
L'ID per il controllo di uptime descritto in precedenza è
uptime-check-for-google-cloud-site
.
La condizione del seguente criterio di avviso è soddisfatta se il controllo di uptime non va a buon fine o se il certificato SSL sul sito Google Cloud scadrà tra meno di 15 giorni. Se una delle condizioni è soddisfatta, Monitoring invia una notifica al canale di notifica specificato:
{
"displayName": "Google Cloud site uptime failure",
"combiner": "OR",
"conditions": [
{
"displayName": "Failure of uptime check_id uptime-check-for-google-cloud-site",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "1200s",
"perSeriesAligner": "ALIGN_NEXT_OLDER",
"crossSeriesReducer": "REDUCE_COUNT_FALSE",
"groupByFields": [ "resource.label.*" ]
}
],
"comparison": "COMPARISON_GT",
"duration": "600s",
"filter": "metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
AND resource.type=\"uptime_url\"",
"thresholdValue": 1,
"trigger": {
"count": 1
}
}
},
{
"displayName": "SSL Certificate for google-cloud-site expiring soon",
"conditionThreshold": {
"aggregations": [
{
"alignmentPeriod": "1200s",
"perSeriesAligner": "ALIGN_NEXT_OLDER",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [ "resource.label.*" ]
}
],
"comparison": "COMPARISON_LT",
"duration": "600s",
"filter": "metric.type=\"monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires\"
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
AND resource.type=\"uptime_url\"",
"thresholdValue": 15,
"trigger": {
"count": 1
}
}
}
],
}
Il filtro nella condizione specifica la metrica monitorata
in base al tipo e all'etichetta. I tipi di metriche sono
monitoring.googleapis.com/uptime_check/check_passed
e
monitoring.googleapis.com/uptime_check/time_until_ssl_cert_expires
.
L'etichetta della metrica identifica lo specifico controllo di uptime monitorato.
In questo esempio, il campo dell'etichetta check_id
contiene l'ID del controllo di uptime.
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
Per saperne di più, consulta Filtri di Monitoring.
Politiche sull’integrità dei processi
Un criterio di integrità dei processi può avvisarti se il numero di processi corrispondenti a un pattern supera una soglia. Può essere usato per comunicarti, ad esempio, che un processo è stato interrotto.
Questo criterio di avviso fa sì che Monitoring invii una notifica al canale di notifica specificato se nessun processo corrispondente alla stringa nginx
, in esecuzione come utente www
, è disponibile per più di 5 minuti:
{
"displayName": "Server health",
"combiner": "OR",
"conditions": [
{
"displayName": "Process 'nginx' is not running",
"conditionThreshold": {
"filter": "select_process_count(\"has_substring(\\\"nginx\\\")\", \"www\") AND resource.type=\"gce_instance\"",
"comparison": "COMPARISON_LT",
"thresholdValue": 1,
"duration": "300s"
}
}
],
}
Per ulteriori informazioni, consulta Integrità dei processi.
Rapporto metrica
Ti consigliamo di utilizzare Monitoring Query Language (MQL) per creare criteri di avviso basati su un rapporto. Sebbene l'API Cloud Monitoring supporti la creazione di alcuni rapporti basati su filtri, MQL offre una soluzione più flessibile e robusta:
- Per esempi di criteri per i rapporti basati su MQL, vedi esempi di criteri di avviso relativi a MQL.
- Per informazioni sulla creazione di criteri di avviso con MQL, consulta Criteri di avviso con MQL.
- Per informazioni su come creare un grafico o monitorare i rapporti delle metriche, consulta Report delle metriche.
Questa sezione descrive un rapporto basato su filtro.
Con l'API, puoi creare e visualizzare un criterio che calcola il rapporto di
due metriche correlate e viene attivato quando tale rapporto supera una soglia. Le metriche correlate devono avere lo stesso elemento MetricKind
. Ad esempio, puoi creare un criterio di avviso basato su un rapporto se entrambe le metriche sono metriche di indicatore.
Per determinare il MetricKind
di un tipo di metrica, consulta
Elenco delle metriche.
Una condizione di rapporto è una variante in una condizione di soglia metrica in cui
la condizione in un criterio di rapporto utilizza due filtri: il consueto filter
,
che funge da numeratore del rapporto, e un denominatorFilter
,
che agisce come denominatore del rapporto.
Le serie temporali di entrambi i filtri devono essere aggregate nello stesso modo, in modo che
il calcolo del rapporto dei valori sia significativo.
La condizione del criterio di avviso è soddisfatta quando il rapporto dei filtri
viola un valore di soglia per l'intervallo di tempo definito dal campo
duration
.
La sezione successiva descrive come configurare un criterio di avviso che monitori il rapporto tra le risposte di errore HTTP e tutte le risposte HTTP.
Rapporto errori HTTP
Il seguente criterio di avviso ha una condizione di soglia basata sul rapporto tra il numero di risposte di errore HTTP e il numero di tutte le risposte HTTP.
{
"displayName": "HTTP error count exceeds 50 percent for App Engine apps",
"combiner": "OR",
"conditions": [
{
"displayName": "Ratio: HTTP 500s error-response counts / All HTTP response counts",
"conditionThreshold": {
"filter": "metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\" AND
metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
project=\"a-gcp-project\" AND
resource.type=\"gae_app\"",
"aggregations": [
{
"alignmentPeriod": "300s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"project",
"resource.label.module_id",
"resource.label.version_id"
],
"perSeriesAligner": "ALIGN_DELTA"
}
],
"denominatorFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" AND
project=\"a-gcp-project\" AND
resource.type=\"gae_app\"",
"denominatorAggregations": [
{
"alignmentPeriod": "300s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"project",
"resource.label.module_id",
"resource.label.version_id"
],
"perSeriesAligner": "ALIGN_DELTA",
}
],
"comparison": "COMPARISON_GT",
"thresholdValue": 0.5,
"duration": "0s",
"trigger": {
"count": 1
}
}
}
]
}
Le metriche e i tipi di risorse
Il tipo di metrica per questo criterio è appengine.googleapis.com/http/server/response_count
, che ha due etichette:
response_code
, un numero intero a 64 bit che rappresenta il codice di stato HTTP per la richiesta. Questo criterio filtra i dati delle serie temporali in questa etichetta, in modo da poter determinare quanto segue:- Il numero di risposte ricevute.
- Il numero di risposte di errore ricevute.
- Il rapporto tra le risposte di errore e tutte le risposte.
loading
, un valore booleano che indica se la richiesta è in fase di caricamento. L'etichettaloading
non è pertinente in questo criterio di avviso.
Il criterio di avviso valuta i dati di risposta delle app di App Engine, ovvero i dati provenienti dal tipo di risorsa monitorata gae_app
. Questa risorsa monitorata ha tre etichette:
project_id
, l'ID del progetto Google Cloud.module_id
, il nome del servizio o del modulo nell'app.version_id
, la versione dell'app.
Per informazioni di riferimento su queste metriche e sui tipi di risorse monitorate, vedi Metriche di App Engine nell'elenco delle metriche e voce gae_app
nell'elenco delle risorse monitorate.
Cosa comporta queste norme
Questa condizione calcola il rapporto tra le risposte di errore e le risposte totali. La condizione è soddisfatta se il rapporto è superiore al 50% (ovvero maggiore di 0, 5) nel periodo di allineamento di 5 minuti.
Questo criterio acquisisce il modulo e la versione dell'app che viola la condizione raggruppando le serie temporali in ciascun filtro in base ai valori di queste etichette.
- Il filtro nella condizione esamina le risposte HTTP da un'app App Engine e le seleziona nell'intervallo di errore 5xx. che è il numeratore del rapporto.
- Il filtro denominatore nella condizione esamina tutte le risposte HTTP da un'app di App Engine.
La condizione è soddisfatta e Monitoring invia immediatamente una notifica per il nuovo incidente. L'intervallo di tempo consentito per il campo duration
nella condizione è pari a zero secondi. Questa condizione utilizza un conteggio trigger
pari a uno, ovvero il numero di serie temporali che devono violare la condizione per causare l'incidente. Per un'app di App Engine con un solo servizio,
il conteggio di uno per trigger
va bene. Se hai un'app con 20 servizi e vuoi causare un incidente se 3 o più servizi violano la condizione, utilizza un conteggio di trigger
pari a 3.
Impostazione di un rapporto
I filtri del numeratore e del denominatore sono esattamente gli stessi, ad eccezione del fatto che il filtro della condizione nel numeratore corrisponde ai codici di risposta nell'intervallo di errore, mentre il filtro della condizione nel denominatore corrisponde a tutti i codici di risposta. Le seguenti clausole compaiono solo nella condizione di numeratore:
metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\"
In caso contrario, i filtri del numeratore e del denominatore sono gli stessi.
Le serie temporali selezionate da ciascun filtro devono essere aggregate nello stesso modo per rendere valido il calcolo del rapporto. Ogni filtro potrebbe raccogliere più serie temporali, poiché ci saranno serie temporali diverse per ogni combinazione di valori per le etichette. Questo criterio raggruppa l'insieme di serie temporali in base a etichette delle risorse specificate, le quali suddivideno l'insieme di serie temporali in un insieme di gruppi. Alcune serie temporali di ciascun gruppo corrispondono al filtro numeratore, mentre le altre corrispondono al filtro denominatore.
Per calcolare un rapporto, l'insieme di serie temporali corrispondente a ogni filtro deve essere aggregato in base a una singola serie temporale ciascuna. In questo modo ogni gruppo avrà due serie temporali, una per il numeratore e una per il denominatore. Successivamente, è possibile calcolare il rapporto dei punti nella serie temporale del numeratore e del denominatore in ciascun gruppo.
In questo criterio, le serie temporali per entrambi i filtri vengono aggregate come segue:
Ogni filtro crea un numero di serie temporali allineate a intervalli di 5 minuti, con i valori rappresentati che calcolano
ALIGN_DELTA
sui valori in quel periodo di allineamento di 5 minuti. Questo allineatore restituisce il numero di risposte corrispondenti nel periodo di allineamento come numero intero a 64 bit.Le serie temporali all'interno di ogni filtro vengono inoltre raggruppate in base ai valori delle etichette delle risorse per il modulo e la versione, quindi ogni gruppo contiene due insiemi di serie temporali allineate, quelle corrispondenti al filtro del numeratore e quelle corrispondenti al filtro denominatore.
Le serie temporali all'interno di ogni gruppo che corrisponde al filtro numeratore o denominatore vengono aggregate per un'unica volta sommando i valori delle singole serie temporali utilizzando il riduttore in più serie
REDUCER_SUM
. Il risultato sarà una serie temporale per il numeratore e una per il denominatore, ciascuna delle quali riporta il numero di risposte in tutte le serie temporali corrispondenti nel periodo di allineamento.
Il criterio quindi calcola, per le serie temporali del numeratore e del denominatore che rappresentano ciascun gruppo, il rapporto dei valori. La condizione del criterio di avviso è soddisfatta quando il rapporto è superiore al 50%.