本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Python日志操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
本文向大家介绍Python实现的大数据分析操作系统日志功能示例,包括了Python实现的大数据分析操作系统日志功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现的大数据分析操作系统日志功能。分享给大家供大家参考,具体如下: 一 代码 1、大文件切分 2、Mapper代码 3.Reducer代码 二 运行结果 依次运行上面3个程序,得到最终结果: 07/10/2013:
本文向大家介绍python+pandas分析nginx日志的实例,包括了python+pandas分析nginx日志的实例的使用技巧和注意事项,需要的朋友参考一下 需求 通过分析nginx访问日志,获取每个接口响应时间最大值、最小值、平均值及访问量。 实现原理 将nginx日志uriuriupstream_response_time字段存放到pandas的dataframe中,然后通过分组、数据统
本文向大家介绍Python实现一个Git日志统计分析的小工具,包括了Python实现一个Git日志统计分析的小工具的使用技巧和注意事项,需要的朋友参考一下 前言 本文介绍的是利用Python实现的一个小工具,用于分析Git commit log,获得Git Project每个成员的简单行为数据。 Warning:代码量不能代表程序员能力水平! 启动参数 共5个。 Repo地址 Commit 起始日
1. Nginx日志功能介绍 通常,在生产环境中使用 Nginx 进行反向代理和负载均衡或者各种其他处理时,良好的日志记录是非常关键的一环。通过精心配置的 Nginx 日志,我们可以获取用户的真实 ip、浏览器信息,请求处理时间,请求URL等,这样方便我们排查和回溯错误。具体要记录哪些信息,可以通过 Nginx 中的 log_format 指令定义,由它定义日志的格式。而对于使用哪种日志格式和设置
我正在尝试使用Logstash解析nginx日志,除了用包含nginx$remote\u用户的行获取这个标记外,一切看起来都很好。当$remote_user为“-”(未指定$remote_user时的默认值)时,Logstash将执行此任务,但使用真正的$remote_用户,如它失败并放置一个标签: 127.0.0.1--[17/Feb/2017:23:14:08 0100]"GET/favico
本文向大家介绍Yii使用DbTarget实现日志功能的示例代码,包括了Yii使用DbTarget实现日志功能的示例代码的使用技巧和注意事项,需要的朋友参考一下 一:在配置文件的log组件中配置DbTarget 二:生成日志表 在项目目录下执行如下命令生成日志表 三:使用日志 在需要使用日志的地方使用 四:自定义DbTarget日志 1:首先创建一个自定义的日志表 (1)在项目目录下执行 (2):在