Syslog-ng enviar e-mail Realtime

Publicado por Anderson Ribeiro em 22/08/2011

[ Hits: 9.604 ]

 


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

Squid 3.4 no Slackware

Criando um firewall no Linux

Canal grátis de reportagens sobre informática

Mozilla Aurora - Instalação no Ubuntu com apenas três comandos

O básico para ser feliz no Fedora 14

  

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