Olá pessoal,
Nesta Dica irei apresentar uma solução que criei para atender minha necessidade que era de enviar log dos equipamentos de rede para um e-mail do grupo de monitoração. Existe soluções como Cacti que faz este serviço, porém, queria uma ferramenta independente.
Sislog-ng
Todos as configurações realizadas foram feitas utilizando o sistema Debian 6.
Primeiramente temos que instalar o Syslog-NG:
# apt-get install syslog-ng
Após concluir a instalação, temos que configurar o servidor de Logs para receber os logs dos clients:
Editar o arquivo
syslog-ng.conf:
# vim /etc/syslog-ng/syslog-ng.conf
Verificar as linhas abaixo deixando da seguinte forma:
options { long_hostnames(off); flush_lines(0); use_dns(yes); use_fqdn(no);
owner("root"); group("adm"); perm(0640); stats_freq(0);
bad_hostname("^gconfd$");dns_cache(yes);
};
Adicionar após a ultima linha das configurações de "destination" e antes das configurações de Filters:
destination d_local { file("/var/log/problemas"); };
Adicionar na ultima linha das configurações de "log":
log { source(s_src); filter(f_local); destination(d_local); };
Adicionar no final do arquivo as linhas abaixo para a utilização do PHP-SYSLOG-NG:
destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log { source(s_src); destination(d_mysql); };
Salvar e sair do arquivo.
Reiniciar serviço do Syslog:
# /etc/init.d/syslog-ng restart
Pronto!
Ambiente Web
Para visualizar de uma forma mais amigável os logs utilizei o software PHP-SYSLOG-NG que atendeu muito bem minhas necessidades.
1 - Instale um servidor de Webserver, no caso utilizei o Apache 2:
# apt-get install apache2
2 - Instale um servidor de Banco de Dados, no caso utilizei o Mysql:
# apt-get install mysql-server
3 - Instale o PHP-SYSLOG-NG:
Pacote:
php-syslog-ng-2.9.1r10.tar.gz.
Site para download:
http://sourceforge.net/projects/php-syslog-ng/files/php-syslog-ng
Após realizar o download do arquivo descompacte:
# tar xvzf php-syslog-ng-2.9.1r10.tar.gz
Será criado um diretório chamado html.
Copie todos os arquivos deste diretório para o diretório do Apache:
# cp -rf html/* /var/www/
Altere as permissões dos arquivos para serem executados pelo Apache:
# cd /var/www
# chown www-data:www-data * -R
Criar a base de dados do syslog:
# mysql -u root -p
mysql> create database syslog;
Será necessário criar um usuário para acesso a base do syslog:
mysql> GRANT ALL PRIVILEGES ON tlog.* TO 'admin'@'localhost' IDENTIFIED BY 'xyz';
Obs.: admin = usuário / xyz = senha
mysql> exit
Copiar arquivos para a base de dados na nova base criada:
# mysql -u root -p syslog < /var/www/syslog/install/sql/dbsetup.sql
Reinicie o Mysql:
# /etc/init.d/mysql restart
Edite o arquivo
config.php para adicionar o usuário e senha criados na base de dados:
# vim /var/www/syslog/config
Edite os campos abaixo:
define('DBUSER', 'admin');
define('DBUSERPW', 'xyz');
Acesse o site:
http://IP_DO_SERVIDOR/install/
Preencha os dados conforme solicitado e está feito.
Problemas?
Caso tente acessar o site:
http://IP_DO_SERVIDOR/ e receba a mensagem:
A database connection problem was encountered. Please check/ config.php to make sure everything is correct and make sure the MySQL server is ip and running.
Verifique se comunicação com a base de dados se está ok, o usuário criado bate com o arquivo de configuração /var/www/syslog/config.
Email do Syslog - config
Infelizmente o PHP-SYSLOG-NG não faz envio de e-mail dos logs criados. Sendo assim fiz um script que realiza este envio conforme irei apresentar abaixo:
Porém, antes será necessários instalar o programa
sendemail para realizar os envios dos e-mails:
# apt-get install sendemail
Criei 3 arquivos: config / config.filter / system-syslog, apresento-os abaixo:
#### config ####
######################################################
#!/bin/bash
# Desenvolvido por Anderson Ribeiro Barbosa
# 10/06/2011
######################################################
## FILTER ##
# Variaveis utilzadas:
FILTER=`cat config.filter | awk {'print$3'}`
SIZE_LOG=`ls -la /var/log/problemas | awk {'print$5'}`
LOG_FILTER=`cat /var/log/problemas | grep "$FILTER" >> /tmp/host.filter`
SIZE_LOG_FILTER=`ls -la /tmp/host.filter | awk {'print$5'}`
# Condicao, se o arquivo "problemas" tive um tamanho maior que 5k e o arquivo
# host.filter também tiver um tamanho maior que 5k faça.
if [ $SIZE_LOG -gt 5 -a $SIZE_LOG_FILTER -gt 5 ];
then
# Incrementa o arquivo log-geral-redes para ter um geral.
cat /var/log/problemas >> /var/log/log-geral-redes
# Cria o arquivo problemas-filter-filtro_desejado para ser enviado por e-mail.
cat /var/log/problemas | grep "$FILTER" | head -n 1 > /tmp/problemas-filter-"$FILTER"
echo ""$FILTER""
# Variaveis utilizadas para o envido do e-mail:
## FOR E-MAIL ##
HOUR=`cat /tmp/problemas-filter-"$FILTER" | awk {'print$8'} | head -n 1`
HOST=`cat /tmp/problemas-filter-"$FILTER" | awk {'print$4'} | head -n 1`
MESSAGE=`cat /tmp/problemas-filter-"$FILTER" | awk {'print$11,$12,$13,$14,$15,$16,$17'} | head -n 1`
# Realizando o envio do e-mail:
sendemail -f email_do_remetente -t email_do_destinatario -u Log Host: "$HOST" -m "Horario:"$HOUR"\n\nHost:"$HOST"\n\nMensagem:"$MESSAGE"" -s IP_DO_SERVIDOR_DE_EMAIL
echo ""
echo ""
echo "Email Enviado"
echo "=)"
# Apagando arquivos temporarios e zerando arquivo problemas:
rm /tmp/problemas-filter-"$FILTER"
rm /tmp/host.filter
echo "" > /var/log/problemas
else
echo "Nao HA PROBLEMAS"
exit 0
fi
########################################################
# Limpando variveis:
unset SIZE_LOG
unset SIZE_LOG_FILTER
unset LOG_FILTER
exit 0
# FIM
###################################################################
Email do Syslog - config.filter:
#####config.filter######
FILTRO = HSRP
FILTRO = BGP
FILTRO = ISIS
FILTRO = LDP
FILTRO = ENVM-6-PSLEV
FILTRO = Power
FILTRO = administratively
FILTRO = changed
FILTRO = TRAKING-5-STATE
FILTRO = Down
###################
Como havia informando anteriormente, estarei neste caso monitorando serviços de equipamentos de rede, mas nada impede de monitorar demais logs que venham surgir no syslog.
Email do Syslog - system-syslog:
#!/bin/bash
####system-syslog####
watch -n 1 "sh config"
################
Simples neste caso, utilizei o watch pois realizei testes com laços do tipo WHILE ou WHEN, porém, o consumo de CPU do servidor foi a 100% e com o watch não passa dos 2% e é tão funcional quanto.