首页 > 代码库 > 如何得出一段时间内日志中的错误种类以及次数

如何得出一段时间内日志中的错误种类以及次数

#!/usr/bin/python

import re

import os

import sys 

import pycurl


def buffer_line(monitor_log):

    buf = open("/data0/webinternal_monitor/%s"%monitor_log).read()

    bytes=os.popen(‘wc -c /data0/logs/%s‘%monitor_log).read().split(" ")[0]

    if int(bytes) < int(buf):

        return 0

    else:

        return int(re.findall("^\d*", buf)[0])


def set_last_pos(pos,monitor_log):

    open("/data0/webinternal_monitor/%s"%monitor_log, "w").write(str(pos))



def monitor_work(monitor_log):

    fh=open(‘/data0/logs/%s‘%monitor_log,‘r‘)

    fh.seek(buffer_line(monitor_log))

    content=fh.read()

    new_total_lines=len(content)+buffer_line(monitor_log)

    set_last_pos(new_total_lines,monitor_log)

    new_lines=content.split("\n")

    return new_lines


def monitor_work_1(title,content):

        cc = pycurl.Curl()

        cc.setopt(cc.URL,‘http://alert.sae.sina.com.cn/new/?service=webinternal_monitor_time&checkpoint=averge_response_time&title=%s&content=%s&cluster=public&grade=2‘

        cc.perform()


def monitor_work_2(title,content):

        print ‘2‘

        dd = pycurl.Curl()

        dd.setopt(dd.URL,‘http://alert.sae.sina.com.cn/new/?service=webinternal_monitor&checkpoint=500_error&title=%s&content=%s&cluster=public&grade=2‘%(title,content)

        print dd.perform()


if __name__ == ‘__main__‘:


    log_list=[‘atc.sae.sina.com.cn-access_log‘,‘check.sae.sina.com.cn-access_log‘,‘deferredjob.sae.sina.com.cn-access_log‘,‘image.sae.sina.com.cn-access_log‘,‘internal.

    for i in log_list:

        appname={}

        averge_list=[]

        g=0

        monitor_file=monitor_work(i)

        for ii in monitor_file:

            if ii:

                b=re.search(r‘\] (\d.*?) \".*HTTP/1..\" (\d...*?)‘,ii)

                try:

                    c=b.group(2)

                except AttributeError, ee:

                    pass

                try:

                    d=b.group(1)

                    averge_list.append(d)

                except AttributeError, kk:

                    pass

                if c not in appname:

                    appname[c]=1

                else:

                    appname[c]+=1

        for e in averge_list:

           g+=int(e)

        try:

            f=g/len(averge_list)

            appname[‘averge_response_time‘]=f

        except ZeroDivisionError, l:

            appname[‘averge_response_time‘]=0

        print i,appname

        if ‘500‘ in appname:

            print ‘500‘

            if appname[‘500‘] > 0:

                error=i,‘ 500error‘

                print appname[‘500‘]

                monitor_work_2(i+‘_‘+str(appname[‘500‘])+‘_error‘,i+‘_‘+str(appname[‘500‘])+‘_error‘)

        if appname[‘averge_response_time‘] >= 1000000:

                print ‘ok‘

                error_averge=appname[‘averge_response_time‘]

                monitor_work_1(i+‘_‘+str(appname[‘averge_response_time‘])+‘_microsecond‘,i+‘_‘+str(appname[‘averge_response_time‘])+‘_microsecond‘) 


如何得出一段时间内日志中的错误种类以及次数