Sentinela é um watchdog de sistema operacional altamente configurável que pode realizar ações com base em regras pré-configuradas.
A motivação inicial foi criar um daemon que monitorasse um conjunto de arquivos de log e, se nenhuma atividade estivesse presente, desligasse o sistema operacional. Isso foi extremamente útil para garantir que minhas instâncias ec2 fossem encerradas após um tempo ocioso especificado.
Dada a natureza modular do Sentinela, você também pode estendê-lo para monitorar o tráfego de rede, processos, uso de disco, etc. e executar quaisquer ações como enviar um e-mail, enviar um alerta SNMP, etc.
Sentinela configurado através do arquivo config/sentinela.cfg
, que permite habilitar regras que serão executadas.
As regras são definidas em código python e são encontradas no diretório rules/
. Na maioria dos casos, as regras usam dois tipos diferentes de módulos: * modules/monitors/
: uma vez a cada minuto, lê um recurso e armazena seu status. Quando necessário, retorne True
para acionar uma ação. * modules/actions/
: As ações executarão um comando, enviarão um email ou qualquer outro código definido em python que você possa imaginar.
Para iniciar o sentinela você precisa executar: text sudo python sentinela.py
Você pode monitorar todas as ações do sentinela lendo o arquivo /var/log/sentinela.log
. Um arquivo de log normal do sentinela se parece com isto:
[2013-03-29 11:41:20,440][INFO] Iniciado com sucesso [29/03/2013 11:41:20,441][DEBUG] Regras.apache_shutdown importadas [2013-03-29 12:51:50,480][DEBUG] Sentinela está viva ... [2013-03-29 12:58:34,009][DEBUG] Vou executar o comando "shutdown now -h".
Criar suas próprias regras é fácil, digamos que queremos criar uma regra que imprima o nome do monitor no arquivo de log do sentinela quando o arquivo de log /var/log/apache2/access.log
estiver inativo por 10 minutos. O código ficará assim:
1: de module.monitors.new_log_entries importar NewLogEntries 2: de 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 call_every_minuto(): 9: se apache_log.call_every_ Minute(): 10: debug_print.do(apache_log)
As regras comuns terão um monitor e uma ação, neste caso são NewLogEntries
e DebugPrint
(linhas 1 e 2).
Ambos precisam ser instanciados no nível do módulo (linhas 4 e 5) para poder manter o estado. Se você criar suas instâncias de monitor ou ação dentro de call_every_minute
uma nova instância será criada a cada vez e nenhum estado será mantido.
Monitores e ações podem ter parâmetros, nesta linha 4 vemos como o monitor NewLogEntries
recebe dois parâmetros:
True
A função call_every_minute
(linha 8) precisa ser definida para que uma regra seja válida. Esta função, como o nome indica, será chamada a cada minuto pela sentinela. Você poderia definir quaisquer ações a serem executadas neste contexto, mas decidimos chamar o método call_every_minute
do monitor e com base em seu valor de retorno chamar a ação com a instância apache_log
como parâmetro.
apache_log.call_every_minute()
retornará True
somente se o arquivo passado como parâmetro não tiver nenhuma nova entrada em 10 minutos.
debug_print.do
imprimirá o nome do monitor passado como parâmetro.
Depois de criar sua própria regra, você terá que seguir estas etapas para executá-las:
.py
para o diretório rules/
na instalação do sentinelaconfig/sentinela.cfg
para incluir o nome da sua regra (sem a extensão)Regras de exemplo podem ser encontradas no diretório sentinela/rules neste repositório.
Para testar suas novas regras antes de implantá-las, você pode seguir estas etapas.
Relate seus problemas e solicitações de recursos no rastreador de problemas do Sentinela e ficarei feliz em corrigi-los.