Instalando e configurando o AWSTATS no Ubuntu Server

De gutocarvalho.net

Conteúdo

[editar] um pouco sobre o awstats

O Awstats é um analisador de LOGS avançado, ele pode analisar vários tipos de LOGS, os principais são WEB, MAIL e FTP.

Vejas os principais recursos da ferramenta: http://awstats.sourceforge.net/#FEATURES

Veja alguns demos do awstats: http://awstats.sourceforge.net/#DEMO

Aqui vamos aprender a configurar o AWSTATS para gerar estatísticas de um servidor APACHE2.

Por enquanto vou abordar a configuração de estatísticas WEB.

[editar] instalando a aplicação

vire root

sudo -s -H

agora vamos instalar o programa

apt-get install awstats

programa instalado, veja a estrutura de arquivos e diretórios

dpkg -L awstats

[editar] configurações para monitoramento de um servidor web

deu para perceber que os arquivos ficam no diretório: /etc/awstats

lá encontrarmos 2 arquivos, são eles:

awstats.conf
awstats.conf.local

vamos nos basear nas configurações do arquivo awstats.conf, primeiro vamos copiar e logo depois editá-lo

cp /etc/awstats/awstats.conf /etc/awstats/awstats.www.seudominio.com.br.conf

agora vamos editar o arquivo

vim /etc/awstats/awstats.www.seudominio.com.br.conf

essas são as variáveis mais importantes

LogFile="/var/log/apache/access.log"
LogFormat=4
DNSLookup=1
SiteDomain="hostname"

vamos fazer uma configuração rápida, ajustes as variáveis abaixo de acordo com a sua estrutura

LogFile="/var/log/apache/www.seudomonio.com.br-access.log"
LogFormat=1
DNSLookup=1
SiteDomain="www.seudominio.com.br"

O formato padrão de log vem com a configuração 4, porém com a configuração 1 temos mais informações, poderemos saber quais sistemas operacionais estao acessando o seu site, quais navegadores estão sendo utilizados e muito mais.

Vale lembrar que o arquivo de configuração do awstats é extensamente comentado e muito fácil de entender, basta ter paciência e qualquer problema pode-se recorrer ao google ;)

Cuidado com a variável DNSLookup, se ela estiver com o valor 1, o awstats vai solicitar uma busca recursiva de DNS com cada domínio mencionado no arquivo de log, se você tem um grande volume de acessos, terá um extenso arquivo de log, caso queira velocidade na geração das estatísticas pode ser interessante desligar esse recurso, principalmente se o seu link estiver saturado.

Existe uma variável chamada HostAliases que pode ser utilizada para CNAMES e redirects do Apache2, pro exemplo, se www.meudominio.com.br, portal.meudomonio.com.br, meudominio.com.br e 200.x.x.x apontam para o meus rootdir, você pode usá-la para não perder nenhum tipo de estatística, aliás, além dos CNAMES, Redirects, isso só vai funcionar se o arquivo de logs para todos for o mesmo, claro ;)

HostAliases=”www.domain.tld localhost 127.0.0.1″

Se você tem mais de um domínio, crie um outro arquivo e ajuste de acordo com o nome do seu outro domínio, crie e monitore quantos domínios forem necessários.

[editar] gerando as estatísticas do servidor web

para rodar programa e extrair as estatísticas use o comando abaixo

/usr/lib/cgi-bin/awstats.pl -config=www.meudominio.org.br -update

saída do comando

Create/Update database for config "/etc/awstats/awstats.www.meudominio.org.br.conf" by AWStats version 6.6 (build 1.887)
From data in log file "/var/log/nginx/www.meudomonio.org.br-access.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 14554)
Jumped lines in file: 14554
 Found 14554 already parsed records.
Parsed lines in file: 18
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 18 new qualified records.

caso não queria ver esta saída descarte a saída

/usr/lib/cgi-bin/awstats.pl -config=www.meudominio.com.br -update > /dev/null

[editar] acessando suas estatísticas

As estatísticas ficam disponíveis via web, tudo é gerado através de CGI PERL.

[editar] estatísticas de servidor web

vá em seu navegador preferido (firefox ?) e digite o endereço abaixo:

http://hostname/cgi-bin/awstats.pl?config=domain

troque hostname pelo ip ou host do seu servidor e domain pelo seu domínio, veja o exemplo:

http://www.gutocarvalho.net/cgi-bin/awstats.pl?config=www.gutocarvalho.net

[editar] agendando as estastísticas

é possível agendar as estatísticas usando o sistema cron, entre no agendamento cron do seu usuário

crontab -e

[editar] agendando estatísticas web

adicione as seguintes linhas

# gerando estatísticas com o awstats
*/10 * * * * /usr/lib/cgi-bin/awstats.pl -config=www.meudominio.com.br -update >/dev/null
*/10 * * * * /usr/lib/cgi-bin/awstats.pl -config=www.outrodominio.com.br -update >/dev/null
*/10 * * * * /usr/lib/cgi-bin/awstats.pl -config=www.terceirodomonio.com.br -update >/dev/null

