#!/usr/bin/python
# -*- coding:utf-8 -*-
__author__ = 'lvnian'
#!/usr/bin env python
# coding: utf-8
import MySQLdb as mysql
import sys,os,re
db = mysql.connect(user="root",passwd="mysql",db="nginx_log",host="192.168.11.251") #數據庫連接信息
db.autocommit(True)
cur = db.cursor()
cur.execute('set names utf8')
dict_list = {}
log = re.compile(r"""(?P<ipaddress>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - - \[(?P<dateandtime>\d{2}\/[a-z]{3}\/\d{4}:\d{2}:\d{2}:\d{2} (\+|\-)\d{4})\] ((\"(GET|POST) )(?P<url>.+)(http\/1\.1")) \<br> (?P<statuscode>\d{3}) (?P<bytessent>\d+) (["](?P<refferer>(\-)|(.+))["]) (["](?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[,])""", re.IGNORECASE)
with open('access.log') as logfin:
for line in logfin.readlines():
data = re.search(log, line)
if data:
datadict = data.groupdict()
date = datadict["dateandtime"]
ip = datadict["ip"]
url = datadict["url"]
# ip url 和status當key,每次統計+1
dict_list[(date,ip,url)] = dict_list.get((date,ip,url),0)+1
# 轉換成列表
ip_list = [(k[0],k[1],k[2],v) for k,v in dict_list.items()]
# 按照統計數量排序,排序後保存到數據庫。
for insert in sorted(ip_list,key=lambda x:x[3],reverse=True):
print insert #測試用的,可以不要。整個功能是輸出一行,然後保存到數據庫。
sql = 'insert loginfo values ("%s","%s","%s","%s")' % insert
print sql
cur.execute(sql)
Python葵花寶典-nginx日誌分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.