Questo documento fornisce esempi di criteri di avviso. Gli esempi sono scritti in JSON e utilizzano i filtri di monitoraggio. Puoi creare norme in formato JSON o YAML, indipendentemente dal fatto che tu le definisca utilizzando i 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
- Creare criteri di avviso basati su metriche utilizzando l'API
Genera YAML per le policy esistenti
Per generare rappresentazioni YAML delle policy di avviso esistenti, utilizza il comando
gcloud alpha monitoring policies list
per elencare le policy e il comando
gcloud alpha monitoring policies describe
per stampare la policy.
Per generare rappresentazioni YAML dei 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 è YAML per entrambi i comandi gcloud ... describe
.
Ad esempio, il seguente comando gcloud alpha monitoring policies describe
recupera una singola policy denominata
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
Generare JSON per le policy esistenti
Per generare rappresentazioni JSON dei criteri di avviso e dei canali di notifica esistenti, esegui una delle seguenti operazioni:
Aggiungi il flag
--format="json"
ai comandi CLIgcloud
descritti in Genera YAML per le policy esistenti. Ad esempio, per elencare le policy, esegui questo comando:gcloud alpha monitoring policies list --format=json
Utilizza il widget Explorer API nella pagina di riferimento per ogni 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 saperne di più, vedi Explorer API.
Esempi di policy
Come mostrato nell'esempio di backup/ripristino, puoi utilizzare i criteri salvati per creare nuove copie.
Puoi utilizzare una norma salvata in un progetto per creare una norma nuova o simile in un altro progetto. Tuttavia, devi prima apportare le seguenti modifiche a una copia della policy salvata:
- Rimuovi i seguenti campi da tutti i canali di notifica:
name
verificationStatus
- Crea canali di notifica prima di fare riferimento ai canali nelle norme di avviso (hai bisogno dei nuovi identificatori di canale).
- Rimuovi i seguenti campi da tutti i criteri di avviso che stai ricreando:
name
condition.name
creationRecord
mutationRecord
I criteri descritti in questo documento sono organizzati utilizzando la stessa terminologia utilizzata da Monitoring nella console Google Cloud , ad esempio "criterio di tasso di variazione", e sono presenti due tipi di condizioni:
- Una condizione di soglia; quasi tutti i tipi di policy menzionati nell'interfaccia utente sono varianti di una condizione di soglia
- Una condizione di assenza
Negli esempi che seguono, queste condizioni corrispondono a conditionThreshold
e conditionAbsent
. Per ulteriori informazioni, consulta la pagina di riferimento per
Condition
.
Puoi creare manualmente molte di queste policy utilizzando la console Google Cloud , ma alcune possono essere create solo utilizzando l'API Monitoring. Per ulteriori informazioni, vedi Creazione di un criterio di avviso (UI) o Creare criteri di avviso utilizzando l'API.
Policy di soglia metrica
Un criterio di soglia della metrica rileva quando un valore supera un limite predeterminato. Le norme relative alle soglie ti informano che qualcosa si sta avvicinando a un punto importante, così puoi intervenire. Ad esempio, la condizione per un criterio di soglia della metrica viene soddisfatta quando lo spazio su disco disponibile diventa inferiore al 10% dello spazio su disco totale.
La seguente criterio di avviso utilizza l'utilizzo medio della CPU come indicatore dello stato di un gruppo di VM. La condizione della policy viene soddisfatta quando l'utilizzo medio della CPU delle VM in un progetto, misurato a intervalli di 60 secondi, supera una soglia di utilizzo del 90% 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
}
}
}
],
}
Policy di assenza metrica
Una condizione di assenza di 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.
Ecco 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 ulteriori informazioni, consulta la panoramica delle metriche definite dall'utente.
La condizione nel seguente criterio di avviso
viene soddisfatta quando i dati smettono di essere scritti nella
metrica per un periodo di circa un'ora: in altre parole, la pipeline oraria
non è stata eseguita. 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\"",
}
}
],
}
Norme di previsione
Una condizione di previsione viene soddisfatta quando si verificano le seguenti condizioni:
- Tutte le previsioni per una serie temporale sono uguali all'interno dell'intervallo di tempo
definito dal campo
duration
. - Cloud Monitoring prevede che la serie temporale violerà la soglia entro l'orizzonte di previsione.
Una condizione di previsione è una condizione di soglia della metrica configurata
per utilizzare le previsioni. Come illustrato nel seguente esempio, 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, che è 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
}
}
}
],
}
Norme sul tasso di variazione
Le condizioni del tasso di variazione vengono soddisfatte quando i valori di una serie temporale aumentano o diminuiscono di almeno la percentuale specificata dalla soglia. Quando crei questo tipo di condizione, viene applicato un calcolo della variazione percentuale alla serie temporale prima del confronto con la soglia.
La condizione calcola la media dei valori della metrica degli ultimi 10 minuti, quindi confronta il risultato con la media di 10 minuti misurata appena prima dell'inizio del periodo di allineamento. Non puoi modificare la finestra di 10 minuti utilizzata per i confronti in un criterio di avviso sul tasso di variazione. Tuttavia, devi specificare il periodo di allineamento quando crei la condizione.
Questo criterio di avviso monitora se l'utilizzo della CPU sta aumentando 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
}
}
}
],
}
Norma di aggregazione del gruppo
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"
}
]
},
}
],
}
Queste norme presuppongono 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 del gruppo utilizzando Esplora API nella pagina di riferimento project.groups.list.
Criterio dei controlli 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 viene superato.
Ad esempio, il seguente JSON descrive un controllo di uptime HTTPS sul sito Google Cloud . Il criterio di avviso controlla 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. Vedi
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
in base al relativo UPTIME_CHECK_ID
. Questo ID viene impostato quando viene creato il controllo; viene visualizzato
come ultimo componente del campo name
ed è visibile nell'interfaccia utente 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 nell'interfaccia utente.
Puoi verificarlo elencando i controlli di uptime e osservando il valore name
.
L'ID del controllo di uptime descritto in precedenza è
uptime-check-for-google-cloud-site
.
La condizione del seguente criterio di avviso viene 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 il controllo di uptime specifico monitorato.
In questo esempio, il campo etichetta check_id
contiene l'ID controllo di uptime.
AND metric.label.check_id=\"uptime-check-for-google-cloud-site\"
Per saperne di più, consulta Filtri di monitoraggio.
Norme di integrità di processo
Un criterio di integrità dei processi può inviarti una notifica se il numero di processi che corrispondono a un pattern supera una soglia. Può essere utilizzato 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
quando nessun processo corrispondente alla stringa nginx
, in esecuzione come utente www
, è stato
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 saperne di più, consulta Stato di integrità del processo.
Rapporto metrico
Ti consigliamo di utilizzare Monitoring Query Language (MQL) per creare policy di avviso basate sui rapporti. Sebbene l'API Cloud Monitoring supporti la creazione di alcuni rapporti basati su filtri, MQL fornisce una soluzione più flessibile e solida:
- Per esempi di criteri basati sul rapporto MQL, vedi Esempi di criteri di avviso MQL.
- Per informazioni sulla creazione di criteri di avviso con MQL, consulta Criteri di avviso con MQL.
- Per informazioni sulla creazione di grafici o sul monitoraggio dei rapporti tra le metriche, consulta Rapporti tra le metriche.
Questa sezione descrive un rapporto basato sui filtri.
Con l'API, puoi creare e visualizzare una policy che calcola il rapporto tra due metriche correlate e viene attivata quando questo rapporto supera una soglia. Le metriche correlate
devono avere lo stesso MetricKind
. Ad esempio, puoi creare un criterio di avviso basato sul rapporto se entrambe le metriche sono metriche di tipo indicatore.
Per determinare l'MetricKind
di un tipo di metrica, consulta l'
elenco delle metriche.
Una condizione di rapporto è una variante di una condizione di soglia della metrica, in cui la condizione in una norma sui rapporti utilizza due filtri: il solito filter
, che funge da numeratore del rapporto, e un denominatorFilter
, che funge da denominatore del rapporto.
Le serie temporali di entrambi i filtri devono essere aggregate nello stesso modo, in modo che
il calcolo del rapporto tra i valori sia significativo.
La condizione del criterio di avviso viene soddisfatta quando il rapporto tra i 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 monitora il rapporto tra le risposte di errore HTTP e tutte le risposte HTTP.
Rapporto tra errori HTTP
Il seguente criterio di avviso ha una condizione di soglia basata sul rapporto tra il conteggio delle risposte di errore HTTP e il conteggio 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
}
}
}
]
}
I tipi di metriche e risorse
Il tipo di metrica per queste norme è
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 base a 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 è stata caricata. L'etichettaloading
è irrilevante in questo criterio di avviso.
Il criterio di avviso valuta i dati di risposta delle app 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 questi tipi di metriche e risorse monitorate, consulta
Metriche App Engine nell'elenco delle metriche e la
voce gae_app
nell'elenco delle risorse monitorate.
Cosa prevedono queste norme
Questa condizione calcola il rapporto tra le risposte di errore e le risposte totali. La condizione viene soddisfatta se il rapporto è superiore al 50% (ovvero superiore a 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 ogni filtro in base ai valori di queste etichette.
- Il filtro nella condizione esamina le risposte HTTP di un'app App Engine e seleziona quelle risposte nell'intervallo di errori 5xx. Questo è il numeratore del rapporto.
- Il filtro del denominatore nella condizione esamina tutte le risposte HTTP di un'app App Engine.
La condizione viene soddisfatta e il monitoraggio invia immediatamente una notifica per il nuovo incidente; l'intervallo di tempo consentito del campo duration
nella condizione è zero secondi. Questa condizione utilizza un conteggio di trigger
, che è il numero di serie temporali che deve violare la condizione per causare l'incidente. Per un'app App Engine con un singolo servizio,
un conteggio trigger
pari a uno è sufficiente. Se hai un'app con 20 servizi e vuoi causare un incidente se 3 o più servizi violano la condizione, utilizza un conteggio trigger
di 3.
Configurare un rapporto
I filtri del numeratore e del denominatore sono esattamente gli stessi, tranne per il fatto che il filtro delle condizioni nel numeratore corrisponde ai codici di risposta nell'intervallo di errore, mentre il filtro delle condizioni nel denominatore corrisponde a tutti i codici di risposta. Le seguenti clausole vengono visualizzate solo nella condizione del numeratore:
metric.label.response_code>=\"500\" AND
metric.label.response_code<\"600\"
In caso contrario, i filtri del numeratore e del denominatore sono uguali.
Le serie temporali selezionate da ogni filtro devono essere aggregate nello stesso modo per rendere valido il calcolo del rapporto. Ogni filtro potrebbe raccogliere più serie temporali, poiché ci sarà una serie temporale diversa per ogni combinazione di valori per le etichette. Questo criterio raggruppa l'insieme di serie temporali in base alle etichette delle risorse specificate, che partizionano l'insieme di serie temporali in un insieme di gruppi. Alcune delle serie temporali in ogni gruppo corrispondono al filtro del numeratore; le altre corrispondono al filtro del denominatore.
Per calcolare un rapporto, l'insieme di serie temporali che corrisponde a ogni filtro deve essere aggregato in una singola serie temporale. In questo modo, ogni gruppo ha due serie temporali, una per il numeratore e una per il denominatore. Successivamente, è possibile calcolare il rapporto tra i punti nelle serie temporali del numeratore e del denominatore in ogni gruppo.
In queste norme, le serie temporali per entrambi i filtri vengono aggregate nel seguente modo:
Ogni filtro crea una serie di serie temporali allineate a intervalli di 5 minuti, con valori rappresentati dal calcolo di
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 raggruppate anche in base ai valori delle etichette delle risorse per modulo e versione, quindi ogni gruppo conterrà due insiemi di serie temporali allineate, quelle corrispondenti al filtro del numeratore e quelle corrispondenti al filtro del denominatore.
Le serie temporali all'interno di ogni gruppo che corrispondono al filtro del numeratore o del denominatore vengono aggregate in un unico momento sommando i valori delle singole serie temporali utilizzando il riduttore cross-series
REDUCER_SUM
. In questo modo, si ottiene una serie temporale per il numeratore e una per il denominatore, ognuna delle quali riporta il numero di risposte in tutte le serie temporali corrispondenti nel periodo di allineamento.
Il criterio calcola quindi il rapporto tra i valori delle serie temporali del numeratore e del denominatore che rappresentano ciascun gruppo. La condizione per il criterio di avviso viene soddisfatta quando il rapporto è superiore al 50%.