python实现的分析并统计nginx日志数据功能示例


Posted in Python onDecember 21, 2019

本文实例讲述了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 random模块(获取随机数)常用方法和使用例子
May 13 Python
python复制文件的方法实例详解
May 22 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
python文件选择对话框的操作方法
Jun 27 Python
python3安装crypto出错及解决方法
Jul 30 Python
Python的几种主动结束程序方式
Nov 22 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
在django中使用post方法时,需要增加csrftoken的例子
Mar 13 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
Python数据持久化存储实现方法分析
Dec 21 #Python
python cv2截取不规则区域图片实例
Dec 21 #Python
Python lxml模块的基本使用方法分析
Dec 21 #Python
python Manager 之dict KeyError问题的解决
Dec 21 #Python
tornado+celery的简单使用详解
Dec 21 #Python
Python selenium的基本使用方法分析
Dec 21 #Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 #Python
You might like
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
php实现session共享的实例方法
2019/09/19 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Python中turtle作图示例
2017/11/15 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
运行时异常与一般异常有何异同?
2014/01/05 面试题
东方通信股份有限公司VC面试题
2014/08/27 面试题
董事长职责范文
2013/11/08 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python