使用Python 分析Nginx access 日志,根据Nginx日志格式进行分割并存入MySQL数据库。
一、Nginx access日志格式如下:
复制代码 代码如下:
$remote_addr – $remote_user [$time_local] \”$request\” $status $body_bytes_sent \”$http_referer\” \”$http_user_agent\” \”$http_x_forwarded_for\”\’ #使用的是nginx默认日志格式
二、Nginx access 日志内容如下:
复制代码 代码如下:
182.19.31.129 – – [2013-08-13T00:00:01-07:00] \”GET /css/anniversary.css HTTP/1.1\” 304 0 \”http://www.chlinux.net/\” \”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36\” \”-\”
三、下面是Python 分析nginx日志的Python代码:
复制代码 代码如下:#!/usr/bin/env python
#coding:utf8
import os
import fileinput
import re
import sys
import MySQLdb
#日志的位置
logfile=open(\”access_20130812.log\”)
#使用的nginx默认日志格式$remote_addr – $remote_user [$time_local] \”$request\” $status $body_bytes_sent \”$http_referer\” \”$http_user_agent\” \”$http_x_forwarded_for\”\’
#日志分析正则表达式
#203.208.60.230
ipP = r\”?P[\\d.]*\”
#以[开始,除[]以外的任意字符 防止匹配上下个[]项目(也可以使用非贪婪匹配*?) 不在中括号里的.可以匹配换行外的任意字符 *这样地重复是\”贪婪的“ 表达式引擎会试着重复尽可能多的次数。#以]结束
#[21/Jan/2011:15:04:41 +0800]
timeP = r\”\”\”?P
四、存入数据库后数据是如下图: