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:

Quantidade de acessos, na madrugada e manhã, entre março e abril de 2012

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:

Quantidade de acessos da 1H às 12H, durante março de 2012.

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:

Quantidade de bytes servidos por dia, entre março e abril de 2012.

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.

Modelo dimensional Apache BI 1.0, agora com dimensão hora.

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.

Carga da dimensão hora. Gera mais de 80.000 linhas!

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 de arquivos de log Apache.

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.

Processo completo de carga do Apache BI.

Os dois primeiros passos contam a quantidade de arquivos disponíveis.

Trasnformação que conta arquivos disponíveis para carga.

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.

Transformação que identifica novos UAs nos arquivos processados.

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.

Atualiza a dimensão User Agent. Curiosidade: essa é uma SCD1.

A fato é então processada:

Transformação que carrega os registros de log na fato.

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:

Existe alguma correlação aparente? Versão HTTP e Método?

Até a próxima!

6 comentários sobre “Apache BI Parte 2

  1. 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…

  2. 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!

    1. 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! ;-)

      1. 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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s