Benachrichtigungsrichtlinien mit einer PromQL-basierten Bedingung (API) erstellen

Auf dieser Seite wird beschrieben, wie Sie eine Benachrichtigungsrichtlinie mit einer PromQL-basierten mithilfe der Cloud Monitoring API. Mit PromQL Abfragen in Ihren Benachrichtigungsrichtlinien ausführen, um komplexe Bedingungen mit Funktionen wie Verhältnisse, dynamische Grenzwerte und Messwertauswertung.

Allgemeine Informationen finden Sie unter Benachrichtigungsrichtlinien mit PromQL

Wenn Sie außerhalb von Cloud Monitoring in einer Prometheus-Umgebung arbeiten und Prometheus-Benachrichtigungsregeln einrichten, können Sie über die Google Cloud CLI und mit einer PromQL zu Monitoring-Benachrichtigungsrichtlinien migrieren. Abfrage. Weitere Informationen finden Sie unter Benachrichtigungsregeln und Empfänger von Prometheus migrieren

Benachrichtigungsrichtlinien mit PromQL-Abfragen erstellen

Benachrichtigungsrichtlinien erstellen Sie mit der Methode alertPolicies.create programmatisch.

Der einzige Unterschied zwischen der Erstellung von Benachrichtigungsrichtlinien PromQL-basierte Bedingungen und anderen Benachrichtigungsrichtlinien ist, dass Ihr Condition muss PrometheusQueryLanguageCondition sein. Mit diesem Bedingungstyp können Benachrichtigungsrichtlinien mit PromQL definiert werden.

Im Folgenden sehen Sie eine PromQL-Abfrage für eine Benachrichtigungsrichtlinie. Bedingung, bei der ein Messwert aus dem kube-state-Exporter verwendet wird, um die Zahl zu ermitteln dass ein Container in den letzten 30 Minuten neu gestartet wurde:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

Benachrichtigungsrichtlinie aufbauen

Verwenden Sie zum Erstellen einer Benachrichtigungsrichtlinie mit einer PromQL-basierten Bedingung die Methode AlertPolicy Bedingungstyp PrometheusQueryLanguageCondition. PrometheusQueryLanguageCondition hat die folgende Struktur:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "alertRule": string
}

Die PrometheusQueryLanguageCondition-Felder haben folgende Definitionen:

  • query: Der auszuwertende PromQL-Ausdruck. Entspricht dem expr aus einer Prometheus-Standardbenachrichtigungsregel.
  • duration: gibt die Dauer des Dabei muss bei jeder Auswertung der Abfrage ein true-Wert vor dem Benachrichtigungsrichtlinie ausgelöst. Der Wert muss eine Anzahl von Minuten sein, ausgedrückt in Sekunden zum Beispiel 600s für eine Dauer von 10 Minuten. Weitere Informationen finden Sie unter Verhalten von messwertbasierten Benachrichtigungsrichtlinien.
  • evaluationInterval: das Zeitintervall in Sekunden zwischen PromQL der Abfrage auswerten. Der Standardwert beträgt 30 Sekunden. Wenn die PrometheusQueryLanguageCondition wurde durch die Migration eines Prometheus erstellt kommt dieser Wert aus der Prometheus-Regelgruppe, Prometheus-Benachrichtigungsregel.

  • labels: Eine optionale Möglichkeit, Labels in der PromQL hinzuzufügen oder zu überschreiben Ausdrucksergebnis.

  • ruleGroup: wenn die Benachrichtigungsrichtlinie von einem Prometheus migriert wurde Konfigurationsdatei enthält, dann enthält dieses Feld den Wert des Felds name aus der Regelgruppe in Prometheus Konfigurationsdatei. Dieses Feld ist nicht erforderlich, wenn Sie PromQL-Benachrichtigungsrichtlinie in der Cloud Monitoring API

  • alertRule: wenn die Benachrichtigungsrichtlinie von einem Prometheus migriert wurde Konfigurationsdatei enthält, dann enthält dieses Feld den Wert des Felds alert aus der Benachrichtigungsregel in Prometheus Konfigurationsdatei. Dieses Feld ist nicht erforderlich, wenn Sie PromQL-Benachrichtigungsrichtlinie in der Cloud Monitoring API

