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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 Python
Python实现批量转换文件编码的方法
Jul 28 Python
python黑魔法之参数传递
Feb 12 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
通过python3实现投票功能代码实例
Sep 26 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
Python日志器使用方法及原理解析
Sep 27 Python
PyQt5爬取12306车票信息程序的实现
May 14 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP4中实现动态代理
2006/10/09 PHP
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP 简单日历实现代码
2009/10/28 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python中对列表排序实例
2015/01/04 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
小学信息技术教学反思
2014/02/10 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
2015年元旦活动总结
2014/05/09 职场文书
品质口号大全
2014/06/17 职场文书
五年级作文之劳动作文
2019/11/12 职场文书