Questa pagina descrive come creare una criterio di avviso basata su PromQL utilizzando l'API Cloud Monitoring. Puoi utilizzare le query PromQL nelle policy di avviso per creare condizioni complesse con funzionalità come rapporti, soglie dinamiche e valutazione delle metriche.
Per informazioni generali, consulta la panoramica degli avvisi basati su PromQL.
Se lavori in un ambiente Prometheus al di fuori di Cloud Monitoring e disponi di regole di avviso Prometheus, puoi utilizzare Google Cloud CLI per eseguirne la migrazione a criteri di avviso basati su PromQL in Monitoring. Per saperne di più, consulta Eseguire la migrazione di regole di avviso e destinatari da Prometheus.
Creare criteri di avviso con query PromQL
Utilizzi il metodo alertPolicies.create per
creare programmaticamente policy di avviso.
L'unica differenza tra la creazione di criteri di avviso basati su PromQL e altri criteri di avviso è che il tipo Condition 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 di criterio di avviso
che utilizza una metrica dell'esportatore kube-state per trovare il numero
di volte in cui un container è stato riavviato negli ultimi 30 minuti:
rate(kube_pod_container_status_restarts[30m]) * 1800 > 1
Costruzione della criterio di avviso
Per creare una criterio di avviso basata su PromQL, utilizza il tipo di condizione AlertPolicyPrometheusQueryLanguageCondition.
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 al campoexprdi una regola di avviso Prometheus standard.duration: specifica il periodo di tempo durante il quale ogni valutazione della query deve generare un valoretrueprima che venga soddisfatta la condizione del criterio di avviso. Il valore deve essere un numero di minuti, espresso in secondi; ad esempio,600sper una durata di 10 minuti. Per saperne di più, consulta Comportamento delle policy di avviso basate su metriche.evaluationInterval: l'intervallo di tempo, in secondi, tra le valutazioni PromQL della query. Il valore predefinito è 30 secondi. Se ilPrometheusQueryLanguageConditionè stato creato eseguendo la migrazione di una regola di avviso Prometheus, 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 la criterio di avviso è stata migrata da un file di configurazione Prometheus, questo campo contiene il valore del camponamedel gruppo di regole nel file di configurazione Prometheus. Questo campo non è obbligatorio quando crei una criterio di avvisoo PromQL nell'API Cloud Monitoring.alertRule: se la criterio di avviso è stata migrata da un file di configurazione Prometheus, questo campo contiene il valore del campoalertdella regola di avviso nel file di configurazione Prometheus. Questo campo non è obbligatorio quando crei una criterio di avvisoo PromQL nell'API Cloud Monitoring.
Ad esempio, la seguente condizione utilizza una query PromQL per trovare il numero di riavvii di un container 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, che a sua volta è incorporata in una struttura di criteri di avviso.
Per saperne di più su queste strutture, consulta
AlertPolicy.
Di seguito è riportata una policy completa con una condizione PrometheusQueryLanguageCondition in formato 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 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 le policy di avviso, consulta Gestione delle policy di avviso tramite API.
Per saperne di più sull'utilizzo di curl, consulta Richiamare curl.
Disattiva il controllo dell'esistenza della metrica
Quando crei una criterio di avviso basata su PromQL, Google Cloud esegue una convalida per verificare che le metriche a cui viene fatto riferimento nella condizione esistano già in Monitoring. Tuttavia, puoi ignorare questa convalida se devi creare unacriterio di avvisoo prima che le metriche esistano. Ad esempio, potresti volerlo fare quando utilizzi l'automazione per creare nuovi progetti con un set di standard predefiniti di criteri di avviso. Se non disattivi la convalida, la creazione criterio di avviso non va a buon fine finché non vengono create le metriche sottostanti.
Per disattivare il controllo dell'esistenza della metrica, aggiungi il campo
"disableMetricValidation": true al tuo PrometheusQueryLanguageCondition:
{
"query": string,
"duration": string,
"evaluationInterval": string,
"labels": {string: string},
"ruleGroup": string,
"disableMetricValidation": true,
"alertRule": string
}
Se la condizione di una criterio di avviso fa riferimento a una metrica inesistente, la condizione viene comunque eseguita in base all'intervallo di valutazione. Tuttavia, il risultato della query è sempre vuoto. Una volta che la metrica sottostante esiste, la query restituisce i dati.
Utilizza Terraform
Per istruzioni sulla configurazione delle policy di avviso basate su PromQL utilizzando
Terraform, consulta la sezione condition_prometheus_query_language del
google_monitoring_alert_policy registro Terraform.
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
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 ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
Per utilizzare curl, devi specificare l'ID progetto e un token di accesso. Per ridurre la digitazione e gli errori, puoi inserirli nelle variabili di ambiente
e passarli a curl in questo modo.
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-projectEsegui l'autenticazione in Google Cloud CLI:
gcloud auth loginFacoltativo. Per evitare di dover specificare l'ID progetto con ogni comando
gcloud, imposta l'ID progetto come predefinito utilizzando gcloud CLI:gcloud config set project ${PROJECT_ID}Crea un token di autorizzazione e acquisiscilo in una variabile di ambiente. Questi passaggi chiamano la variabile
TOKEN: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
TOKEN:echo ${TOKEN} ya29.GluiBj8o....