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编写一个简单的Lisp解释器的教程
Apr 03 Python
Python中几个比较常见的名词解释
Jul 04 Python
Python列表删除的三种方法代码分享
Oct 31 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
详解Django admin高级用法
Nov 06 Python
PyCharm 专业版安装图文教程
Feb 20 Python
python三引号如何输入
Jul 06 Python
浅析Python 序列化与反序列化
Aug 05 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
jupyter notebook快速入门及使用详解
Nov 13 Python
Python基于unittest实现测试用例执行
Nov 25 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
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
Tornado 多进程实现分析详解
2018/01/12 Python
详解Python学习之安装pandas
2019/04/16 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python else语句在循环中的运用详解
2020/07/06 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
python实现学生管理系统开发
2020/07/24 Python
Django框架请求生命周期实现原理
2020/11/13 Python
详解rem 适配布局
2018/10/31 HTML / CSS
Linux机考试题
2015/07/17 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
安全生产汇报材料
2014/02/17 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
年会主持人开场白台词
2015/05/29 职场文书
如何写观后感
2015/06/19 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电