• My Del.icio.us

Python + MongoDB + Log do Apache

Posso dizer que este post começa do fim para o começo. Então, o fim segue abaixo:

# *-* coding: utf-8 *-*

from pymongo import Connection
from time import gmtime, strftime
import sys
import re

try:
fileAccess = open("/home/erick/temp/access_log","r",1)
except:
print "Falha ao abrir o arquivo"
sys.exit(1)

try:
db = Connection("192.168.1.169").analytics
except:
print "Ocorreu um erro ao conectar-se ao MongoDB"
sys.exit(1)

def mongoInsert(strAcLine):
remote_host, remote_logname, remote_user, date, first_line_request, method, requested_url, http, http_status_code, size_response, time_serve_request, referer , user_agent = strAcLine
db.analytics.insert({ "Remote_Host" : remote_host, "Remote_Logname" : remote_logname, "Remote_User" : remote_user, "Date" : date, "First_Line_Request" : first_line_request, "Method" : method, "Requested_Url" : requested_url, "Http" : http, "Http_Status_Code" : http_status_code, "Size_Response": size_response, "Time_Serve_Request" : time_serve_request, "Referer" : referer , "User_Agent": user_agent })

def mongoValues():
db.analytics.count()
http_st_code = db.analytics.find({"Http_Status_Code" : "304"})
for p in http_st_code:
print p["Ip_Src"]

# Loop que lê linha à linha até o fim do arquivo. OBS: não coloca todas as linhas em memória,
# apenas a linha atual
while file.readline(fileAccess):
strLines = file.readline(fileAccess)
strTemp = re.split(" ",strLines, 12)
mongoInsert(strTemp)

# Abre arquivo para escrita de LOG
logfile = open("/home/erick/temp/log.txt","w")

# Escreve a data no seguinte formado: Tue, 16 Nov 2010 21:02:32 +0000
logfile.write(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) + "\n")

# Faz consulta no MongoDB
mongoValues()

# Escreve a data no seguinte formado: Tue, 16 Nov 2010 21:02:32 +0000
logfile.write(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) + "\n")

# Fecha o arquivo que contém os dados à serem analisados
file.close(fileAccess)

# Fecha o arquivo de log
file.close(logfile)

# Finaliza a execução do script
sys.exit(0)

A proposta do script acima é pegar os dados de um arquivo de log de acesso do Apache e colocá-lo no MongoDB, para que a partir daí seja possível fazer algumas consultas no Banco de Dados. O script acima foi feito por mim apenas para teste e aprendizado, não estou seguindo nenhum padrão.

Os próximos posts irão explicar :

  • Como instalar o MongoDB;
  • Como instalar a extensão do MongoDB para Python;

MongoDB é alvo dos estudos que venho fazendo nas últimas semanas, espero poder compartilhar com todos o conhecimento que venho adquirindo.

Abraço à todos e até a próxima.

Alvo dos próximos estudos

Abaixo listo o alvos meus próximos estudos:

– Scribe

http://github.com/facebook/scribe

O Scribe é um projeto desenvolvido pelo Facebook, distribuído sob licença livre. É um software que agrega dados de logs dos servidores.

– Varnish

http://varnish-cache.org/

É um acelerador HTTP, em breve mais detalhes.
Alguns detalhes adicionais no link abaixo:
http://queue.acm.org/detail.cfm?id=1814327

– Redis

http://code.google.com/p/redis/

– MapReduce Framework

MapReduce.simplified.data.Processing.on.Large.clusters

Vamos que vamos, vou manter o blog atualizado com as minhas impressões sobre esses estudos.