Auf dieser Seite wird beschrieben, wie Sie mit der Cloud Monitoring API eine Benachrichtigungsrichtlinie mit einer PromQL-basierten Bedingung erstellen. Sie können PromQL-Abfragen in Ihren Benachrichtigungsrichtlinien verwenden, um komplexe Bedingungen mit Funktionen wie Verhältnissen, dynamischen Schwellenwerten und Messwertbewertungen zu erstellen.
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 zu Monitoring-Benachrichtigungsrichtlinien mit einer PromQL 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 Bedingung in einer Benachrichtigungsrichtlinie, bei der ein Messwert aus dem kube-state
-Exporteur verwendet wird, um die Anzahl der Neustarts eines Containers in den letzten 30 Minuten zu ermitteln:
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 die folgenden Definitionen:
query
: Der PromQL-Ausdruck, der ausgewertet wird. Entspricht demexpr
aus einer Prometheus-Standardbenachrichtigungsregel.duration
: gibt die Dauer des Dabei muss bei jeder Auswertung der Abfrage eintrue
-Wert vor dem Benachrichtigungsrichtlinie ausgelöst. Der Wert muss eine Anzahl von Minuten sein, ausgedrückt in Sekunden zum Beispiel600s
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. WennPrometheusQueryLanguageCondition
durch die Migration einer Prometheus-Benachrichtigungsregel erstellt wurde, stammt dieser Wert aus der Prometheus-Regelgruppe, die die Prometheus-Benachrichtigungsregel enthielt.labels
: Optionale Möglichkeit, Labels im Ergebnis des PromQL-Ausdrucks hinzuzufügen oder zu überschreiben.ruleGroup
: wenn die Benachrichtigungsrichtlinie von einem Prometheus migriert wurde Konfigurationsdatei enthält, dann enthält dieses Feld den Wert des Feldsname
aus der Regelgruppe in Prometheus Konfigurationsdatei. Dieses Feld ist nicht erforderlich, wenn Sie PromQL-Benachrichtigungsrichtlinie in der Cloud Monitoring APIalertRule
: Wenn die Benachrichtigungsrichtlinie aus einer Prometheus-Konfigurationsdatei migriert wurde, enthält dieses Feld den Wert des Feldsalert
aus der Benachrichtigungsregel in der Prometheus-Konfigurationsdatei. Dieses Feld ist nicht erforderlich, wenn Sie PromQL-Benachrichtigungsrichtlinie in der Cloud Monitoring API
In der folgenden Bedingung wird beispielsweise mit einer PromQL-Abfrage ermittelt, wie oft ein Container in den letzten 30 Minuten neu gestartet wurde:
"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, fügen Sie die JSON-Datei der Benachrichtigungsrichtlinie in eine Datei namens POLICY_NAME.json ein 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
Eine Anleitung zum Konfigurieren von PromQL-basierten Benachrichtigungsrichtlinien mit Terraform finden Sie im Abschnitt condition_prometheus_query_language
der 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:
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
Authentifizieren Sie sich in der Google Cloud CLI:
gcloud auth login
Optional. Damit Sie nicht bei jedem
gcloud
-Befehl Ihre Projekt-ID angeben müssen, legen Sie Ihre Projekt-ID mithilfe der gcloud CLI als Standard fest:gcloud config set project ${PROJECT_ID}
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.
Bestätigen Sie, dass Sie ein Zugriffstoken erhalten haben. Geben Sie dazu die Variable
TOKEN
zurück:echo ${TOKEN} ya29.GluiBj8o....