Sentinela ist ein hochgradig konfigurierbarer Betriebssystem-Watchdog, der auf der Grundlage vorkonfigurierter Regeln Maßnahmen ergreifen kann.
Die ursprüngliche Motivation bestand darin, einen Daemon zu erstellen, der eine Reihe von Protokolldateien überwacht und das Betriebssystem herunterfährt, wenn keine Aktivität vorliegt. Dies war äußerst nützlich, um sicherzustellen, dass meine ec2-Instanzen nach einer bestimmten Leerlaufzeit heruntergefahren wurden.
Aufgrund des modularen Aufbaus von Sentinela können Sie es auch erweitern, um Netzwerkverkehr, Prozesse, Festplattennutzung usw. zu überwachen und beliebige Aktionen wie das Senden einer E-Mail, das Senden einer SNMP-Warnung usw. auszuführen.
Sentinela wird mithilfe der Datei config/sentinela.cfg
konfiguriert, mit der Sie Regeln aktivieren können, die ausgeführt werden sollen.
Regeln werden im Python-Code definiert und befinden sich im Verzeichnis rules/
. In den meisten Fällen verwenden Regeln zwei verschiedene Arten von Modulen: * modules/monitors/
: Einmal pro Minute aus einer Ressource lesen und deren Status speichern. Geben Sie bei Bedarf True
zurück, um eine Aktion auszulösen. * modules/actions/
: Aktionen führen einen Befehl aus, senden eine E-Mail oder jeden anderen Python-definierten Code, den Sie sich vorstellen können.
Um Sentinela zu starten, müssen Sie Folgendes ausführen: text sudo python sentinela.py
Sie können alle Sentinela-Aktionen überwachen, indem Sie die Datei /var/log/sentinela.log
lesen. Eine normale Sentinela-Protokolldatei sieht so aus:
[29.03.2013 11:41:20,440][INFO] Erfolgreich gestartet [29.03.2013 11:41:20,441][DEBUG] Rules.apache_shutdown importiert [29.03.2013 12:51:50,480][DEBUG] Sentinela lebt ... [29.03.2013 12:58:34,009][DEBUG] Der Befehl „shutdown now -h“ wird ausgeführt.
Das Erstellen eigener Regeln ist einfach. Nehmen wir an, wir möchten eine Regel erstellen, die den Namen des Monitors in die Protokolldatei von Sentinela druckt, wenn die Protokolldatei /var/log/apache2/access.log
10 Minuten lang inaktiv ist. Der Code sieht folgendermaßen aus:
1: aus module.monitors.new_log_entries NewLogEntries importieren 2: aus module.actions.debug_print DebugPrint importieren 3: 4: apache_log = NewLogEntries('/var/log/apache2/access.log', 10) 5: debug_print = DebugPrint() 6: 7: 8: def call_every_minute(): 9: if apache_log.call_every_minute(): 10: debug_print.do(apache_log)
Allgemeine Regeln verfügen über einen Monitor und eine Aktion, in diesem Fall NewLogEntries
und DebugPrint
(Zeilen 1 und 2).
Beide müssen auf Modulebene instanziiert werden (Zeilen 4 und 5), um den Status beibehalten zu können. Wenn Sie Ihre Monitor- oder Aktionsinstanzen innerhalb von call_every_minute
erstellen, wird jedes Mal eine neue Instanz erstellt und es wird kein Status beibehalten.
Monitore und Aktionen können Parameter haben. In dieser Zeile 4 sehen wir, wie der NewLogEntries
-Monitor zwei Parameter akzeptiert:
True
zurückgegeben wird? Die Funktion call_every_minute
(Zeile 8) muss definiert werden, damit eine Regel gültig ist. Diese Funktion wird, wie der Name schon sagt, jede Minute von sentinela aufgerufen. Sie könnten beliebige Aktionen definieren, die in diesem Kontext ausgeführt werden sollen, aber wir entscheiden uns, die Methode call_every_minute
des Monitors aufzurufen und basierend auf ihrem Rückgabewert die Aktion mit der Instanz apache_log
als Parameter aufzurufen.
apache_log.call_every_minute()
gibt nur dann True
zurück, wenn die als Parameter übergebene Datei innerhalb von 10 Minuten keine neuen Einträge enthält.
debug_print.do
gibt den Namen des als Parameter übergebenen Monitors aus.
Nachdem Sie Ihre eigene Regel erstellt haben, müssen Sie diese Schritte ausführen, um sie auszuführen:
.py
Datei in das Verzeichnis rules/
in der Sentinela-Installationconfig/sentinela.cfg
so, dass sie Ihren Regelnamen enthält (ohne die Erweiterung).Beispielregeln finden Sie im Verzeichnis sentinela/rules in diesem Repository.
Um Ihre neuen Regeln vor der Bereitstellung zu testen, können Sie die folgenden Schritte ausführen.
Melden Sie Ihre Probleme und Funktionswünsche im Issue-Tracker von Sentinela und ich werde sie gerne beheben.