Wenn Sie Grafana zur Überwachung Ihrer Systeme verwenden, sind Sie bereits gut aufgestellt. Wussten Sie jedoch, dass Sie Grafana auch zum Einrichten von Alarmen nutzen können? Dies ist eine großartige Möglichkeit, benachrichtigt zu werden, wenn etwas mit Ihren Systemen nicht stimmt. In diesem Blogbeitrag zeigen wir Ihnen, wie Sie Alarme in Grafana einrichten, damit Sie benachrichtigt werden, wenn etwas nicht den von Ihnen festgelegten Regeln für Ihr System entspricht.
Voraussetzungen
- Dienste, deren Metriken Sie überwachen möchten. In diesem Fall überwachen wir den
Airlock
-Dienst aus unserem vorherigen Blogpost. - Eine laufende Instanz von Grafana und Prometheus. Falls Sie noch keine haben, können Sie unserer Anleitung folgen, um Grafana und Prometheus auf einer EC2-Instanz einzurichten.
- Ein Dashboard mit den Metriken, die Sie überwachen möchten. Wenn Sie ebenfalls den
Airlock
-Dienst verwenden, können Sie das von uns erstellte Dashboard nutzen, das hier zu finden ist.
Alarme einrichten
Schritt 1: Erstellen eines Benachrichtigungskanals
Zuerst müssen wir einen Benachrichtigungskanal erstellen. Hierhin wird Grafana die Alarme senden. Dies können wir entweder über die Grafana-Oberfläche tun oder mithilfe eines Ansible-Moduls, wie wir es in einem unserer vorherigen Blogposts gemacht haben. Dieses Mal verwenden wir jedoch das Modul grafana_notification_channel
aus der community.grafana Sammlung. Wir werden einen Benachrichtigungskanal für einen Discord-Server erstellen. Dazu können wir die folgende Ansible-Aufgabe verwenden:
- name: Discord-Benachrichtigungskanal erstellen
community.grafana.grafana_notification_channel:
type: discord
uid: discord
name: Discord Notification Channel
discord_url: "{{ grafana_discord_url }}"
grafana_url: "http://{{ item }}:3000/"
grafana_user: "admin"
grafana_password: "{{ grafana_password }}"
with_items: "{{ monitoring_public_ip }}"
Stellen Sie sicher, dass Sie grafana_discord_url
mit Ihrer Discord Webhookeinstellung ersetzen. Die Discord-Webhook-URL finden Sie auf der Discord-Webhooks-Seite. Ersetzen Sie außerdem monitoring_public_ip
durch die öffentliche IP Ihrer Monitoring-Instanz und grafana_password
durch das Passwort Ihrer Grafana-Instanz.
Nach Ausführung der Aufgabe können wir sehen, dass der Benachrichtigungskanal erstellt wurde.
Schritt 2: Erstellen eines Alarms
Nachdem wir den Benachrichtigungskanal erstellt haben, können wir einen Alarm einrichten. Gehen Sie dazu zum Airlock-Dashboard und klicken Sie auf Bearbeiten in einem der Panels.
Erstellen Sie dann eine neue Abfrage, die verwendet wird, um den Alarm auszulösen. In diesem Fall verwenden wir die Abfrage max by (group) (airlock_database_semaphore_lock_holders{group="patroni-airlock", exported_group="patroni"})
, um die Metriken der aktuellen Anzahl der Sperrinhaber in der Gruppe patroni-airlock
abzurufen. Die rot umrahmte Abfrage ist diejenige, die wir verwenden werden. Beachten Sie, dass sie im Panel disabled
ist, da wir die Abfrage ausschließlich für den Alarm verwenden werden. Aufgrund von Einschränkungen bei den Grafana-Alarmen können wir keine Variablen in der Abfrage verwenden. Dies bedeutet, dass wir den Gruppennamen in der Abfrage fest codieren müssen. Dies ist im Abschnitt group="patroni-airlock"
und exported_group="patroni"
der Abfrage zu sehen.
Als Nächstes müssen wir den Alarm einrichten. Klicken Sie dazu auf den Reiter Alert
und dann auf Create Alert
.
Nun müssen wir den Alarm konfigurieren. In diesem Fall setzen wir den Name
auf Number of locked slots alert
, die Evaluate every
auf 1m
und die For
auf 5m
. Dies bedeutet, dass der Alarm jede Minute ausgewertet wird und ausgelöst wird, wenn die Alarmbedingung für 5 Minuten erfüllt ist.
Anschließend müssen wir die Alarmbedingung festlegen. Stellen Sie dazu die Bedingung wie folgt ein:
WHEN max() OF query(B, 5m, now) IS ABOVE 0
Das bedeutet, dass der Alarm ausgelöst wird, wenn der Maximalwert der Abfrage über 0 liegt.
Als Nächstes müssen wir die Alarmbenachrichtigung konfigurieren. In diesem Fall setzen wir Send to
an auf Discord Notification Channel
und die Message
auf patroni-airlock lock holders is above 0
. Das bedeutet, dass der Alarm an den Discord-Benachrichtigungskanal gesendet wird und die Nachricht lautet patroni-airlock lock holders is above 0
.
Klicken Sie abschließend auf Save
, um den Alarm zu speichern.
Schritt 3: Den Alarm testen
Nun, da wir den Alarm erstellt haben, können wir ihn testen. Folgen Sie dazu den Anweisungen im Testabschnitt des vorherigen Blogbeitrags.
Wir würden uns per SSH auf eine der Maschinen verbinden, auf denen der Airlock
-Dienst läuft, und den folgenden Befehl ausführen, um die Maschinen-ID abzurufen:
cat /etc/machine-id
Danach können wir die Maschinen-ID nehmen und eine JSON-Datei für die FleetLock-Anfrage erstellen. Erstellen Sie eine Datei namens body.json
mit folgendem Inhalt:
{
"id": "2204af7f41984cb19b8cde4edc06c142",
"group": "patroni"
}
Dann senden wir die FleetLock-Anfrage an den Airlock-Dienst mit dem folgenden Befehl:
curl -H "fleet-lock-protocol: true" -d @body.json http://127.0.0.1:3333/v1/pre-reboot
Auf dem Dashboard können wir dann sehen, dass eine gelbe Linie im Panel Number of locked slots
erscheint. Dies bedeutet, dass der Alarm im Pending-Zustand ist. Derzeit wird geprüft, ob die Alarmbedingung für 5 Minuten erfüllt ist. Nach 5 Minuten sehen wir eine rote Linie im Panel. Dies bedeutet, dass der Alarm ausgelöst wurde und die Benachrichtigung an den Discord-Benachrichtigungskanal gesendet wurde.
Hier ist die Benachrichtigung, die wir auf Discord erhalten haben:
Um den Alarm zu stoppen, können wir eine FleetLock-Anfrage an den Airlock-Dienst senden, um die Sperre aufzuheben. Dazu führen wir den folgenden Befehl auf der Maschine aus, auf der der Airlock
-Dienst läuft:
curl -H "fleet-lock-protocol: true" -d @body.json http://127.0.0.1:3333/v1/steady-state
Nach ein paar Minuten sollte der Alarm in den OK
-Zustand wechseln.
Fazit
Das Einrichten von Alarmen ist einer der wichtigsten Schritte, um eine proaktive Überwachung Ihrer Systeme sicherzustellen. Indem Sie die in dieser Anleitung beschriebenen Schritte befolgen, haben wir gesehen, wie Benachrichtigungskanäle erstellt, Alarmbedingungen konfiguriert und das Alarmierungssystem getestet werden kann. Grafanas Alarmierungsfunktionen ermöglichen es Ihnen, potenzielle Probleme frühzeitig zu erkennen und den reibungslosen Betrieb Ihrer Infrastruktur sicherzustellen. Warten Sie nicht, bis Probleme eskalieren; nutzen Sie die Alarmierungsfunktionen von Grafana, um den reibungslosen Betrieb Ihrer Systeme zu gewährleisten und Ausfallzeiten zu minimieren. Wir hoffen, dass dieser Blogpost für Sie hilfreich war und dass Sie etwas Neues gelernt haben.
Dirk Aumüller
Dirk Aumueller arbeitet als Associate Partner für die Proventa AG. Sein technologischer Schwerpunkt liegt bei Datenbankarchitekturen mit PostgreSQL sowie Data Management Lösungen mit Pentaho. Zusätzlich zu seinen Datenbanktransformations-Projekteinsätzen ist er regelmäßig als PostgreSQL Trainer unterwegs und betreut Studenten bei ihren Abschlussarbeiten. Seine fachlichen Erfahrungen erstrecken sich über die Branchen Telco und Financial Services.