Python实现获取nginx服务器ip及流量统计信息功能示例


Posted in Python onMay 18, 2018

本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:

#!/usr/bin/python
#coding=utf8
log_file = "/usr/local/nginx/logs/access.log"
with open(log_file) as f:
  contexts = f.readlines()
# define ip dict###
ip = {}   # key为ip信息,value为ip数量(若重复则只增加数量)
flow = {}  # key为ip信息,value为流量总和
sum = 0
for line in contexts:
  # count row size of flow
  size = line.split()[9]
  # print ip
  ip_attr = line.split()[0]
  # count total size of flow
  sum = int(size) + sum
  if ip_attr in ip.keys():  # if ip repeated,如果ip重复就将ip数量加一,而流量继续叠加
  # count of ip plus 1
    ip[ip_attr] = ip[ip_attr] + 1
  # size of flow plus size
    flow[ip_attr] = flow[ip_attr] + int(size)
  else:
  # if ip not repeated
  # define initial values of count of ip and size of flow
    ip[ip_attr] = 1
    flow[ip_attr] = int(size)
print(ip)
print(flow)
print(sum/1024/1024)

现在有nginx的访问日志:

[root@weblogic ~]# cat access.log 
192.168.223.1 - - [18/Jul/2017:10:21:25 +0800] "GET /favicon.ico HTTP/1.1" 192.168.223.136:8080 404 24 "http://192.168.223.136:8080/proxy_path/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-"
192.168.223.136 "192.168.223.1" - - [17/Jul/2017:17:06:44 +0800] "GET /index.html HTTP/1.0" "192.168.223.136" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "192.168.223.1"
192.168.223.1 - - [18/Jul/2017:10:30:12 +0800] "GET /proxy_path/index.html HTTP/1.1" 192.168.223.136:8080 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-"
192.168.223.136 "192.168.223.1" - - [18/Jul/2017:10:30:12 +0800] "GET /index.html HTTP/1.0" "192.168.223.137" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "192.168.223.1"
192.168.223.1 - - [18/Jul/2017:10:38:38 +0800] "GET /proxy_path/index.html HTTP/1.1" 192.168.223.136:8080 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-"
192.168.223.136 "192.168.223.1" - - [18/Jul/2017:10:38:38 +0800] "GET /index.html HTTP/1.0" "192.168.223.136:80" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "192.168.223.1"
192.168.223.1 - - [18/Jul/2017:10:45:07 +0800] "GET /proxy_path/index.html HTTP/1.1" 192.168.223.136:8080 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-"
192.168.223.136 "192.168.223.1" - - [18/Jul/2017:10:45:07 +0800] "GET /index.html HTTP/1.0" "192.168.223.136:80" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "192.168.223.1"
192.168.223.1 - - [18/Jul/2017:10:51:25 +0800] "GET /proxy_path/index.html HTTP/1.1" 192.168.223.136:8080 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-"
192.168.223.136 "192.168.223.1" - - [18/Jul/2017:10:51:25 +0800] "GET /index.html HTTP/1.0" "192.168.223.136:80" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "192.168.223.1"

利用python将nginx的ip进行统计

思路:将文件内容一行一行都出来,然后进行字符串strip().split(),得到一个列表,列表的第一个元素就是ip的内容

初始化一个空字典,用key表示ip内容,value表示该ip的个数,如果ip重复了,则将value进行增加:

[root@weblogic ~]# cat nginx.py 
#!/usr/bin/python
#coding=utf8
log_file = "/root/access.log"
ip = {}
with open(log_file) as f:
  for i in f.readlines():
    print i.strip().split()[0]
    ip_attr = i.strip().split()[0] 
    if ip_attr in ip.keys():      # 如果ip存在于字典中,则将该ip的value也就是个数进行增加
      ip[ip_attr] = ip[ip_attr] + 1
    else:
      ip[ip_attr] = 1
print ip

获取执行结果:

[root@weblogic ~]# python nginx.py 
192.168.223.1
192.168.223.136
192.168.223.1
192.168.223.136
192.168.223.1
192.168.223.136
192.168.223.1
192.168.223.136
192.168.223.1
192.168.223.136
{'192.168.223.1': 5, '192.168.223.136': 5}

更多关于Python相关内容可查看本站专题:《Python日志操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
Python自动扫雷实现方法
Jul 25 Python
python异常和文件处理机制详解
Jul 19 Python
Python中将字典转换为列表的方法
Sep 21 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
python re模块findall()函数实例解析
Jan 19 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
jupyter 添加不同内核的操作
Feb 06 Python
python使用torch随机初始化参数
Mar 22 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 #Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 #Python
PyCharm安装第三方库如Requests的图文教程
May 18 #Python
浅谈python中requests模块导入的问题
May 18 #Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 #Python
对python中使用requests模块参数编码的不同处理方法
May 18 #Python
Python3.6连接Oracle数据库的方法详解
May 18 #Python
You might like
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
js实现文本框支持加减运算的方法
2015/08/19 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
使用python爬取B站千万级数据
2018/06/08 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
python关闭占用端口方式
2019/12/17 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
英语演讲稿3分钟
2014/04/29 职场文书
关于读书的演讲稿
2014/05/07 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
毕业证明书
2015/06/19 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang