Sentinela est un chien de garde du système d'exploitation hautement configurable qui peut prendre des actions basées sur des règles préconfigurées.
La motivation initiale était de créer un démon qui surveillerait un ensemble de fichiers journaux et, si aucune activité n'était présente, arrêterait le système d'exploitation. Cela a été extrêmement utile pour m'assurer que mes instances ec2 étaient arrêtées après un temps d'inactivité spécifié.
Compte tenu de la nature modulaire de Sentinela, vous pouvez également l'étendre pour surveiller le trafic réseau, les processus, l'utilisation du disque, etc. et exécuter des actions telles que l'envoi d'un e-mail, l'envoi d'une alerte SNMP, etc.
Sentinela configuré à l'aide du fichier config/sentinela.cfg
, qui permet d'activer les règles qui vont être exécutées.
Les règles sont définies dans le code Python et se trouvent dans le répertoire rules/
. Dans la plupart des cas, les règles utilisent deux types de modules différents : * modules/monitors/
: Une fois par minute, lit une ressource et stocke son statut. Lorsque cela est nécessaire, renvoyez True
pour déclencher une action. * modules/actions/
: Les actions exécuteront une commande, enverront un e-mail ou tout autre code défini par Python que vous pouvez imaginer.
Pour démarrer Sentinela, vous devez exécuter : text sudo python sentinela.py
Vous pouvez surveiller toutes les actions de Sentinela en lisant le fichier /var/log/sentinela.log
. Un fichier journal sentinelle standard ressemble à ceci :
[2013-03-29 11:41:20,440][INFO] Démarrage réussi [2013-03-29 11:41:20,441][DEBUG] Règles importées.apache_shutdown [2013-03-29 12:51:50,480][DEBUG] Sentinela est vivante ... [2013-03-29 12:58:34,009][DEBUG] Je vais exécuter la commande "shutdown now -h".
Créer vos propres règles est simple, disons que nous voulons créer une règle qui imprime le nom du moniteur dans le fichier journal de Sentinela lorsque le fichier journal /var/log/apache2/access.log
est inactif pendant 10 minutes. Le code ressemblera à ceci :
1 : depuis modules.monitors.new_log_entries, importez NewLogEntries 2 : depuis modules.actions.debug_print, importez DebugPrint 3 : 4 : apache_log = NewLogEntries('/var/log/apache2/access.log', 10) 5 : debug_print = DebugPrint() 6 : 7 : 8 : def call_every_minute() : 9 : si apache_log.call_every_minute() : 10 : debug_print.do(apache_log)
Les règles communes auront un moniteur et une action, dans ce cas il s'agit NewLogEntries
et DebugPrint
(lignes 1 et 2).
Les deux doivent être instanciés au niveau du module (lignes 4 et 5) afin de pouvoir conserver leur état. Si vous créez vos instances de moniteur ou d'action dans call_every_minute
une nouvelle instance sera créée à chaque fois et aucun état ne sera conservé.
Les moniteurs et les actions peuvent avoir des paramètres, dans cette ligne 4 nous voyons comment le moniteur NewLogEntries
prend deux paramètres :
True
La fonction call_every_minute
(ligne 8) doit être définie pour qu'une règle soit valide. Cette fonction, comme son nom l'indique, sera appelée toutes les minutes par sentinelle. Vous pouvez définir n'importe quelle action à exécuter dans ce contexte, mais nous décidons d'appeler la méthode call_every_minute
du moniteur et, en fonction de sa valeur de retour, d'appeler l'action avec l'instance apache_log
comme paramètre.
apache_log.call_every_minute()
renverra True
uniquement si le fichier passé en paramètre n'a pas de nouvelles entrées dans 10 minutes.
debug_print.do
imprimera le nom du moniteur passé en paramètre.
Une fois que vous avez créé votre propre règle, vous devrez suivre ces étapes pour les exécuter :
.py
dans le répertoire rules/
de l'installation de Sentinela.config/sentinela.cfg
pour inclure le nom de votre règle (sans l'extension)Des exemples de règles peuvent être trouvés dans le répertoire sentinelle/rules de ce référentiel.
Afin de tester vos nouvelles règles avant de les déployer, vous pouvez suivre ces étapes.
Signalez vos problèmes et demandes de fonctionnalités dans le suivi des problèmes de Sentinela et je serai plus qu'heureux de les résoudre.