python实现的分析并统计nginx日志数据功能示例
作者:hnr1017 发布时间:2023-07-30 20:08:15
标签:python,nginx日志
本文实例讲述了python实现的分析并统计nginx日志数据功能。分享给大家供大家参考,具体如下:
利用python脚本分析nginx日志内容,默认统计ip、访问url、状态,可以通过修改脚本统计分析其他字段。
一、脚本运行方式
python count_log.py -f med.xxxx.com.access.log
二、脚本内容
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
1.分析日志,每行日志按空格切分,取出需要统计的相应字段,作为字典的key,遍历相加
2.使用到字典的get方法,通过定义默认值,避免miss key的错误
3.使用列表解析表达式
4.使用sorted函数排序列表
5.使用argparse传入参数
6.nginx日志格式:
log_format access_log
'$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$request_time"' '"$upstream_addr"' '"$upstream_response_time"';
7.日志内容:
222.xx.xxx.15 - - [07/Dec/2016:00:03:27 +0800] GET /app/xxx/xxx.apk HTTP/1.0 "304" 0 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "0.055""-""-"
8.脚本运行结果:
('106.xx.xx.46', '/gateway/xxx/user/mxxxxx/submitSelfTestOfSingleQuestion', '"200"', 299)
('182.1xx.xx.83', '/', '"200"', 185)
('222.xx.1xx.15', '/', '"200"', 152)
('125.xx.2xx.58', '/', '"200"', 145)
"""
import argparse
def count_log(filename, num):
try:
with open(filename) as f:
dic = {}
for l in f:
if not l == '\n': # 判断空白行
arr = l.split(' ')
ip = arr[0]
url = arr[6]
status = arr[8]
# 字典的key是有多个元素构成的元组
# 字典的get方法,对取的key的值加1,第一次循环时由于字典为空指定的key不存在返回默认值0,因此读第一行日志时,统计结果为1
dic[(ip, url, status)] = dic.get((ip, url, status), 0) + 1
# 从字典中取出key和value,存在列表中,由于字典的key比较特殊是有多个元素构成的元组,通过索引k[#]的方式取出key的每个元素
dic_list = [(k[0], k[1], k[2], v) for k, v in dic.items()]
for k in sorted(dic_list, key=lambda x: x[3], reverse=True)[:num]:
print(k)
except Exception as e:
print("open file error:", e)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="传入日志文件")
# 定义必须传入日志文件,使用格式-f filename
parser.add_argument('-f', action='store', dest='filename', required=True)
# 通过-n传入数值,取出最多的几行,默认取出前10
parser.add_argument('-n', action='store', dest='num', type=int, required=False, default=10)
given_args = parser.parse_args()
filename = given_args.filename
num = given_args.num
count_log(filename, num)
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.51cto.com/hnr520/1880663


猜你喜欢
- 简述从官网下载了Python3.7.4,直接编译安装后,使用pip3出现了报错信息: Can't connect to HTTPS
- 1、灵活运用样式熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custo
- 本文进通过实例,讲述通过 prototype 自定义方法的过程,旨在抛砖引玉,如果不对的地方,欢迎指正!prototype 是在 IE 4
- Pycharm打开大文件的时候出现这个错误,根据提示以及百度知道,是因为IDEA对能关联的文件大小做了限制,主要是为了保护内存,默认值为25
- UCD介绍UCD是Unicode字符数据库(Unicode Character DataBase)的缩写。UCD由一些描述Unicode字符
- 抢票是并发执行多个进程可以访问同一个文件多个进程共享同一文件,我们可以把文件当数据库,用多个进程模拟多个人执行抢票任务db.tx
- 前言一直想好好学习一下Python爬虫,之前断断续续的把Python基础学了一下,悲剧的是学的没有忘的快。只能再次拿出来滤了一遍,趁热打铁,
- asp之字符串函数示例用字符串函数对字符串进行截头去尾、大小写替换等操作。函数语 * 能LenLen(string|varname)返回字符串
- CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(
- 没什么实际用途,纯属消遣Quick Click<html><head><title>Quick_Clic
- 本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:背景: 有时候需要在测试环境下一个美团的
- 例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://loca
- 我使用的python版本是3.5.2今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字,打算通过pip
- 一、mediapipe是什么?mediapipe官网二、使用步骤1.引入库代码如下:import cv2from mediapipe imp
- 说明1、字典运算中的键必须是不可变类型,如整数(int)、浮点数(float)、字符串(str)、元组(tuple)等。2、列表(list)
- 你好,一般情况下,Ctrl+C 是最简单的方法,当无法 Ctrl+C 时,我们借助于 Python,以下是具体步骤:第一步,安装工具库1、t
- 问题:python spyder先出现dos窗口,然后后面就什么都没有了。解决方法:C:\用户\Administrator\.spyder3
- 查询背景有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outline,存了一对多关系(保存了多个编码,例如
- Mysql replace与replace into都是经常会用到的功能;replace其实是做了一次update操作,而不是先delete
- 目录selenium介绍selenium原理Selenium安装部署步骤1. 准备好python环境:2. 下载selenium并安装:3.