O Piwik (pronuncia-se píuiqui) é um software livre, mantido no github, destinado à web analytics. Pode substituir o google analytics e softwares de leitura de logs de servidores web, como o AWStats. É construído em PHP e MySQL e pode ser facilmente integrado à vários softwares, como o wordpress, mediawiki, joomla e drupal. Aqui estarei abordando um pouco da utilização da ferramenta, mas, caso precise, além do software a empresa oferece serviços de hospedagem e consultoria.
Contents
Instalação
A instalação é rápida. No meu ambiente, com Debian 7.8, Apache 2.2.22 e MySQL 5.5.41, realizei os seguintes procedimentos:
Baixar a última versão estável, descompactar e mover para a raiz do servidor web
$ mkdir /tmp/piwik $ cd /tmp/piwik $ wget -c http://builds.piwik.org/piwik.zip $ unzip piwik.zip
mv piwik/ /var/www/
chown -R www-data: piwik/
Criar a base de dados (podes usar mysql -u root -p para abrir um console do MySQL). Substitua piwiki e suaSenhaAqui pelo nome de usuário e senha que quiseres
CREATE USER ‘piwik’@‘localhost’ IDENTIFIED BY ‘suaSenhaAqui’; GRANT USAGE ON . TO ‘piwik’@‘localhost’ IDENTIFIED BY ‘suaSenhaAqui’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; CREATE DATABASE IF NOT EXISTS
piwik
; GRANT ALL PRIVILEGES ONpiwik
.* TO ‘piwik’@‘localhost’;Acessar a interface do piwik (http://site.com.br/piwik) e seguir os passos. Após terminá-los pode ser necessário alterar o idioma de Português para Português brasileiro, através do menu com o nome do usuário -> Configurações -> Configurações do utilizador.
Habilite a geolocalização
# apt-get install php5-geoip php5-dev libgeoip-dev
service apache2 restart
Agora acesse Usuário -> Geolocalização e habilite o item GeoIP (PECL). Para mais informações sobre a geolocalização no piwik acesse este link.
- Cadastre os sites que deseja monitorar. Vá em Usuário -> Websites -> Adicionar novo site.
No site do projeto há mais informações sobre a instalação, inclusive como ajustar o software para sites com médio/alto tráfego.
Monitorando aplicativos e páginas
Cada um dos mais de 65 aplicativos que tem um plugin para o piwik terá um processo de instalação e configuração, mas geralmente as informações que vais precisar são a url onde ele está acessível (ex.: site.com.br/piwik) e o token auth, que é um hash MD5, composto por 32 caracteres, que está disponível na página API, acessível através do menu com o nome do usuário.
Também é possível inserir manualmente, nas páginas que desejas monitorar, o código javascript e/ou uma imagem que obterá as informações do acesso. Para ver estas informações vá em Usuário -> Configurações -> Código de rastreamento.
Por fim, o piwik oferece uma API HTTP que pode ser utilizada com a sua linguagem de programação favorita, inclusive já conta com clientes para PHP, Java, Python, C#, Android, iOS e Titanium.
Leitura de logs
Atualmente o piwik “sabe” ler os logs do apache (em três versões diferentes), amazon cloudfront, icecast2, iis, ncsa, nginx, s3 e w3c_extend porém, caso nenhum destes formatos lhe atenda, é possível definir uma expressão regular.
Na documentação do projeto são citadas algumas situações onde a análise de logs pode ser utilizada:
- Se você manipula um aplicativo web ou desktop e não pode adicionar código javascript diretamente nele
- Caso queira acompanhar e verificar a atividade de determinado servidor ou grupo de servidores ou até fornecer relatórios para seus clientes (no caso de provedores de hospedagem, por exemplo)
- Se você quiser comparar os dados dos logs com os obtidos via javascript
- Se você tem logs antigos e deseja importá-los para o piwik
No futuro, o piwik possibilitará que a análise de logs e o rastreamento via javascript sejam utilizados conjuntamente, para o mesmo site. Atualmente, se você quiser utilizar as duas técnicas simultaneamente, é necessário ter o site cadastrado duas vezes no piwik e, durante a importação de logs, especificar o parâmetro idsite.
Analisando logs do Apache
No diretório misc/log-analytics/ há o script, feito em python 2.6, chamado _importlogs.py, capaz de ler diversos tipos de logs e armazenar as informações no banco de dados do piwik. A análise de logs do apache contém um número menor de informações do que as obtidas pelo método em javascript.
Um exemplo de uso desta ferramenta:
# python piwik/misc/log-analytics/import_logs.py --url=site.com.br/piwik --show-progress --enable-static --enable-bots --enable-http-errors --idsite=1 /var/log/apache2/access.log*
Onde:
- –url onde o piwik está disponível
- –show-progress durante a importação, exibe o número de linhas analisadas e gravadas, a média e o valor atual de gravações por segundo
- –enable-static registra arquivos estáticos (js, css, imagens, etc)
- –enable-bots registra acessos de bots
- –enable-http-errors registra os erros HTTP da série 400 e 500
- –idsite o id do site, registrado no piwik, referente aos registros nos logs. É necessário especificar pois o apache, por padrão, não armazena nos logs o domínio que está sendo acessado. Para encontrar o id do site, acesse Usuário -> Configurações -> Websites
- /var/log/apache2/access.log* o caminho completo para os arquivos de log que serão analisados. Neste caso o * faz com que todos os arquivos cujo nome comece com access.log sejam analisados, mesmo se estiverem compactados pelo logrotate.
O comando acima produzirá uma saída parecida com esta:
0 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) Parsing log /var/log/apache2/access.log… 802 lines parsed, 0 lines recorded, 0 records/sec (avg), 0 records/sec (current) 1002 lines parsed, 200 lines recorded, 99 records/sec (avg), 200 records/sec (current) […] 256390 lines parsed, 254736 lines recorded, 78 records/sec (avg), 0 records/sec (current) 256390 lines parsed, 254936 lines recorded, 78 records/sec (avg), 200 records/sec (current)Logs import summary
255152 requests imported successfully 687 requests were downloads 1238 requests ignored: 0 HTTP errors 8 HTTP redirects 1230 invalid log lines 0 requests did not match any known site 0 requests did not match any --hostname 0 requests done by bots, search engines... 0 requests to static resources (css, js, images, ico, ttf...) 0 requests to file downloads did not match any --download-extensions
Website import summary
255152 requests imported to 1 sites 1 sites already existed 0 sites were created: 0 distinct hostnames did not match any existing site:
Performance summary
Total time: 3244 seconds Requests imported per second: 78.64 requests per second</pre> Não é um processo rápido. Neste caso, rodando em uma VPS simples, foram gastos cerca de 55 minutos para processar 255.152 registros, com uma média de 78.64 registros por segundo. Para deixar o processo mais rápido pode-se usar os parâmetros _recorders_ e _recorder-max-payload-size_, que definem, respectivamente, o número de threads e a quantidade de páginas visitadas (ou entradas no log) que serão enviadas, por vez, para gravação. O valor recomendado para o parâmetro _recorders_ é o número de núcleos da máquina, mas podes usar um outro número, dependendo dos recursos do host. Após realizar a importação inicial dos logs, você pode querer processar todos os relatórios. Para isso execute o comando _console_, de uma maneira parecida com esta: <pre class="wrap:true lang:default highlight:0 decode:true ">root@host:/var/www/piwik# ./console core:archive --force-all-websites --force-all-periods=315576000 --force-date-last-n=1000 --url=http://site.com.br/piwik</pre> Para mais informações sobre a ferramenta de importação de logs, [visite esta página][1]. ### <span id="Alterando_o_formato_dos_logs_e_agendando_a_importacao_no_cron">Alterando o formato dos logs e agendando a importação no cron</span> Para que o piwik possa detectar, nos logs, qual o site sendo acessado, é necessário configurar a diretiva LogFormat no apache, como segue: <pre class="lang:apache decode:true">LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" apelidoDoFormatoDeLog</pre> Porém no debian e ubuntu o arquivo _/etc/apache2/apache2.conf_ vem com uma configuração semelhante que é apelidada de _vhost_combined_, de modo que somente precisamos alterar a opção _CustomLog_ no arquivo _/etc/apache2/sites-enabled/000-default_ (ou no virtual host que quiseres) para algo do tipo: <pre class="lang:apache decode:true ">CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined</pre> Note que esse processo não irá alterar os logs já feitos, somente os novos. Reinicie o apache para aplicar a configuração. Para agendar o processamento dos logs para uma vez por dia, realize os seguintes procedimentos: * altere o arquivo _/etc/logrotate.d/apache2_, substituindo _weekly_ por _daily (_você pode querer adicionar a opção _dateext_ para que o logrotate adicone a data da rotação ao nome do arquivo, no formato YYYYMMDD) * no _/etc/crontab_, adicione uma entrada para rodar o script de importação todos os dias pela manhã. Repare, no próprio crontab, o horário no qual é executado o _/etc/cron.daily_, de modo que a execução do _import_logs.py_ ocorra depois desse horário (no debian 7.8 o horário é 6:25) <pre class="wrap:true lang:sh decode:true">00 07 * * * root /usr/bin/python /var/www/piwik/misc/log-analytics/import_logs.py --url=site.com.br/piwik --add-sites-new-hosts --enable-static --enable-bots --enable-http-errors --idsite=1 /var/log/apache2/access.log.1.gz</pre> * Ou utilize esta sintaxe caso seus logs estejam sendo gerados com a opção _dateext_ no logrotate: <pre class="wrap:true lang:default decode:true">00 07 * * * root /usr/bin/python /var/www/piwik/misc/log-analytics/import_logs.py --url=site.com.br/piwik --add-sites-new-hosts --enable-static --enable-bots --enable-http-errors --idsite=1 $(date --date=yesterday +/var/log/apache2/access.log-\%Y\%m\%d).gz</pre> * Agende também a execução do comando de arquivamento <pre class="lang:default highlight:0 decode:true">00 8 * * * root /usr/bin/php /var/www/piwik/console core:archive --url=http://site.com.br/piwik/</pre> </li> </ul> Para mais informações sobre configurações de logs e sobre o _import_logs.py_, visite a <a href="https://github.com/piwik/piwik/tree/master/misc/log-analytics" target="_blank">página do projeto no github</a>.