Introdução
No artigo anterior demonstrei como instalar um servidor de logs centralizado com syslog-ng, mas em ambientes onde temos muitos sites hospedados fica complicado configurar o envio de cada um deles para o servidor de logs, e, claro tem sempre o fator humano, podemos criar uma nova entrada para o site (vhost) e esquecer de criar a entrada para envio do log.A solução para isso é apontar todos os sites de um mesmo servidor, para o mesmo arquivo de log, mas depois, como diferenciar no arquivo de log, qual entrada pertence a qual site? O objetivo desse post é resolver esse problema.
Configuração dos Logs do Apache
Precisamos alterar o padrão de logs do apache para que além das informações padrões, ele acrescente o nome do vhost no log, para isso temos a opção “%v”.
Edite o arquivo principal no apache, e acrescente a opção desejada.
# vi /etc/httpd/conf/httpd.conf
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Em cada um dos Vhosts vamos apontar os logs para o mesmo arquivo e na opção de CustomLog vamos usar combined ao invés de common.
# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin webmaster@andredeo.blogspot.com
DocumentRoot /var/www/html/www.site01.andredeo.blogspot.com
ServerName www.site01.andredeo.blogspot.com
ErrorLog /var/log/httpd/error_log
LogLevel debug
CustomLog /var/log/httpd/access_log combined
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@andredeo.blogspot.com
DocumentRoot /var/www/html/www.site02.andredeo.blogspot.com
ServerName www.site02.andredeo.blogspot.com
ErrorLog /var/log/httpd/error_log
LogLevel debug
CustomLog /var/log/httpd/access_log combined
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@andredeo.blogspot.com
DocumentRoot /var/www/html/www.site03.andredeo.blogspot.com
ServerName www.site03.andredeo.blogspot.com
ErrorLog /var/log/httpd/error_log
LogLevel debug
CustomLog /var/log/httpd/access_log combined
</VirtualHost>
Reiniciar o apache
# systemctl restart httpd
Exemplo de log gerado
# cat /var/log/httpd/access_log
www.site01.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:16:05 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site02.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:17:05 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site03.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:17:29 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site01.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:11:17:39 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
Instalação do Syslog-ng no servidor do Apache
Vamos realizar a instalação do syslog-ng no servidor, para que ele colete os logs e encaminhe para o nosso servidor central de logs.
A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng
Iniciar e configurar para inicio automático o Syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng
Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig
Não é preciso alterar nada no arquivo original, apenas adicione ao final do arquivo a opção de encaminhamento dos logs do apache para o servidor de Syslog-ng.
# vi /etc/syslog-ng/syslog-ng.conf
source s_apache {
file("/var/log/httpd/access_log");
file("/var/log/httpd/error_log");
};
destination d_servidor_log { udp("143.106.113.6" port(514)); };
log { source(s_apache); destination(d_servidor_log); };
Reiniciar o serviço
# systemctl restart syslog-ng
Nenhum comentário:
Postar um comentário