Syslog-ng enviar e-mail Realtime

Publicado por Anderson Ribeiro em 22/08/2011

[ Hits: 9.446 ]

 


Syslog-ng enviar e-mail Realtime



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.

Outras dicas deste autor

Recuperar senha do root do MySQL

Leitura recomendada

Como baixar e instalar o Yakuake

Pérolas do desconhecido, comandos não tão conhecidos que podem ser úteis

Sobre variáveis globais, locais e estáticas em PHP

Instalação do Anjuta no Debain 4.0 e Ubuntu 7.04

Como reiniciar uma máquina GNU/Linux totalmente travada com REISUB

  

Comentários
[1] Comentário enviado por removido em 22/08/2011 - 17:11h

Boa dica !



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts