Crea 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, vedi Criteri di avviso con PromQL.

Se lavori in un ambiente Prometheus esterno a Cloud Monitoring e disponi regole di avviso di Prometheus, puoi utilizzare Google Cloud CLI per esegui la migrazione ai criteri di avviso di Monitoring con un PromQL query. 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 criteri di avviso con PromQL.

Di seguito viene mostrata una query PromQL per un criterio di avviso condizione 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

Creazione del criterio di avviso

Per creare un criterio di avviso con una condizione basata su PromQL, utilizza il metodo 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, vedi 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 in PromQL come risultato dell'espressione.

  • ruleGroup: se è stata eseguita la migrazione del criterio di avviso da un Prometheus di configurazione del deployment, questo campo contiene il valore del campo name dal gruppo di regole di Prometheus di configurazione del deployment. 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 Prometheus di configurazione del deployment, questo campo contiene il valore del campo alert dalla regola di avviso in Prometheus di configurazione del deployment. 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 Gestire i criteri di avviso in base all'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 google_monitoring_alert_policy Terraform registry.

Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

Richiamo di curl in corso...

Ogni chiamata a curl include un insieme di argomenti, seguito dall'URL di una risorsa API. Gli argomenti più 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 accesso di accesso. Per ridurre la digitazione e gli errori, puoi inserirli nelle variabili di ambiente passandole a curl in questo modo.

Per impostare queste variabili:

  1. Crea una variabile di ambiente in cui inserire l'ID del tuo progetto di definizione dell'ambito di un ambito delle metriche. Questa procedura chiama 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 gcloud , imposta l'ID progetto come predefinito utilizzando gcloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Creare un token di autorizzazione e acquisirlo 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 hanno funzionato segnala improvvisamente che non hai eseguito l'autenticazione, emetti di nuovo questo comando.

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

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