Die folgende Bedingung verwendet beispielsweise eine PromQL-Abfrage, wie oft ein Container in den letzten 30 Minuten:

"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"}
}

Verwenden Sie diese Struktur als Wert des Felds conditionPrometheusQueryLanguage in einer Bedingung, die wiederum in eine Struktur für Benachrichtigungsrichtlinien eingebettet ist. Weitere Informationen zu diesen Strukturen finden Sie unter AlertPolicy.

Hier sehen Sie eine vollständige Richtlinie mit einem PrometheusQueryLanguageCondition. im JSON-Format:

{
  "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
}

Benachrichtigungsrichtlinie erstellen

Um die Benachrichtigungsrichtlinie zu erstellen, legen Sie die JSON-Datei für die Benachrichtigungsrichtlinie in einer Datei ab namens POLICY_NAME.json und führen Sie dann den folgenden Befehl aus:

curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN"
-H 'Content-Type: application/json'
-X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies

Weitere Informationen zur Monitoring API für Benachrichtigungsrichtlinien finden Sie unter Benachrichtigungsrichtlinien über API verwalten.

Weitere Informationen zur Verwendung von curl finden Sie unter curl aufrufen.

Terraform verwenden

Anweisungen zum Konfigurieren von PromQL-basierten Benachrichtigungsrichtlinien mit finden Sie im Abschnitt condition_prometheus_query_language des google_monitoring_alert_policy Terraform Registry.

Allgemeine Informationen zur Verwendung von Google Cloud mit Terraform finden Sie unter Terraform mit Google Cloud.

curl aufrufen

Jeder curl-Aufruf enthält eine Reihe von Argumenten, gefolgt von der URL einer API-Ressource. Zu den gängigen Argumenten gehören eine Google Cloud-Projekt-ID und ein Authentifizierungstoken. Diese Werte werden hier durch die Umgebungsvariablen PROJECT_ID und TOKEN dargestellt.

Möglicherweise müssen Sie auch andere Argumente angeben, um beispielsweise den Typ der HTTP-Anfrage anzugeben (z. B. -X DELETE). Die Standardanfrage ist GET. Daher wird sie in den Beispielen nicht angegeben.

Jeder curl-Aufruf hat diese allgemeine Struktur:

curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>

Wenn Sie curl verwenden möchten, müssen Sie Ihre Projekt-ID und einen Zugriffstoken angeben. Um Tippfehler und Fehler zu vermeiden, können Sie diese in Umgebungsvariablen einfügen, indem Sie sie auf diese Weise an curl übergeben.

So legen Sie diese Variablen fest:

  1. Erstellen Sie eine Umgebungsvariable, die die ID Ihres Scoping-Projekts eines Messwertbereichs enthält. Mit diesen Schritten wird die Variable PROJECT_ID aufgerufen:

    PROJECT_ID=a-sample-project
    
  2. Authentifizieren Sie sich in der Google Cloud CLI:

    gcloud auth login
    
  3. Optional. So vermeiden Sie, dass Sie Ihre Projekt-ID für jedes gcloud angeben müssen legen Sie Ihre Projekt-ID über die gcloud CLI als Standard fest:

    gcloud config set project ${PROJECT_ID}
    
  4. Erstellen Sie ein Autorisierungstoken und erfassen Sie es in einer Umgebungsvariablen. Mit diesen Schritten wird die Variable TOKEN aufgerufen:

    TOKEN=`gcloud auth print-access-token`
    

    Sie müssen das Zugriffstoken regelmäßig aktualisieren. Wenn zuvor funktionierende Befehle plötzlich melden, dass Sie nicht authentifiziert sind, führen Sie diesen Befehl noch einmal aus.

  5. Bestätigen Sie, dass Sie ein Zugriffstoken erhalten haben. Geben Sie dazu die Variable TOKEN zurück:

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