Engineering

Uptime-Monitoring mit Heartbeat und dem Elastic Stack

Mit der Version 6.5 des Elastic Stack freuen wir uns, die allgemeine Verfügbarkeit von Heartbeat vorzustellen. Heartbeat wurde ursprünglich als Betaversion im Januar 2017 vorgestellt und ist ein leichtgewichtiger Shipper, ähnlich wie unsere anderen Beats (MetricbeatFilebeatWinlogbeat usw.), für Ihr Uptime-Monitoring.

Sie können Heartbeat innerhalb oder außerhalb Ihres Netzwerks einsetzen. Die Lösung benötigt lediglich Netzwerkzugriff auf den gewünschten HTTP-, TCP- oder ICMP-Endpunkt. Für die Konfiguration reicht es aus, wenn Sie Heartbeat eine Liste der URLs angeben, die Sie überwachen möchten. Heartbeat prüft in regelmäßigen Abständen, ob der Endpunkt erreichbar ist, und meldet diese Information zusammen mit anderen nützlichen Metriken an Elasticsearch. Diese Informationen werden automatisch in vorab erstellten Kibana-Dashboards angezeigt und bieten eine schlüsselfertige Uptime-Monitoring-Lösung.

Ich werde Ihnen jetzt zeigen, wie Sie Heartbeat mit dem Elastic Stack einrichten und verwenden können.

Heartbeat installieren

Um Heartbeat zu installieren, müssen Sie eine vorab erstellte ausführbare Datei für Ihre Plattform herunterladen und extrahieren. In diesem Beispiel verwende ich macOS, aber wir unterstützen viele weitere Betriebssysteme, und Sie können die passenden Befehle für Ihr System auswählen.

Laden Sie die aktuelle Version von Heartbeat herunter und extrahieren Sie die Datei:

curl -l -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-6.5.0-darwin-x86_64.tar.gz
tar xzvf heartbeat-6.5.0-darwin-x86_64.tar.gz

Uptime-Monitore konfigurieren

Heartbeat braucht eine Liste von URLs, um zu wissen, welche Dienste geprüft werden sollen. Diese Konfiguration wird in der Datei heartbeat.yml im Ordner /heartbeat angegeben. Das folgende Beispiel führt mehrere HTTP-Prüfungen im Abstand von 10 Sekunden mit Heartbeat aus:

# Configure monitors
heartbeat.monitors:
- type: http
  # List or urls to query
  urls:
        - "https://www.elastic.co"
        - "https://discuss.elastic.co"
  # Configure task schedule
  schedule: '@every 10s'

Neben HTTP und HTTPS kann Heartbeat auch TCP- und ICMP-Prüfungen durchführen, um Ihnen einen besseren Überblick über Ihre Dienstebenen zu bieten. In Heartbeat können wir außerdem zusätzliche Prüfungsebenen definieren, um beispielsweise Antwortcode, Text und Header mit HTTP- und HTTPS-Monitoren zu überprüfen. Mit den TCP-Monitoren können wir Ports und Zeichenfolgen überprüfen.

heartbeat.monitors:
- type: http
# List or urls to query
  urls: ["http://localhost:9200"]
  # request details:
  check.request:
       method: GET
  check.response:
       body: "You Know, for Search"
# Configure task schedule
  schedule: '@every 10s'

In diesem Beispiel für eine HTTP-Textprüfung sucht Heartbeat nach der Zeichenfolge „You Know, for Search“ unter „http://localhost:9200“ (die einzige URL in der Konfiguration).

In allen Heartbeat-Monitoren können wir zusätzliche Parameter wie etwa name, timeout und schedule definieren. Sie finden eine vollständige Konfigurationsanleitung in der Dokumentation zum Konfigurieren von Heartbeat.

Im letzten Konfigurationsschritt richten wir die Heartbeat-Ausgaben ein, um unsere Ausgabedaten weiterzuleiten. Heartbeat unterstützt selbstverwaltete Elasticsearch-Cluster, Elastic Cloud, Logstash und weitere Ausgaben. In diesem Beispiel sende ich meine Heartbeat-Daten an meine lokale Elasticsearch-Instanz (localhost:9200):

output.elasticsearch:
# Array of hosts to connect to.
  hosts: ["localhost:9200"]
 # Optional protocol and basic auth credentials.
 #protocol: "https"
 username: "elastic"
  password: "changeme"

Sie finden ein Beispiel mit einer kompletten Konfiguration in der Datei heartbeat.reference.yml.

Heartbeat zum ersten Mal starten

Heartbeat wird mit vorab erstellten Dashboards ausgeliefert und ist im vorkonfigurierten Zustand sofort einsatzbereit. Mit den folgenden Befehlen können Sie die Dashboards einrichten und Heartbeat ausführen:

Heartbeat-Dashboards in Kibana einrichten: (optional, muss nur einmalig ausgeführt werden)

./heartbeat setup --dashboards

Heartbeat ausführen:

./heartbeat -e

Sobald Sie diesen Befehl ausführen, prüft Heartbeat die Liste der konfigurierten URLs, sendet die Informationen zurück an den Elastic Stack und füllt die Kibana-Dashboards aus.

Uptime-Daten in Kibana visualisieren

Wenn Sie Kibana öffnen, werden die Heartbeat-Informationen in der Registerkarte „Discover“ angezeigt, wenn Sie den Heartbeat-Index auswählen (standardmäßig heartbeat-*):

In der Liste der Dashboards finden Sie auch das Dashboard „Heartbeat HTTP monitoring“, das mit sämtlichen von Heartbeat gesendeten Informationen ausgefüllt ist:

