Instalação e Configuração do Syslog-ng com MySQL no Debian Squeeze
E ai galera, aqui eu vou abordar a instalação e a configuração do Syslog-ng trabalhando integrado com o MySQL e com o gerenciador Web para ficar melhor de monitoramos os logs, a ideia aqui é termos um local centralizado para acompanharmos os logs, com isso vamos configurar todos os clientes para enviarem os logs para este servidor.
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
O que vou utilizar:
- Nome Servidor: syslog-ng
- Ip LAN: 10.101.0.25/24
- Nome do Cliente: debian
- Ip LAN: 10.101.0.26/24
Vamos primeiro fazer um update dos repositórios e mandar fazer um upgrade do sistema.
aptitude update && aptitude dist-upgrade -y
Agora vamos mandar instalar as dependências
aptitude install mysql-server mysql-client apache2 php5 php5-mysql php5-imap syslog-ng -y aptitude install php5-gd php5-mcrypt php5-json php5-xmlrpc php5-dev php5-common libapache2-mod-php5 php-pear -y aptitude install libdbd-mysql libdbd-mysql-perl msttcorefonts php5-gd -y
Agora vamos obter o phpsyslog
cd /usr/src wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/php-syslog-ng-2.9.8a.tgz
Agora vamos descompactar ele
tar -xvf php-syslog-ng-2.9.8a.tgz
Agora vamos copiar os arquivos do gerenciador web para a raiz do apache
cp -Rfa php-syslog-ng/html /var/www/phpsyslog
Agora precisamos fazer alguns ajustes no arquivo de controle do php
vi /etc/php5/apache2/php.ini [...] magic_quotes_gpc = On [...] display_errors = On [...] session.save_path = "/tmp" [...] max_execution_time = 60
Agora vamos acertar as permissões do phpsyslog
chown -R www-data:www-data /var/www/*
Agora vamos remover um arquivo de configuração vazio que vem com o phpsyslog
rm -rf /var/www/phpsyslog/config/config.php
Agora vamos reiniciar o nosso apache
/etc/init.d/apache2 restart
Agora vamos acessar http://ip_servidor/phpsyslog
- Aqui na primeira tela precisamos ter todos os parâmetros na cor verde caso esteja tudo ok selecione Next
- Aqui na próxima tela precisamos aceitar a licença I understand that this software is released under the GNU/GPL License e selecionar Next
- Aqui na próxima tela precisamos informar:
- A senha do root do MySQL e confirmar ela.
- Em Syslog User Name vamos informar syslog
- Depois precisamos informar a senha para este usuário e confirmar ela
- Agora em Syslog Admin Name vamos informar syslog
- Depois precisamos informar a senha para este usuário e confirmar ela
- Agora vamos desmarcar Install Sample Data
- Caso não monitore algum dispositivo Cisco podemos desmarcar também Install CEMDB Data
- Agora selecione Next
- Depois de selecionar Next vamos ter um aviso sobre o banco de dados selecione OK.
- Na próxima tela podemos informar um nome de site para o phpsyslog no meu caso phpsyslog.douglasqsantos.com.br e selecione Next
- Na próxima tela informe o seu email em your e-mail e informe uma senha em admin password está vai ser a senha de acesso ao painel e selecione Next
- Caso esteja utilizando dispositivos Cisco na próxima tela selecione Install CEMDB caso contrário terminamos a instalação agora vamos fazer alguns ajustes.
Agora vamos jogar o phpsyslog para a raiz do apache
rm -rf /var/www/index.html cd /var/www mv /var/www/phpsyslog/* .Vamos remover o diretório de instalação do phpsyslog
rm -rf /var/www/install/
Agora vamos fazer alguns ajustes no syslog-ng, primeiro vamos parar ele
/etc/init.d/syslog-ng stop
Vamos fazer um backup do arquivo de configuração
cp -Rfa /etc/syslog-ng/syslog-ng.conf{,bkp}
Agora vamos ajustar o syslog-ng.conf
vim /etc/syslog-ng/syslog-ng.conf @version: 3.1 # # Syslog-ng configuration file, compatible with default Debian syslogd # installation. Originally written by anonymous (I can't find his name) # Revised, and rewrited by me (SZALAY Attila <sasa@debian.org>) # First, set some global options. options { long_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no); owner("root"); group("adm"); perm(0640); stats_freq(0); bad_hostname("^gconfd$"); }; ######################## # Sources ######################## # This is the default behavior of sysklogd package # Logs may come from unix stream, but not from another machine. # source s_src { unix-dgram("/dev/log"); internal(); file("/proc/kmsg" program_override("kernel")); udp( ip(0.0.0.0) port(514) ); tcp( ip(0.0.0.0) port(514) ); }; # If you wish to get logs from remote machine you should uncomment # this and comment the above source line. # #source s_net { tcp(ip(127.0.0.1) port(1000) authentication(required) encrypt(allow)); }; ######################## # Destinations ######################## # First some standard logfile # destination d_mysql { sql(type(mysql) host("localhost") username("syslog") password("senha") database("syslog") table("logs") columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg") values("$HOST_FROM", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG", "$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC", "$PROGRAM", "$MSG") indexes("host", "facility", "priority", "datetime", "program")); }; destination d_auth { file("/var/log/auth.log"); }; destination d_cron { file("/var/log/cron.log"); }; destination d_daemon { file("/var/log/daemon.log"); }; destination d_kern { file("/var/log/kern.log"); }; destination d_lpr { file("/var/log/lpr.log"); }; destination d_mail { file("/var/log/mail.log"); }; destination d_syslog { file("/var/log/syslog"); }; destination d_user { file("/var/log/user.log"); }; destination d_uucp { file("/var/log/uucp.log"); }; # This files are the log come from the mail subsystem. # destination d_mailinfo { file("/var/log/mail/mail.info"); }; destination d_mailwarn { file("/var/log/mail/mail.warn"); }; destination d_mailerr { file("/var/log/mail/mail.err"); }; # Logging for INN news system # destination d_newscrit { file("/var/log/news/news.crit"); }; destination d_newserr { file("/var/log/news/news.err"); }; destination d_newsnotice { file("/var/log/news/news.notice"); }; # Some `catch-all' logfiles. # destination d_debug { file("/var/log/debug"); }; destination d_error { file("/var/log/error"); }; destination d_messages { file("/var/log/messages"); }; # The root's console. # destination d_console { usertty("root"); }; # Virtual console. # destination d_console_all { file("/dev/tty10"); }; # The named pipe /dev/xconsole is for the nsole' utility. To use it, # you must invoke nsole' with the -file' option: # # $ xconsole -file /dev/xconsole [...] # destination d_xconsole { pipe("/dev/xconsole"); }; # Send the messages to an other host # #destination d_net { tcp("127.0.0.1" port(1000) authentication(on) encrypt(on) log_fifo_size(1000)); }; # Debian only destination d_ppp { file("/var/log/ppp.log"); }; ######################## # Filters ######################## # Here's come the filter options. With this rules, we can set which # message go where. filter f_dbg { level(debug); }; filter f_info { level(info); }; filter f_notice { level(notice); }; filter f_warn { level(warn); }; filter f_err { level(err); }; filter f_crit { level(crit .. emerg); }; filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); }; filter f_error { level(err .. emerg) ; }; filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news); }; filter f_auth { facility(auth, authpriv) and not filter(f_debug); }; filter f_cron { facility(cron) and not filter(f_debug); }; filter f_daemon { facility(daemon) and not filter(f_debug); }; filter f_kern { facility(kern) and not filter(f_debug); }; filter f_lpr { facility(lpr) and not filter(f_debug); }; filter f_local { facility(local0, local1, local3, local4, local5, local6, local7) and not filter(f_debug); }; filter f_mail { facility(mail) and not filter(f_debug); }; filter f_news { facility(news) and not filter(f_debug); }; filter f_syslog3 { not facility(auth, authpriv, mail) and not filter(f_debug); }; filter f_user { facility(user) and not filter(f_debug); }; filter f_uucp { facility(uucp) and not filter(f_debug); }; filter f_cnews { level(notice, err, crit) and facility(news); }; filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); }; filter f_ppp { facility(local2) and not filter(f_debug); }; filter f_console { level(warn .. emerg); }; ######################## # Log paths ######################## log { source(s_src); destination(d_mysql); }; log { source(s_src); filter(f_auth); destination(d_auth); }; log { source(s_src); filter(f_cron); destination(d_cron); }; log { source(s_src); filter(f_daemon); destination(d_daemon); }; log { source(s_src); filter(f_kern); destination(d_kern); }; log { source(s_src); filter(f_lpr); destination(d_lpr); }; log { source(s_src); filter(f_syslog3); destination(d_syslog); }; log { source(s_src); filter(f_user); destination(d_user); }; log { source(s_src); filter(f_uucp); destination(d_uucp); }; log { source(s_src); filter(f_mail); destination(d_mail); }; #log { source(s_src); filter(f_mail); filter(f_info); destination(d_mailinfo); }; #log { source(s_src); filter(f_mail); filter(f_warn); destination(d_mailwarn); }; #log { source(s_src); filter(f_mail); filter(f_err); destination(d_mailerr); }; log { source(s_src); filter(f_news); filter(f_crit); destination(d_newscrit); }; log { source(s_src); filter(f_news); filter(f_err); destination(d_newserr); }; log { source(s_src); filter(f_news); filter(f_notice); destination(d_newsnotice); }; #log { source(s_src); filter(f_cnews); destination(d_console_all); }; #log { source(s_src); filter(f_cother); destination(d_console_all); }; #log { source(s_src); filter(f_ppp); destination(d_ppp); }; log { source(s_src); filter(f_debug); destination(d_debug); }; log { source(s_src); filter(f_error); destination(d_error); }; log { source(s_src); filter(f_messages); destination(d_messages); }; log { source(s_src); filter(f_console); destination(d_console_all); destination(d_xconsole); }; log { source(s_src); filter(f_crit); destination(d_console); }; # All messages send to a remote site # #log { source(s_src); destination(d_net); };
Agora vamos fazer um ajuste no mysql
mysql -u root -p GRANT ALL PRIVILEGES ON syslog.* TO syslog@localhost IDENTIFIED BY 'senha'; FLUSH PRIVILEGES; quit;
Agora vamos reiniciar o serviço do syslog-ng
/etc/init.d/syslog-ng restart
Agora vamos configurar o virtualhost para o nosso phpsyslog
vim /etc/apache2/sites-available/phpsyslog <VirtualHost *:80> ServerName phpsyslog.douglasqsantos.com.br ServerAlias phpsyslog DocumentRoot "/var/www/" <Directory "/var/www/"> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/phpsyslog.douglasqsantos.com.br-error.log CustomLog ${APACHE_LOG_DIR}/phpsyslog.douglasqsantos.com.br-access.log common ServerSignature Off LogLevel info </VirtualHost>
Agora vamos desativar o virtualhost default do apache e vamos ativar o virtualhost do phpsyslog
a2dissite default a2ensite phpsyslog
Agora vamos obter os arquivos do phpsyslog com algumas correções
cd /usr/src wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/php-syslog-patch.tar.gz
Agora vamos descompactar os arquivos
tar -xzvf php-syslog-patch.tar.gz
Agora vamos fazer backup dos arquivos que nós vamos modificar
cp -Rfa /var/www/logout.php{,.bkp} cp -Rfa /var/www/includes/version.php{,.bkp} cp -Rfa /var/www/config/config.php{,.bkp} cp -Rfa /var/www/includes/jpgraph/jpgraph.php{,.bkp}
Agora vamos substituir os arquivos
cp -Rfa logout.php /var/www/ cp -Rfa version.php /var/www/includes/ cp -Rfa config.php /var/www/config/ cp -Rfa jpgraph.php /var/www/includes/jpgraph/
Agora vamos ajustar somente as senhas do arquivo de configuração
vim /var/www/config/config.php [...] define('DBUSER', 'syslog'); define('DBUSERPW', 'senha'); define('DBADMIN', 'syslog'); define('DBADMINPW', 'senha'); define('DBNAME', 'syslog'); define('DBHOST', 'localhost'); [...]
Agora vamos ajustar as permissões dos arquivos
chown -R www-data:www-data /var/www
Agora podemos reiniciar o nosso apache
/etc/init.d/apache2 restart
Agora já podemos acessar http://phpsyslog.douglasqsantos.com.br ou http://ip_servidor
- Usuário: admin
- Senha: senha que foi definida junto ao email do admin na instalação do phpsyslog
Configuração do Cliente
Agora vamos ajustar um cliente Debian para enviar os logs para o nosso servidor
vim /etc/rsyslog.conf [...] #Inserir no final do arquivo *.* @10.101.0.25 #caso queira enviar somente alguns tipos de logs podemos fazer da seguinte forma #*.=emerg;*.=warn;*.=err;*.=alert @10.101.0.25
Agora vamos reiniciar o rsyslog do cliente
/etc/init.d/rsyslog restart
Agora vamos consultar os logs enviados pelo cliente para o servidor
No servidor vamos visualizar os logs
tail -f /var/log/syslog Oct 26 12:10:53 syslog-ng mysqld: Begin safemalloc memory dump: Oct 26 12:10:53 syslog-ng mysqld: Oct 26 12:10:53 syslog-ng mysqld: End safemalloc memory dump. Oct 26 12:17:01 syslog-ng /USR/SBIN/CRON[5362]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Oct 26 12:20:01 syslog-ng /USR/SBIN/CRON[5419]: (root) CMD (test -x /usr/lib/atsar/atsa1 && /usr/lib/atsar/atsa1) Oct 26 12:30:01 syslog-ng /USR/SBIN/CRON[5461]: (root) CMD (test -x /usr/lib/atsar/atsa1 && /usr/lib/atsar/atsa1) Oct 26 12:31:08 syslog-ng syslog-ng[3007]: Termination requested via signal, terminating; Oct 26 12:31:08 syslog-ng syslog-ng[3007]: syslog-ng shutting down; version='3.1.3' Oct 26 12:42:54 syslog-ng syslog-ng[5705]: syslog-ng starting up; version='3.1.3' Oct 26 12:50:01 syslog-ng /USR/SBIN/CRON[5922]: (root) CMD (test -x /usr/lib/atsar/atsa1 && /usr/lib/atsar/atsa1) Oct 26 12:57:41 10.101.0.26 kernel: imklog 4.6.4, log source = /proc/kmsg started. Oct 26 12:57:41 10.101.0.26 rsyslogd: [origin software="rsyslogd" swVersion="4.6.4" x-pid="1156" x-info="http://www.rsyslog.com"] (re)start
Notem que as ultimas entradas de logs são do endereço ip 10.101.0.26 que é o nosso cliente, agora já temos a configuração do servidor e do cliente.
Agora precisamos ir ajustando de acordo com as nossas necessidades.