Sentinela es un sistema de vigilancia del sistema operativo altamente configurable que puede tomar acciones basadas en reglas preconfiguradas.
La motivación inicial era crear un demonio que monitoreara un conjunto de archivos de registro y, si no había actividad, apagara el sistema operativo. Esto fue extremadamente útil para asegurarme de que mis instancias ec2 se cerraran después de un tiempo de inactividad específico.
Dada la naturaleza modular de Sentinela, también puede ampliarlo para monitorear el tráfico de red, procesos, uso del disco, etc. y ejecutar cualquier acción como enviar un correo electrónico, enviar una alerta SNMP, etc.
Sentinela se configura usando el archivo config/sentinela.cfg
, que le permite habilitar las reglas que se van a ejecutar.
Las reglas se definen en código Python y se encuentran en el directorio rules/
. En la mayoría de los casos, las reglas utilizan dos tipos diferentes de módulos: * modules/monitors/
: una vez cada minuto lee un recurso y almacena su estado. Cuando sea necesario, devuelva True
para desencadenar una acción. * modules/actions/
: Las acciones ejecutarán un comando, enviarán un correo electrónico o cualquier otro código definido en Python que puedas imaginar.
Para iniciar sentinela necesitas ejecutar: text sudo python sentinela.py
Puede monitorear todas las acciones de sentinela leyendo el archivo /var/log/sentinela.log
. Un archivo de registro sentinela normal tiene este aspecto:
[2013-03-29 11:41:20,440][INFO] Iniciado exitosamente [2013-03-29 11:41:20,441][DEPURACIÓN] Reglas importadas.apache_shutdown [2013-03-29 12:51:50,480][DEBUG] Sentinela está viva ... [2013-03-29 12:58:34,009][DEBUG] Voy a ejecutar el comando "apagar ahora -h".
Crear sus propias reglas es fácil, digamos que queremos crear una regla que imprima el nombre del monitor en el archivo de registro de sentinela cuando el archivo de registro /var/log/apache2/access.log
esté inactivo durante 10 minutos. El código se verá así:
1: desde module.monitors.new_log_entries importar NewLogEntries 2: desde module.actions.debug_print importar DebugPrint 3: 4: apache_log = NewLogEntries('/var/log/apache2/access.log', 10) 5: debug_print = DebugPrint() 6: 7: 8: def llamar_cada_minuto(): 9: si apache_log.call_every_minuto(): 10: debug_print.do (apache_log)
Las reglas comunes tendrán un monitor y una acción, en este caso NewLogEntries
y DebugPrint
(líneas 1 y 2).
Ambos deben instanciarse a nivel de módulo (líneas 4 y 5) para poder mantener el estado. Si crea su monitor o instancias de acción dentro de call_every_minute
se creará una nueva instancia cada vez y no se mantendrá ningún estado.
Los monitores y acciones pueden tener parámetros, en esta línea 4 vemos como el monitor NewLogEntries
toma dos parámetros:
True
La función call_every_minute
(línea 8) debe definirse para que una regla sea válida. Esta función, como su nombre indica, será llamada cada minuto por sentinela. Podría definir cualquier acción que se ejecutará en este contexto, pero decidimos llamar al método call_every_minute
del monitor y, en función de su valor de retorno, llamar a la acción con la instancia apache_log
como parámetro.
apache_log.call_every_minute()
devolverá True
solo si el archivo pasado como parámetro no tiene ninguna entrada nueva en 10 minutos.
debug_print.do
imprimirá el nombre del monitor pasado como parámetro.
Una vez que haya creado su propia regla, deberá seguir estos pasos para ejecutarla:
.py
al directorio rules/
en la instalación de sentinelaconfig/sentinela.cfg
para incluir el nombre de su regla (sin la extensión)Se pueden encontrar reglas de ejemplo en el directorio sentinela/rules de este repositorio.
Para probar sus nuevas reglas antes de implementarlas, puede seguir estos pasos.
Informe sus problemas y solicitudes de funciones en el rastreador de problemas de Sentinela y estaré encantado de solucionarlos.