aqui estou supondo que você tem 3 arquivos no /etc/awstats e que todos foram configurados corretamente, vale lembrar que o parâmetro que passamos para o scritp perl do awstats é o mesmo conteúdo da variável SiteDomain do arquivo de configuração criado.

[editar] dicas importantes

Algumas dicas que fazem a diferença

[editar] evitando perda de dados estatísticos do apache2 com o logrotate

Como os logs do Apache2 são manipulados pelo logrotate, é possível que possamos perder dados caso um rotate aconteça antes de um update do awstats, para evitar isto vamos fazer uma configuração no include do apache para o logrotate.

vamos ver o conteúdo do include do apache, use o cat ;)

cat /etc/logrotate.d/apache2

saída

/var/log/apache2/*.log {
       weekly
       missingok
       rotate 52
       compress
       sharedscripts
       prerotate
       endscript
       delaycompress
       notifempty
       create 640 root adm
       sharedscripts
       postrotate
               if [ -f /var/run/apache2.pid ]; then
                       /etc/init.d/apache2 restart > /dev/null
               fi
       endscript
}

veja as opçoes pre-rotate e post-rotate, ali está o pulo do gato ;)

vamos fazer algumas mudanças para executarmos o awstats antes do rotate.

   /var/log/apache2/*.log {
       weekly
       missingok
       rotate 52
       compress
       sharedscripts
       prerotate
               /usr/lib/cgi-bin/awstats.pl -config=www.meudominio.com.br -update >/dev/null
               /usr/lib/cgi-bin/awstats.pl -config=www.outrodominio.com.br -update >/dev/null
               /usr/lib/cgi-bin/awstats.pl -config=www.terceirodomonio.com.br -update >/dev/null
       endscript
       delaycompress
       notifempty
       create 640 root adm
       sharedscripts
       postrotate
               if [ -f /var/run/apache2.pid ]; then
                       /etc/init.d/apache2 restart > /dev/null
               fi
       endscript
}

[editar] e se eu uso o NGIX como proxy-http, como faço para gerar os logs corretamente?

Bom aqui usamos o NGINX (http://nginx.net/) como proxy HTTP, aliás ele é uma ferramenta excelente, através dele podemos rodar aplicações web em diversas portas 81,8000,8001 pois ele redireciona as conexões que entram na porta 80 de forma transparente para os outros aplicativos web, vale a pena conhecer.

O problema do NGINX é que nos logs do APACHE2 fica constando acesso partindo de apenas 1 endereço IP/HOST, que é o NGINX. Para resolver este problema, temos que habilitar o log no NGIX, vou mostar um sample do NGIX.conf

cat /usr/local/ngix/conf/nginx.conf

veja uma parte do arquivo de configuração

server {
        listen       80;
        server_name  www.meudominio.com.br;
        client_max_body_size 1000M; 

       location = / {
             rewrite  ^(.*)$  /dotlrn/clubs/meudominio/one-community permanent;
       }
       location  / {
            proxy_pass http://200.000.000.000:8000;
            include /usr/local/nginx/conf/proxy-openacs.conf;
       }

   }

habilitando os logs

server {
        listen       80;
        server_name  www.meudominio.com.br;
        access_log /var/log/nginx/www.meudomonio.com.br-access.log;
        client_max_body_size 1000M; 

       location = / {
             rewrite  ^(.*)$  /dotlrn/clubs/meudominio/one-community permanent;
       }
       location  / {
            proxy_pass http://200.000.00.000:8000;
            include /usr/local/nginx/conf/proxy-openacs.conf;
       }

   }

bom não se esqueça de criar o diretório /var/log/nginx e logo após reinicie a aplicação.

depois disto bastará configurar o awstats para ler o logo do diretório do NGIX, assim você terá todas as informações necessárias.

[editar] colocando logs do ngix no rotate do servidor

Caso você use o NGINX ao invés do apache, precisará configurar o rotate para o log dele, o mesmo macete para o apache, porém apontando para o log do nginx.

primeiro vamos criar o arquivo

vim /etc/logrotate.d/nginx

coloque o seguinte conteúdo no arquivo

/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        sharedscripts
        prerotate
                /usr/lib/cgi-bin/awstats.pl -config=www.meudominio.com.br -update >/dev/null
                /usr/lib/cgi-bin/awstats.pl -config=www.outrodominio.com.br -update >/dev/null
                /usr/lib/cgi-bin/awstats.pl -config=www.terceirodomonio.com.br -update >/dev/null
                /usr/lib/cgi-bin/awstats.pl -config=www.pendurado.com.br -update >/dev/null
        endscript
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

verifique certinho o local onde esta o arquivo de pid do nginx, dependendo da forma como voce compilou ele pode estar em locais diferentes, observe também o arquivo /etc/init.d/nginx

pronto seus logs serão tratados e não haverá perda de dados.

[editar] referências

ubuntu + awstats

ngix + awstats

Ferramentas pessoais