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程序运行效率的6个方法
Mar 31 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
django数据库自动重连的方法实例
Jul 21 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
Django-imagekit的使用详解
Jul 06 Python
python else语句在循环中的运用详解
Jul 06 Python
分享一个python的aes加密代码
Dec 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伪静态页面函数附使用方法
2008/06/20 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
javascript回到顶部特效
2016/07/30 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python文件和流(实例讲解)
2017/09/12 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
python如何爬取网页中的文字
2020/07/28 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
2013的个人自我评价
2013/12/26 职场文书
考察现实表现材料
2014/05/19 职场文书
班子四风对照检查材料
2014/08/21 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
十二月早安励志心语大全
2019/12/03 职场文书