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

Questa pagina descrive come creare un criterio di avviso con una condizione basata su PromQL utilizzando l'API Cloud Monitoring. Puoi utilizzare le query PromQL nei tuoi criteri di avviso per creare condizioni complesse con funzionalità 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, consulta la pagina Eseguire la migrazione di regole e ricevitori di avviso da Prometheus.

Creare criteri di avviso con query PromQL

Utilizza il metodo alertPolicies.create per creare ed eseguire programmatically i criteri di avviso.

L'unica differenza tra la creazione di criteri di avviso con condizioni basate 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 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 campo expr di una regola di avviso Prometheus standard.
  • duration: specifica il periodo di tempo durante il quale ogni valutazione della query deve generare un valore true prima che venga 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 le valutazioni della query in PromQL. Il valore predefinito è 30 secondi. Se PrometheusQueryLanguageCondition è 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 è 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 quando crei un 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 quando crei un criterio di avviso PromQL nell'API Cloud Monitoring.

Ad esempio, la seguente condizione utilizza una query PromQL per trovare il numero di volte in cui un contenitore è 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, che a sua volta è incorporata in una struttura di criteri di avviso. Per ulteriori informazioni su queste strutture, consulta AlertPolicy.

Di seguito è riportato un criterio completo con una condizione PrometheusQueryLanguageCondition 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 relativo file JSON in un file chiamato POLICY_NAME.json, quindi esegui il seguente 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 Eseguire 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 la specificano.

Ogni chiamata a 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 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. Questi passaggi chiamano 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'istruzione echo della variabile TOKEN:

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