# Sensu (Monitoring)

Sensu ist ein Service-Monitoring Framework zum Überwachen von IT-Infrastrukturen. Sensu ermöglicht das Monitoring von Servern, Containern, Anwendungen und Netzwerkgeräten. Sensu ist komplett in Ruby (Programmiersprache) geschrieben und verwendet RabbitMQ zum Austausch von Daten zwischen den Komponenten, sowie Redis zum Speichern von Daten. Es wurde von Grund auf für die Verwendung in dynamischen Cloudumgebungen in Zusammenarbeit mit Serverautomatisierungssoftware wie Puppet, Ansible und Chef konzipiert. Dies zeigt sich unter anderem dadurch, dass Sensu sämtliche Konfigurationen als JSON Dateien bereitstellt und neue Server sich automatisch im Monitoringnetzwerk registrieren können.
Sensu wurde ursprünglich von Sean Porter bei Sonian.com entwickelt. Es wurde erstmals im November 2011 als Open-Source-Software unter der MIT-Lizenz veröffentlicht. Sean Porter wechselte 2013 zu „Heavy Water Operations, LLC“, mit denen er im April 2015 Sensu Enterprise veröffentlichte. Sensu Enterprise ist eine kommerzielle Version, die den weiterhin als freie Software verfügbaren Sensu-Core um zusätzlichen Features, Integrationen und Support erweitert. Im November 2019 wurde angekündigt, dass der Open Source Sensu Core 1.x nicht weiterentwickelt wird und sein end of life (EOL) im Dezember 2019 erreicht.
Im Dezember 2019 wurde „Sensu Go“ als Nachfolger veröffentlicht, mit Version 5.0 am 5. Dezember 2019.

## Bedeutung

Sensu ist ein vergleichsweise neues Monitoring-Framework das jedoch im Wachstum begriffen ist. In einer Umfrage von 2014 erreichte Sensu einen Marktanteil von 9,11 %, in einer weiteren Umfrage, ebenfalls aus 2014, einen Anteil von 7,5 %. In der Zwischenzeit befinden sich unter den bekannteren Firmen die Sensu verwenden Namen wie Tesla, Cisco, Intuit und Yahoo. Die Verbreitung von Sensu wird sicherlich gefördert durch eine aktive Community, die eine Vielzahl von Plugins entwickelt, sowie die Tatsache, dass sich die Plugins bestehender und etablierter Monitoring Systeme wie Nagios, Icinga und Zabbix sehr einfach in Sensu weiterverwenden lassen.

## Grundlegende Arbeitsweise

Sensu baut auf zwei grundlegenden Bausteinen auf: Checks, welche auf den Sensu-Clients ausgeführt werden und Event Processing, welches am Sensu-Server ausgeführt wird.
Checks erlauben es, Dienste zu überwachen (ist Nginx aktiv, läuft der MySQL Dienst) oder Ressourcen zu messen (wie viel Speicherplatz ist auf einer Festplatte frei, wie hoch ist die CPU-Auslastung). Checks sind Kommandos oder Skripte, die vom Sensu-Client auf den zu überwachenden Maschinen ausgeführt werden, und Daten an STDOUT oder STDERR ausgeben. Diese Daten können entweder simple Statuscodes sein, die den Zustand des überwachten Services darstellen (zum Beispiel 0 für OK, 1 für WARNING und 2 für CRITICAL), oder komplexere Metriken, wie zum Beispiel MySQL Statistiken. Sensu Checks verwenden dieselbe Spezifikation wie Nagios, was dazu führt, dass Nagios Check Plugins auch als Sensu Checks verwendet werden können. Die von den Checks produzierten Daten werden über den Sensu Transport (standardmäßig RabbitMQ) an den Event Processor (Sensu-Server) weitergeleitet. Der Sensu-Server führt aufgrund dieser Daten einen oder mehrere in den Checks spezifizierten Handler aus. Ein Handler kann verschiedenste Aktionen ausführen, wie zum Beispiel eine E-Mail Warnung versenden, PagerDuty Alerts generiert, oder die Daten zur weiteren Auswertungen an eine Time Series Database (TSDB) wie Graphite oder InfluxDB weiterleitet.

## Architektur

Sensu setzt sich aus folgenden Komponenten zusammen:

### Sensu-Client

Der Sensu-Client ist der Prozess, der die Checks auf den zu überwachenden Systemen ausführt. Sensu-Clients können sich beim Sensu-Server für Checks registrieren. Ein Sensu Client kann Check selbständig anstoßen (Standalone Checks), oder sie auf Anfrage des Sensu-Servers ausführen (Subscription Checks). Die Ergebnisse eines Checks werden über den Sensu Transport weitergeleitet.

### Transport

Die Sensu Komponenten kommunizieren nicht direkt miteinander, sondern verwenden hierfür einen Message Bus. Der standardmäßig verwendete Message Bus ist RabbitMQ.

### Datenspeicher

Zum persistieren von Daten verwendet Sensu die NoSQL-Datenbank Redis. Die gespeicherten Daten umfassen Daten zur Sensu-Client Registry, Check Ergebnisse, und Check Ausführungszeitpunkten. Der Sensu-Server, sowie die Sensu-API und Dashboardservices benötigen Zugriff zum Datenspeicher. Sensu-Clients selbst benötigen keinen Zugriff.

### Sensu-Server

Der Sensu-Server ist der Prozess der die Ergebnisse der Checks über RabbitMQ erhält, und entsprechend darauf reagiert, indem er zum Beispiel lokale Handler ausführt. Der Sensu-Server verwaltet auch das Registrieren von Sensu-Clients, sowie das Anstoßen von Checks auf den Clients.

### Sensu API

Die in Redis gespeicherten Monitoringdaten, sowie grundlegende Sensu Funktionen können über eine RESTful HTTP JSON API angesteuert werden.