Bem-vindos de volta! Hoje veremos o resultado final do projeto, como funciona o processo de carga, e um link para baixá-lo. Mas antes, uma palavra de nosso patrocinador!
Open Source Solution
O conceito do SL é simples: eu faço para meu uso, e deixo quem quiser estudá-lo e usá-lo como bem entender.
Hoje já existe um conceito análogo para dados: Open Data, que diz que certos dados deveriam estar livres de restrição para uso e republicação. Um exemplo interessante do que seria Open Data são os dados do sistema de saúde do Brasil, o Data SUS. Eles são estatísticas sobre vários aspectos da saúde no país, como óbitos e nascimentos, casos de dengue etc. Qualquer um com um navegador pode acessar e recuperar uma cópia desses dados.
Mas depende de algum conhecimento extra para explorá-los. Mexer no Excel (ou no Calc) é o bastante para começar, mas vai até um certo ponto.
No Conisli de 2009 eu propus outro tipo de recurso livre: a solução de BI livre. Ela seria alimentada com dados livres e seria montada com software livre. Me faltava tempo e um certo propósito para começar um.
Apache BI
Até que o Edu me deu um motivo. Os dados que ele quer analisar são deles, mas são dados gerados por qualquer Apache! O Apache BI é, então, o primeiro projeto de BI livre que eu conheço (já que alguém pode ter feito a mesma coisa e eu não estou sabendo! Com tantos bilhões de páginas, alguém precisa ser humilde de vez em quando ;-) .)
No primeiro post eu mostrei o começo do trabalho, e consegui completá-lo (até onde eu havia me proposto) semana passada. No final do post há um link para o pacote, e abaixo estão as novidades!
Resultados
Para dar um gostinho do que ficou pronto, vejam essa figura:
Essa figura mostra todos os acessos feitos de madrugada até o meio-dia, comparado entre março e abril. Se queremos ver só o diário de março, fazemos o drill-down no mês e pivoteamos os eixos da visão:
E isso não pára por aí! Como eu tenho outros atributos em mês e hora, posso reagrupar esses dados de muitas maneiras diferentes, jogar o User Agent (mais ou menos o browser – que pode ser um bot ou qualquer outra coisa), tipo de acesso, quantidade de bytes servidos etc.
Por exemplo, esse é o gráfico de bytes servidos ao longo dos dias desses dois meses:
E etc. etc. etc… Acho que já deu para ter uma idéia, não?
Modelo Dimensional Completo
A proposta inicial pedia análise do serviço de página contra dia, User Agente e hora. O modelo atualizado dá conta disso, e exibe mais três dimensões degeneradas: código de retorno, versão HTTP e método (post, get etc.) Eventualmente essas dimensões degeneradas podem formar uma junk, sair da fato e assim melhorar a performance da estrela.
Dimensão Hora
Criei a transformação de carga e a tabela, a partir de uma dica nos fóruns da Pentaho. Surpreendentemente, a dimensão tem mais de 80.000 linhas, umas quatro vezes o tamanho da dimensão data. O dimensionamento contra ela é exatamente igual ao da data, via database look-up.
Lendo de Arquivos
Como os logs Apache são gerados em arquivos, é mais prático lê-los diretamente desses. Antes eles eram passados para um balde S3 por um programa Python, e só depois eram lidos pelo PDI a partir da Amazon.
Processamento Incremental
Antes o processamento truncava tudo (incluindo fato) e recarregava do zero. Agora ela lê cada arquivo de log, carrega em uma tabela temporária previamente truncada e depois carrega na fato. O arquivo é então zipado para evitar reprocessamento e manter histórico.
Os dois primeiros passos contam a quantidade de arquivos disponíveis.
Se for zero, encerra o processamento. Se for maior que zero, segue adiante. Logo depois da carga do log em tabela, o processamento se divide e dois, e o ramo de cima compacta os arquivos de log e verifica se algum novo User Agent foi identificado.
O arquivo Excel gerado na transformação acima deve ser examinado e manualmente adicionado ao arquivo Excel que mapeia os UAs em seus atributos (não conseguimos algoritmo que fizesse isso, ainda, e por isso fazemos na mão.) O arquivo de mapeamento é consultado a cada nova carga, para determinar se alguma UA foi adicionada ou alterada.
A fato é então processada:
Manual de Uso
Bom, está mais para um readme com passo-a-passo. Mas vai virar um manual (ODT, provavelmente), completo com figuras e tudo.
Download
Você pode baixar um ZIP com todas as transformações, jobs, arquivos de configuração e instruções no Sourceforge.net Open BI Solutions.
As instruções para colocar a solução no seu Apache estão no pacote, e não vou me repetir aqui. A página do projeto possui um fórum, uma wiki e um bugtracker. Eu ainda estou aprendendo a usar tudo isso mas vou procurar manter o projeto bem acompanhado. Em todo caso, podem postar comentários pedindo ajuda, comentando ou criticando aqui mesmo.
Próximos Passos
Com certeza é melhorar o mapa de-para da dimensão User Agent, mover as dimensões degeneradas para fora (eu detesto degeneradas, mas também não gosto de junks, o que torna essa decisão bem difícil), e provavelmente criar tabelas pré-agregadas, já que a quantidade de linhas, em menos de dois meses, já está em mais de 360.000 – e olha que o site dele é até bem paradinho… Imagine um site um pouco mais popular! Deve juntar milhões de acessos em alguns meses!
E Depois?
Bom, depois vem a parte que é BI de verdade. Lembram-se do post anterior, sobre Data Mining? Então, só de graça eu rodei o Weka sobre esses dados. Não é fácil descobrir nada assim, de cara, com pouco preparo e pouquíssimos dados, mas eu comecei uma atividade simples: descobrir se existe alguma correlação entre alguma dessas variáveis. O primeiro passo é gerar um arquivo no formato ARFF, carregá-lo no Explorer do Weka e examinar o cruzamento de tudo com tudo:
Até a próxima!
Fábio, show de bola! Torna simples uma análise que normalmente é dolorosa. E é tão bom que merece um “spin-off”: coloca aí na fila mais do mesmo, mas para análise de log de containers e aplicações JEE que utilizam o Log4J: JBoss, Tomcat…
Muito obrigado Alexandre! Sabe que eu não havia me dado conta? jBoss, Tomcat, qualquer um que use a Log4J – eu só preciso de uma cobaia! ;-)
Parabéns! =)
Parabéns pela iniciativa, muito útil e muito funcional. Conte com o meu apoio nesse projeto.
Gosto muito dos seus texto, tanto de BI quanto de BPM. Show de bola!
Muito obrigado! Se você quiser ajudar, a lista de navegadores ainda está crua, e a separação precisa ser manual. Se tiver paciência, basta completar o registro para cada user agent. Seu nome entrará nos créditos! ;-)
Ok parceiro, com certeza tô nessa empreitada com vcs. Sou colega do Ararigleno aqui na UNB, estou num projeto da SPU, espero que possamos trocar mais informações.