In questa pagina viene descritto come creare un criterio di avviso con una connessione basata su PromQL utilizzando l'API Cloud Monitoring. Puoi usare PromQL query nei criteri di avviso per creare condizioni complesse con come rapporti, soglie dinamiche e valutazione delle metriche.
Per informazioni generali, consulta Criteri di avviso con PromQL.
Se lavori in un ambiente Prometheus esterno a Cloud Monitoring e hai regole di avviso Prometheus, puoi utilizzare Google Cloud CLI per eseguirne la migrazione ai criteri di avviso di Monitoring con una query PromQL. Per ulteriori informazioni, vedi Esegui la migrazione delle regole di avviso e dei destinatari da Prometheus.
Crea criteri di avviso con le query PromQL
Utilizzi il metodo alertPolicies.create
per
in modo programmatico a creare criteri di avviso.
L'unica differenza tra la creazione di criteri di avviso
Condizioni basate su PromQL
e altri criteri di avviso è che Condition
il tipo deve essere PrometheusQueryLanguageCondition
.
Questo tipo di condizione consente di definire i criteri di avviso con PromQL.
Di seguito è riportata una query PromQL per una condizione del criterio di avviso che utilizza una metrica dell'esportatore kube-state
per trovare il numero di volte in cui un contenitore è stato riavviato negli ultimi 30 minuti:
rate(kube_pod_container_status_restarts[30m]) * 1800 > 1
Creazione del criterio di avviso
Per creare un criterio di avviso con una condizione basata su PromQL, utilizza il
AlertPolicy
tipo di condizione PrometheusQueryLanguageCondition
.
PrometheusQueryLanguageCondition
ha la seguente struttura:
{ "query": string, "duration": string, "evaluationInterval": string, "labels": {string: string}, "ruleGroup": string, "alertRule": string }
I campi PrometheusQueryLanguageCondition
hanno le seguenti definizioni:
query
: l'espressione PromQL da valutare. Equivalente alexpr
di una regola di avviso Prometheus standard.duration
: specifica per quanto tempo per cui ogni valutazione della query deve generare un valoretrue
prima del viene attivato il criterio di avviso. Il valore deve essere un numero di minuti, espresso in secondi; ad esempio600s
per una durata di 10 minuti. Per ulteriori informazioni, consulta Comportamento dei criteri di avviso basati su metriche.evaluationInterval
: l'intervallo di tempo, in secondi, tra PromQL valutazioni della query. Il valore predefinito è 30 secondi. SePrometheusQueryLanguageCondition
è stato creato eseguendo la migrazione di un Prometheus di avviso, questo valore proviene dal gruppo di regole Prometheus che conteneva la regola di avviso Prometheus.labels
: un modo facoltativo per aggiungere o sovrascrivere le etichette nel risultato dell'espressione PromQL.ruleGroup
: se è stata eseguita la migrazione del criterio di avviso da un file di configurazione Prometheus, questo campo contiene il valore del camponame
del gruppo di regole nel file di configurazione Prometheus. Questo campo non è obbligatorio se crei una Criterio di avviso PromQL nell'API Cloud Monitoring.alertRule
: se è stata eseguita la migrazione del criterio di avviso da un file di configurazione Prometheus, questo campo contiene il valore del campoalert
della regola di avviso nel file di configurazione Prometheus. Questo campo non è obbligatorio se crei una Criterio di avviso PromQL nell'API Cloud Monitoring.
Ad esempio, la seguente condizione utilizza una query PromQL per trova il numero di volte in cui un container è stato riavviato negli ultimi 30 minuti:
"conditionPrometheusQueryLanguage": { "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1", "duration": "600s", evaluationInterval: "60s", "alertRule": "ContainerRestartCount", "labels": { "action_required":"true", "severity":"critical/warning/info"} }
Utilizza questa struttura come valore di un campo conditionPrometheusQueryLanguage
in
una condizione, incorporata in una struttura di criteri di avviso.
Per ulteriori informazioni su queste strutture, consulta
AlertPolicy
Di seguito è mostrato un criterio completo con PrometheusQueryLanguageCondition
condizione in JSON:
{ "displayName": "Container Restarts", "documentation": { "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.", "mimeType": "text/markdown", "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes." }, "userLabels": {}, "conditions": [ { "displayName": "Container has restarted", "conditionPrometheusQueryLanguage": { "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800", "duration": "600s", evaluationInterval: "60s", "alertRule": "ContainerRestart", "labels": { "action_required":"true", "severity":"critical/warning/info"} } } ], "combiner": "OR", "enabled": true }
Crea un criterio di avviso
Per creare il criterio di avviso, inserisci il file JSON del criterio di avviso in un file denominato POLICY_NAME.json, quindi esegui questo comando:
curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies
Per saperne di più sull'API Monitoring per i criteri di avviso, consulta la pagina Gestire i criteri di avviso tramite API.
Per ulteriori informazioni sull'utilizzo di curl
, consulta Richiamare curl
.
Utilizzo di Terraform
Per istruzioni su come configurare i criteri di avviso basati su PromQL utilizzando Terraform, consulta la sezione condition_prometheus_query_language
del registry Terraform google_monitoring_alert_policy
.
Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.
Richiamo di curl
Ogni chiamata curl
include un insieme di argomenti, seguito dall'URL di una risorsa API. Gli argomenti comuni includono un ID progetto Google Cloud e un token di autenticazione. Questi valori
sono rappresentati qui dalle variabili di ambiente PROJECT_ID
e TOKEN
.
Potresti anche dover specificare altri argomenti, ad esempio per specificare il tipo
della richiesta HTTP (ad esempio, -X DELETE
). La richiesta predefinita è GET
,
quindi gli esempi non lo specificano.
Ogni chiamata curl
ha questa struttura generale:
curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
Per utilizzare curl
, devi specificare il tuo ID progetto e un livello di accesso
di accesso. Per ridurre la digitazione e gli errori, puoi inserire queste informazioni nelle variabili di ambiente e poi passarle a curl
.
Per impostare queste variabili:
Crea una variabile di ambiente per contenere l'ID del progetto di definizione dell'ambito di un ambito delle metriche. Questi passaggi chiamano la variabile
PROJECT_ID
:PROJECT_ID=a-sample-project
Esegui l'autenticazione in Google Cloud CLI:
gcloud auth login
Facoltativo. Per evitare di dover specificare l'ID progetto con ogni comando
gcloud
, impostalo come predefinito utilizzando gcloud CLI:gcloud config set project ${PROJECT_ID}
Crea un token di autorizzazione e acquisiscilo in una variabile di ambiente. Questa procedura chiama la variabile
TOKEN
:TOKEN=`gcloud auth print-access-token`
Devi aggiornare periodicamente il token di accesso. Se i comandi che funzionavano suonino improvvisamente che non hai eseguito l'autenticazione, esegui di nuovo questo comando.
Per verificare di aver ricevuto un token di accesso, esegui l'eco della variabile
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....