Hier sehen Sie das Standarddashboard für Heartbeat:

Oben links in der Ecke sehen Sie eine Tabelle mit einer Liste aller von Heartbeat überwachten Endpunkte zusammen mit deren Antwortzeiten. Oben rechts sehen Sie eine Zusammenfassung der Monitor-Statuscodes und darunter zusätzliche Grafiken mit dem Prozentanteil der Monitore, die verfügbar/nicht verfügbar sind, Antwortzeiten über einen Zeitraum und Anzahl der Prüfungen über einen Zeitraum.

Die Heartbeat-Dashboards sind interaktiv. Mit dem Standarddashboard für Heartbeat können Sie jederzeit erkennen, ob ein bestimmter Endpunkt verfügbar ist, indem Sie auf den Abschnitt „monitor down“ (Monitor nicht verfügbar) klicken (die rote Scheibe im Tortendiagramm für den HTTP-Status oben rechts). Wenn Sie darauf klicken, wird ein Filter auf das Dashboard angewendet, um nur die Monitore anzuzeigen, die nicht verfügbar sind.

Sie können die Kibana-Dashboards und Visualisierungen für Heartbeat jederzeit an Ihre Bedürfnisse anpassen. Klicken Sie dazu zunächst auf die Schaltfläche „Bearbeiten“ oben rechts im Dashboard, klicken Sie auf das Zahnrad für eine bestimmte Visualisierung, und wählen Sie „Visualisierung bearbeiten“ aus. Sie können auch neue Visualisierungen auf Basis von Heartbeat-Daten erstellen oder Heartbeat-Metriken mit anderen Log-, Metrik- und APM-Datenquellen kombinieren und zu jedem beliebigen Ops-Dashboard hinzufügen.

Heartbeat-Daten mit anderen Ops-Datenquellen kombinieren

Kombinieren Sie Heartbeat-Daten mit zusätzlichen Datenquellen wie Metricbeat, Filebeat und APM, um beim Eingrenzen von Ausfällen wichtige Informationen zu erhalten. Heartbeat benachrichtigt Sie, wenn ein bestimmter Dienst nicht verfügbar ist, und Metricbeat und APM liefern Ihnen eine Liste von Verdächtigen. Auf diese Weise können Sie die Wiederherstellungsfrist verkürzen und Ihre Anstrengungen auf den richtigen Ort konzentrieren, anstatt dass sich alle Beteiligten im Krisenraum wie üblich gegenseitig beschuldigen.

Auf unserer Lösungsseite erfahren Sie mehr über unsere Lösungen für Logging, Metriken und APM.

Hier sehen Sie ein Beispiel für ein Kibana-Dashboard, das Metriken aus Heartbeat (obere zwei Bereiche) und Metricbeat (untere zwei Bereiche) vereint.

  • Auf der linken Seite sehen Sie, dass die von Heartbeat erkannten Ausfälle von Endpunkten immer zusammen mit einer erhöhten Fehlerzahl im Nginx-Modul auftreten, die wiederum von Metricbeat erkannt werden.
  • Auf der rechten Seite sehen wir eindeutig, dass erhöhte HTTP-Pingzeiten immer zusammen mit einer von Metricbeat gemeldeten gestiegenen Anforderungsrate im NGINX-Server auftreten.

Anhand dieser Beobachtung können wir folgern, dass die Nginx-Fehler durch massive Anforderungsspitzen verursacht werden, was wiederum die Fehler in den Heartbeat-Prüfungen auslöst.

Alerting und Anomalieerkennung

Mit den Warnfunktionen können Sie Warnungen und Benachrichtigungen für Ausfälle und Leistungsprobleme auf Basis von Heartbeat-Überwachungsdaten konfigurieren. Außerdem können Sie die Machine-Learning-Funktionen des Elastic Stack nutzen, um Anomalien anhand von Zeitreihenanalysen der Heartbeat-Daten zu erkennen. Mehr dazu in meinem nächsten Heartbeat-Blogeintrag.

Zusammenfassung

Monitoring ist keine einfache Aufgabe. Probleme müssen schnell identifiziert, kommuniziert und behoben werden. Wenn Sie momentan mit verschiedenen Tools arbeiten, um den Überblick über Ihre Anwendungen und Ihre Infrastruktur zu behalten, dann wird Ihre Aufgabe zusätzlich erschwert.

Mit Heartbeat erhalten Sie effektive Funktionen für Ihr Uptime-Monitoring zusätzlich zu den vorhandenen Logs, Metriken und APM-Features im Elastic Stack. Verwenden Sie die Lösung eigenständig oder in Kombination mit anderen wichtigen Ops-Datenquellen in Elasticsearch, und Sie verpassen nie wieder einen Beat!

Heartbeat-Ressourcen

Das war’s auch schon! Ich hoffe, Sie fanden diesen Überblick hilfreich. Um anzufangen, laden Sie Heartbeat herunter und lesen Sie die Dokumentation, um sich mit dem Funktionsumfang vertraut zu machen. Mit einer der neuesten Heartbeat-Funktionen können Sie Ihre Uptime-Daten an den Elasticsearch Service in der Elastic Cloud senden, das gehostete Elasticsearch- und Kibana-Angebot von den Entwicklern dieser Projekte.

Falls Sie Fragen haben, sprechen Sie uns im Heartbeat-Diskussionsforum an. Falls Sie einen Bug melden oder eine Erweiterungsanfrage stellen möchten, können Sie dies in Github tun.