2、Nginx access 日志内容如下:

四、存入数据库后数据是如下图:

复制代码 代码如下:

复制代码 代码如下:

$remote_addr – $remote_user [$time_local] “$request” $status
$body_bytes_sent “$http_referer” “$http_user_agent”
“$http_x_forwarded_for”‘ #接纳的是nginx私下认可日志格式

三、下面是Python 分析nginx日志的Python代码:

您大概感兴趣的稿子:

  • python达成深入分析apache和nginx日志文件并出口访客ip列表的主意
  • python+pandas分析nginx日志的实例
  • python正则深入分析nginx的造访日志
  • Python分析nginx日志文件
  • python怎么样获得服务器硬件音信
  • python下什么询问CS反恐精英·全球杀鸡的服务器音信
  • Python获取服务器音信的最简便易行完结情势
  • Python达成获取nginx服务器ip及流量计算音信意义示例

182.19.31.129 – – [2013-08-13T00:00:01-07:00] “GET
/css/anniversary.css HTTP/1.1” 304 0 “”
“Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/28.0.1500.95 Safari/537.36” “-“

#!/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<ip>[\d.]*”
#以[开始,除[]以外的跋扈字符
幸免相称上下个[]品类(也得以采取非贪婪相称*?)
不在中括号里的.能够匹配换行外的大肆字符 *那样地再度是”贪婪的“
表明式引擎会试器重新尽大概多的次数。#以]结束
#[21/Jan/2011:15:04:41 +0800]
timeP = r”””?P<time>\[[^\[\]]*\]”””
#以”开始, #除双引号以外的任性字符
幸免相称上下个””项目(也能够动用非贪婪相配*?),#以”结束
#”GET /EntpShop.do?method=view&shop_id=391796 HTTP/1.1″
#”GET /EntpShop.do?method=view&shop_id=391796 HTTP/1.1″
requestP = r”””?P<request>\”[^\”]*\””””
statusP = r”?P<status>\d+”
bodyBytesSentP = r”?P<bodyByteSent>\d+”
#以”初叶, 除双引号以外的任意字符
幸免相称上下个””项目(也得以利用非贪婪相称*?),#以”结束
#””
referP = r”””?P<refer>\”[^\”]*\””””
#以”伊始, 除双引号以外的放肆字符
幸免相配上下个””项目(也足以动用非贪婪相称*?),以”结束
#”Mozilla/5.0 (compatible; Googlebot/2.1;
+)”‘
userAgentP = r”””?P<userAgent>\”[^\”]*\””””
#以(起首, 除双引号以外的放肆字符
幸免相配上下个()项目(也得以选拔非贪婪匹配*?),以”结束
#(compatible; Googlebot/2.1; +)”‘
userSystems = re.compile(r’\([^\(\)]*\)’)
#以”开头,除双引号以外的随便字符防止相配上下个””项目(也足以采纳非贪婪相称*?),以”结束
userlius = re.compile(r'[^\)]*\”‘)
#规律:主要通过空格和-来区分各分化系列,各档案的次序里面写各自的协作表达式
nginxLogPattern = re.compile(r”(%s)\ -\ -\ (%s)\ (%s)\ (%s)\
(%s)\ (%s)\ (%s)” %(ipP, timeP, requestP, statusP, bodyBytesSentP,
referP, userAgentP), re.VERBOSE)
#数据库连接消息
conn=MySQLdb.connect(host=’192.168.1.22′,user=’test’,passwd=’pass’,port=3306,db=’python’)
cur=conn.cursor()
sql = “INSERT INTO python.test VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)”
while True:
    line = logfile.readline()
    if not line:break
    matchs = nginxLogPattern.match(line)
    if matchs != None:
        allGroup = matchs.groups()
        ip = allGroup[0]
        time = allGroup[1]
        request = allGroup[2]
        status = allGroup[3]
        bodyBytesSent = allGroup[4]
        refer = allGroup[5]
        userAgent = allGroup[6]
        Time = time.replace(‘T’,’ ‘)[1:-7]
        if len(userAgent) > 20:
            userinfo = userAgent.split(‘ ‘)
            userkel =  userinfo[0]
            try:
                usersystem = userSystems.findall(userAgent)
                usersystem = usersystem[0]
                print usersystem
                userliu = userlius.findall(userAgent)
                value =
[ip,Time,request,status,bodyBytesSent,refer,userkel,usersystem,userliu[1]]
                conn.commit()
                print value
            except IndexError:
                userinfo = userAgent
                value =
[ip,Time,request,status,bodyBytesSent,refer,userinfo,””,””]
        else:
            useraa = userAgent
            value =
[ip,Time,request,status,bodyBytesSent,refer,useraa,””,””]
    try:
        result = cur.execute(sql,value)
        #conn.commit()
        print result
    except MySQLdb.Error,e:
        print “Mysql Error %d: %s” % (e.args[0], e.args[1])
conn.commit()
conn.close()

使用Python 解析Nginx access
日志,依据Nginx日志格式进行分割并存入MySQL数据库。
壹、Nginx access日志格式如下:

复制代码 代码如下:

网站地图xml地图