python   實現nginx/apache 日誌格式的統計腳本

# !/usr/bin/env python

# -*- coding:utf8 -*-

import sys

import re

import time

import os


def main():

    months ={

       "jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6,

        "Jul": 07, "Aug": 8, "Sep": 9, "Oct": 10, "Nov": 11, "Dec": 12}

    error = '請輸入正確的時間格式,例如 2016-08-03 10:00:00'

    start = raw_input("請輸入要查詢的開始時間段如:2016-08-03 10:00:00")

    #start = '2016-08-03 10:37:00'

    pattern = re.compile("^201[3-6]-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1])\s([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$")

    i_start = re.match(pattern, start)

    if i_start == None:

        print error

        sys.exit(0)

    end = raw_input("請輸入要查詢的結束時間段如:2016-08-03 10:01:00")

    #end = '2016-08-03 10:38:00'

    i_end = re.match(pattern, end)

    if i_end == None:

        print error

        sys.exit(0)

    print "time format is true !"


    ## 獲取格式的時間的定時間戳 ##

    start_stamp = time.mktime(time.strptime(start, "%Y-%m-%d %H:%M:%S"))


    end_stamp = time.mktime(time.strptime(end, "%Y-%m-%d %H:%M:%S"))


    ## 處理文件 ###

    log_abpath = raw_input("請輸入log文件的絕對路徑 例如:/var/log/apache2/access.log")

    filepath = os.path.exists(log_abpath)

    if not filepath:

        raise "對不起該目錄文件不存在!!"

        sys.exit(0)

    print "文件存在!!"

    f = open(log_abpath, 'r')

    #f = open("/var/log/apache2/access.log", "r")

    logs = f.readlines()

    position = 0

    t_logs = []

    for log in logs:

        position += 1

        log = log.split(" ")

        log.insert(0, position)

        t_logs.append(log)


    for t_log in t_logs:

        #print type(t_log)

        tim = str(t_log[4][1:])

        mon = tim[3:6]

        #print mon

        #print tim

        #print type(tim)

        #print months[mon]

        tim_f = tim.replace(mon, str(months[mon]))

        #print tim_f

        d = time.strptime(tim_f, "%d/%m/%Y:%H:%M:%S")

        stamp = time.mktime(d)

        t_log.insert(1, stamp)


    # print t_logs

    count = 0

    for t_log in t_logs:

        if t_log[1] > start_stamp < end_stamp:

            print "該時間段內的請求日誌出現在,"+str(t_log[0])+"行"

   count += 1

    if count != 0:

print "該段時間內一共出現了%d次請求"%(count)

    else:

print "對不起,我已經努力幫你找了,可是找到該段時間的日誌信息"


if __name__ == '__main__':

    main()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章