Creare criteri di avviso con una condizione basata su PromQL (API)

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 al expr di una regola di avviso Prometheus standard.
  • duration: specifica per quanto tempo per cui ogni valutazione della query deve generare un valore true prima del viene attivato il criterio di avviso. Il valore deve essere un numero di minuti, espresso in secondi; ad esempio 600s 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. Se PrometheusQueryLanguageCondition è 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 campo name 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 campo alert 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:

  1. 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
    
  2. Esegui l'autenticazione in Google Cloud CLI:

    gcloud auth login
    
  3. 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}
    
  4. 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.

  5. Per verificare di aver ricevuto un token di accesso, esegui l'eco della variabile TOKEN:

    echo ${TOKEN}
    ya29.GluiBj8o....