首页 > 系统相关 >nginx日志的python分析脚本

nginx日志的python分析脚本

时间:2022-09-28 19:23:26浏览次数:43  
标签:python excel uri datetime nginx result print 日志

因为容量场景需要统计峰值时间段的业务分布情况,即是统计每个接口请求以及对应的数量,这里记录下之前的实现脚本。

nginx的日志格式如下:

 代码如下:

import os,json
import pandas as pd
import datetime


'''
全局参数
'''

# 日志文件存放目录
logDir = r"C:\Users\qgc\Desktop"
# 源日志文件,3天汇总
logFile= r"C:\Users\qgc\Desktop\nginx.log"
# 清洗完的文件绝对路径
date = datetime.datetime.strftime(datetime.datetime.now(), '%H%M')
print(date)
resultName = logDir+"\\result-" + date +".xlsx"

print ('开始数据预处理')

# 定义过滤函数,过滤掉无效uri
filt = ['.js','css','images','static']
filt2 = ['/deme/']
def filter_invalid_str(s,filt):
    if s.isdigit() or s == '/' or s =='/null':
        return 0
    for i in filt:
        if i in s:
            return 0
    for j in filt2:
        if j not in s:
            return 0
    else:
        return 1

print('开始数据分析')


# 统计各个uri的访问量,算出日业务量,过滤掉请求次数为0的uri
def uri_statistics(time):
    result = {}
    count = 0
    with open(logFile, 'r', encoding="utf-8") as fr:
        for i in fr:
            line = i.split()
            if time in line[3]:
                k = line[6].split("?")[0]
                if filter_invalid_str(k,filt):
                    count+=1
                    if k not in result.keys():
                        result[k] = 1
                    elif k in result.keys():
                        result[k] += 1
                    else:
                        print("%s 存入字典时,key没有找到!"%k)
    print(f"共分析{count}条数据,找到{len(result)}接口数据")
    if len(result) >0:
        # 将清洗完的接口统计数据写入目标文件
        if os.path.exists(resultName):
            os.remove(resultName)
        pandas_to_excel(resultName, result)
    else:
        print("未生成txt数据")

def pandas_to_excel(f, data):
    file_path = pd.ExcelWriter(f)
    try:
        df = pd.DataFrame(pd.Series(data), columns=['total'])
        df = df.reset_index().rename(columns={'index': 'apiUri'})
        df.to_excel(file_path, encoding='utf-8')
        file_path.save()
    except Exception as e:
        print("Error:", e)
    print("excel处理数据成功")


if __name__ == '__main__':
    time = "13/Jul/2022:09"  //自定义日期时间,这里是指定13日9点的一小时数据。
    uri_statistics(time)

 代码运行结果如下:

 

 上面这个表格,可以用excel自带的计算公式计算下百分比,就可以得到业务的分布比例。

标签:python,excel,uri,datetime,nginx,result,print,日志
From: https://www.cnblogs.com/qgc1995/p/16551243.html

相关文章

  • python爬取黑马网站
         ......
  • python流程控制下-for、while循环补充
    循环结构之for循环实现循环结构还可以用关键字for。for关键字我们来看这一段代码:emotions=['smile','laugh','cry','angry']foremoinemotions:print('我......
  • python-装饰器
    装饰器(1)什么是装饰器:器指的是工具,可以定义成函数装饰指的是为其他事务添加额外的东西来点缀上面两者合到一起:装饰器指的是定义一个函数,该函数用来为其他函数添......
  • python开发学习全记录
    目录Python开发学习全记录Python基础开发者最常用的文本工具——typoratypora安装与使用计算机基础知识编程与编程语言Python开发所使用的IDE工具——pycharmpycharm的下载......
  • python-正则表达式re模块
    07、正则表达式学习正则表达式操作字符串re模块是用C语言写的没匹配速度非常快其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有......
  • python-函数的参数与返回值
    Python函数4.1、函数初识在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数就......
  • python中字典更新键(key)的方式
    字典中的键(key)是哈希类型,不可以直接修改,需要修改键值用以下方法.方法一:新增key其value为原key的value,删除原key及其对应的value demo1={'name':'小瓜',......
  • python-简单模块的使用
    提示:简单模块了解掌握@目录uuid模块calendar日历模块time模块datetime模块os模块sys模块random模块json和pickle模块jsonpickle模块hashlib模块configparser模块subproc......
  • python-名称空间与作用域
    名称空间与作用域(1)名称空间(namespaces)用来存放名字的地方是对栈区的划分有了名称空间,就可在栈区中放相同的名字1.1、内置名称空间存放的名字:是Python解释器内置的名字......
  • python-并发编程
    目录01、理论多道技术null02、进程进程运行的三状态图同步和异步阻塞和非阻塞开启进程的两种方式进程对象的join方法进程之间数据相互隔离(默认情况下)进程对象及其他方法僵......