Tutorial de minha autoria para instalação e configuração do MON #in #linux #debian
MON -> Ferramenta para monitorar a disponibilidade de serviços
O programa mon é utilizado para monitorar (remotamente ou localmente) serviços e disparar ações conforme os eventos.
Mon possui vários scripts monitores e alerts.
Os scripts podem ser complexos a ponto de executarem queries pré-definidas em bancos de dados remotos ou também enviar emails de alerta ao sysadmin.
Os scripts têm seus diretórios pré-definidos:
/usr/lib/mon/mon.d -> armazena os scripts monitores (.monitor), que executam a checagem de algum serviço /usr/lib/mon/alert.d -> armazena os scripts alert (.alert), responsáveis por executar alguma ação quando identificado o problema (subir um daemon, reiniciar um serviço, etc).
Configurando o MON
Instalando
aptitude install mon /etc/init.d/mon stop
Configurando o arquivo /etc/mon/mon.cf
serverbind = localhost trapbind = localhost cfbasedir = /etc/mon alertdir= /usr/lib/mon/alert.d mondir = /usr/lib/mon/mon.d maxprocs = 20 histlength = 100 randstart = 60s
hostgroup localnode localhost
watch localhost
service http
description Monitoramento do apache
interval 1m
monitor http.monitor -p 80 -t 10 -o localhost
period wd {Mon-Sun}
alert apache2.alert
alert file.alert -d /var/log/mon http.alert.log
Explicando o mon.cf
O arquivo /etc/mon/mon.cf é onde se define que servidores fazem bind, por quais portas e que rotinas de monitoramento são executadas, em que intervalo de tempo e o que acontece em caso de problemas.
hostgroup
Define um nome de grupo de hosts a serem monitorados. localhost => nome do grupo monitorado localhost => nome do servidor pertencente ao grupo localhost, definido dentro do hostgroup (cláusula de definição)
watch
Define quais serviços serão monitorados. O nome definido no parâmetro service dentro do watch deve ser o nome do script monitor, sem a extensão .monitor e deve constar no mondir, definido acima. Ou seja, em /usr/lib/mon/mon.d deve existir um script chamado http.monitor (neste exemplo).
service
Este parâmetro é exatamente o nome do script existente sob /usr/lib/mon/mon.d, sem a extensão .monitor
description
Permite fornecer uma descrição para a checagem sendo realizada. Para controle pessoal do usuário.
interval
Intervalo de tempo entre as checagens. 1m = 1 minuto. 1h = 1 hora, e assim por diante.
period
Período em que a checagem deve ser executada. É possível especificar horários ou períodos diferenciados. A sintaxe correta de como o período desejado
pode ser especificado pode ser consultada na página de manual do módulo Perl Time::Period, acessível através do comando man Time::Period
O timeperiod não pode ser setado para dias iguais. Por exemplo: wd {Mon-Mon}
alert
Esta cláusula permite especificar alertas a serem gerados quando o script monitor retornar um valor diferente de zero (quando retornar um erro). O script definido nesta cláusula deve estar no alertdir setado acima. Neste caso, em /usr/lib/mon/alert.d/ A cláusula file.alert é um script que gera um arquivo de log no endereço setado e com o nome de arquivo definido. Neste caso: /var/log/mon/http.alert.log
Permissões
Para usar o mon como monitoramento de serviços como apache, é necessário habilitar o usuário mon, criado na instalação, como pertencente ao grupo root.
Para fazer isto, edite o arquivo /etc/group:
vim /etc/group Acrescente à linha que contiver este conteúdo root:x:0:, o usuário mon. Ficará assim: root:x:0:mon
Ou execute o comando: usermod -o -G root mon
Permissões – /etc/passwd
Caso editando o /etc/group não resolva e continuem ocorrendo erros de permissão ao executar os alerts, edite o arquivo /etc/passwd:
mon:x:0:0::/var/lib/mon:/bin/false
Reiniciando o mon
Após configurar o aplicativo, reinicie o programa:
/etc/init.d/mon restart
Para testar se o mon está funcionando corretamente, pode-se usar o comando abaixo:
monshow --detail localhost,http
localhost é o nome do servidor e http é o nome do serviço, podendo ser qualquer outro configurado no mon.
Exemplo de erro
server: localhost
time: Wed Sep 22 17:04:09 2010
state: scheduler running
Error: localhost/http not a valid service
Exemplo de sucesso
server: localhost
time: Wed Sep 22 17:07:49 2010
state: scheduler running
Detail for group localhost service http
description
-----------
Monitoramento do apache
summary
-------
hosts
-----
localhost
-----DETAIL-----
-----DETAIL-----
opstatus: untested (7)
exitval: undef
depend:
monitor:
last check: 14874 days, 20:07 ago
next_check: in 17s
Modelo de alert para reiniciar o apache
Nome do arquivo: apache2.alert
#!/bin/bash
PID="/var/log/mon/apache.alert.pid"
# Validando se o processo jah estah em execucao
if [ -f "$PID" ] ; then
echo "Processo ja estah em execucao com PID [`cat $PID`]"
exit 0
fi
# Iniciando execucao do script
while [ ! -z "`/bin/pidof httpd`" ] ; do
echo "$$" > $PID
/etc/init.d/apache2 stop
sleep 2
done
# Iniciando o apache
/etc/init.d/apache2 start
rm -f "$PID"
//