iX 6/2019
S. 124
Praxis
Monitoring

Automatisierte Systemüberwachung und Eventsteuerung mit Sensu Go

Agiler Wächter

Christian Michel

Mit dem quelloffenen, „API-driven“ Monitoring-Tool Sensu Go lässt sich der Gesundheitszustand von Servern, CPUs, Netzwerkgeräten und Appliances, aber auch von Containern, VMs und Functions in der Cloud flexibel überwachen.

DevOps und die Cloud machen die IT-Infrastruktur in Unternehmen dynamischer. Automatisierungs und Provisionierungswerkzeuge wie Ansible, Chef, Puppet oder Salt ermöglichen eine flexible Skalierung von Anwendungen und Servern sowie schnelle Konfigurationsänderungen.

Die neue heile Welt verändert auch die Anforderungen an Monitoring-Tools. Wurde in statischen Umgebungen das Monitoring noch manuell gepflegt, ist eine händische Wartung in dynamischen Umgebungen undenkbar. Die Überwachungstools der neueren Generation verfügen daher idealerweise über RESTful APIs und sind zur besseren Skalierung nicht monolithisch aufgebaut.

Diese Anforderungen erfüllt Sensu Go, ein Tool, das Hersteller Sensu Inc. als Monitoring Event Pipeline bezeichnet. Ein Event ist dabei das Ergebnis einer Prüfung. In der Pipeline lassen sich diese nach vom Administrator bestimmten Regeln filtern, im Format verändern oder weiterleiten. Sensu Go führt nicht nur herkömmliche Servicechecks aus, sondern sammelt auch Metriken (Gesundheitswerte) der überwachten Systeme (siehe Kasten „Paradigmenwechsel“). Eine rollenbasierte Zugriffskontrolle (RBAC) und unterschiedliche Namespaces ermöglichen eine mandantenbasierte Konfiguration mit unterschiedlich berechtigten Benutzern.

Checken und messen

Sensu Go ist als .deb- und RPM-Paket verfügbar und besteht aus den Komponenten Sensu-Backend und Sensu-Agent. Das Sensu-Backend stellt die Serverkomponente dar, während der Sensu-Agent auf den zu überwachenden Systemen installiert wird. Das Paket Sensu - Cli bringt den Kommandozeilenbefehl sensuctl mit, mit dem Administratoren Checks, Handler und Filter erstellen, aktualisieren, abfragen und löschen. Dabei „spricht“ sensuctl ausschließlich mit der RESTful API, sodass Sensu-Cli auf einem beliebigen System beheimatet sein kann.

Der Sensu-Agent (auch: Event Producer) wird auf den zu überwachenden Systemen installiert. Dies können zum Beispiel Server, virtuelle Maschinen oder Container sein. Von dort aus meldet sich der Agent selbsttätig an den Sensu-Backends an, die in seiner Konfigurationsdatei hinterlegt sind, und sendet ab diesem Zeitpunkt turnusmäßig Keep -alive-Nachrichten. Im Sensu-Sprachgebrauch wird ein angemeldetes System als Entity bezeichnet.

Welche Prüfungen (Servicechecks oder Skripte, die Metriken sammeln) der Agent auf „seinem“ System ausführen muss, entnimmt er seiner Konfigurationsdatei. Dort sind sogenannte Subscriptions hinterlegt. Diese Abonnements lassen sich auch als eine Art Gruppierung verstehen. Jeder Agent führt die Prüfungen durch, die zu seinen Subscriptions passen. Darüber hinaus erhebt der Agent automatisch weitere Informationen. Dazu gehören die vorhandenen Netzwerkschnittstellen, IP- und MAC-Adressen sowie Merkmale des Betriebssystems. Administratoren haben zudem die Möglichkeit, benutzerdefinierte Werte – sogenannte Labels – in der Konfiguration des Agenten zu hinterlegen. Das können zum Beispiel Zugangsdaten für Datenbankprüfungen sein oder Links zu Wiederherstellungsplänen.

Automatisierte Verteilung von Plug-ins

Plug-ins lassen sich als Assets – in Form von tar-Archiven aus einer oder mehreren Dateien – automatisch auf die zu überwachenden Systeme verteilen. Dazu platziert der Administrator sie an einem Ort, von dem aus die Agenten sie herunterladen können. Neben dem Namen und der URL enthält eine Asset-Definition die zugehörige SHA512-Summe des Archivs. Ist ein Asset definiert, kann es als Abhängigkeit beispielsweise in einer Prüfdefinition hinterlegt sein. Dadurch können die Agenten ein Asset zur Laufzeit in ein lokales Cache-Verzeichnis herunterladen und ausführen, sollte der Agent es noch nicht besitzen. Anhand der Prüfsumme und weiterer Filtermechanismen wird außerdem sichergestellt, dass das gewünschte Asset unverändert und nur auf den dafür vorgesehenen Systemen ausgeführt wird.

Bei der Art der Prüfungen gibt sich Sensu Go besonders aufgeschlossen. Was das Tool überwachen kann, ist im Prinzip nur durch die eingesetzten Plugins begrenzt. Dabei kann ein Plug-in jedes von der Kommandozeile ausführbare Skript sein. So versteht sich Sensu Go mit nahezu allen Plug-ins, die andere Monitoringlösungen bereitstellen. Das Tool liest zum Beispiel nicht nur das Ausgabeformat der Nagios-Plug-ins, sondern auch das Graphite Plaintext Protocol sowie das Line Protocol von InfluxDB und OpenTSDB. Mithilfe des Plug-ins sensu-prometheus-collector lassen sich Prometheus-Endpunkte abfragen und deren Metriken an das Sensu-Backend übermitteln. Die Sensu-Community stellt eine große Zahl an weiteren Plugins bereit.

Der Agent kann auch Ergebnisse und Alarme von Drittlösungen entgegennehmen, die gegebenenfalls nicht von außen abfragbar sind. Standardmäßig ordnet Sensu Go Events dem Agenten zu, von dem sie kommen. Je nach Anwendungsfall können sie aber auch einem anderen Agenten (Entity) zugeordnet werden. Außerdem besteht die Möglichkeit, den integrierten StatsD-Listener zu verwenden, an den Administratoren Metriken im StatsD Line Protocol (<metricname>:<value>| <type>) von Dritt-Tools übermitteln lassen können.

Die Event-Pipeline kann Ereignisse, die die Sensu-Agenten auf den zu überwachenden Systemen sammeln, beliebig weiterverarbeiten (Abb.1).

Insbesondere in dynamischen Umgebungen werden Container mit einem gewünschten Dienst je nach Notwendigkeit erstellt und nach verrichteter Arbeit auch wieder vernichtet. Wird ein System heruntergefahren, kann der darauf installierte Agent keine Keepalive-Nachrichten mehr an das Sensu-Backend senden. Es gibt zwei Möglichkeiten, damit umzugehen. Entweder wird dieser Agent nach einem definierbaren Zeitraum als nicht mehr erreichbar markiert und ein entsprechender Alarm ausgelöst, oder man legt fest, dass sich ein Agent bei ordnungsgemäßem Herunterfahren aktiv vom Monitoring abmeldet. Dann löscht er sich und all seine Events automatisch aus dem Sensu-Backend, ohne dass ein Alarm generiert wird. Auch bei der Anmeldung von Agenten kann das Sensu-Backend Handler anstoßen. Damit lässt sich zum Beispiel der Status eines Systems oder dessen Systeminformationen automatisch in einer CMDB (Configuration Management Database) aktualisieren.

Kommentieren