[Python/自动化运维] 运用Python进行Nginx日志状态码过滤

每个公司的NginxWeb服务器日志格式是不一样的,但是正则改一下就可以用,统计状态码及域名的发生次数,注意:注释部分为同一条url 同一个客户端ip及状态码访问过来的,生产环境这样的也不是很多,所以注释了,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
import sys

def Return():
    print('\t-c 指定状态码 (2xx 3xx 4xx 5xx)')

class Match():
    def __init__(self,code):
        self.code = code
        self.List = []
    def Find(self):
        for i in open('/bbd/logs/nginx_user_access.log','r').readlines():
            try:
            #   Ip   = re.search("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",i).group(0)
                #Url  = re.search('request(.*)protocol',i).group(1).split('\"')[2]
                Domain = 'http://' + re.search('domain:?(.*)request:?',i).group(1).split('\"')[2] #+ Url
                Code = re.search("http_status((.*)%s+(.*))body_bytes_sent" % self.code,i).group(1).split(':')[1][1:4]
                self.List.append((Domain,Code))
            except Exception as e:
                 pass
        return self.List

class Result():
    def __init__(self):
        self.data = Match(str(code)).Find()
        self.Filter = []
        self.Key = {}
    def GetLengh(self):
        for i in self.data:
            if i not in  self.Key.keys():
                self.Key[self.data.count(i)] =  i 
            else:
                pass
        return self.Key
    def GetResult(self):
        result = Result().GetLengh()
        result = sorted(result.items(), key=lambda result:result[0], reverse = True)
        result = result[0:11]
        for k,v in result:
            print('个数:%s 域名:%s ' % (k,v))


if __name__ == '__main__':
    try:
        if sys.argv[1] == '-c':
            if sys.argv[2] == '2xx':
                code = '20'
                value = Result()
                value.GetResult()
            elif sys.argv[2] == '3xx':
                code = '30'
                value = Result()
                value.GetResult()
            elif sys.argv[2] == '4xx':
                code = '4'
                value = Result()
                value.GetResult()
            elif sys.argv[2] == '5xx':
                code = '5'
                value = Result()
                value.GetResult()
        else:
            Return()
    except Exception as e:
        Return()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值