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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • 详解在使用CDN加速时Nginx获取用户IP的配置方法

    关于CDN 内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快.更可靠地将音乐.图片.视频.应用程序及其他文件发送给用户,来提供高性能.可扩展性及低成本的网络内容传递给用户. 内容分发网络的总承载量可以比单一骨干最大的带宽还要大.这使得内容分发网络可以承载的用户数量比起传统单一服务器多.也就是说,若把有100Gbps处理能力的服务器放在只

  • 使用nginx同域名下部署多个vue项目并使用反向代理的方法

    效果 目前有 2 个项目(project1, project2),还有一个 nginx 自带的 index.html,我添加了对应的链接代码(稍后粘贴出来),为了统一管理子项目的路由. 我期望实现下面的效果(假设 ip: localhost,port: 8080): http://localhost:8080/ 进入最外层的 index.html http://localhost:8080/project1 进入项目一 http://localhost:8080/project2 进入项目二 废

  • 详解Nginx 虚拟主机配置的三种方式(基于IP)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于端口) https://www.jb51.net/article/14977.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 1.基于IP的虚拟主机配置 如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上. 1.1

  • nginx反向代理服务因配置文件错误导致访问资源时出现404

    最近测试手上的项目,出现访问服务器的资源出现404的错误,这个是不应该会出现的问题,因为在此之前经过测试是没问题,下面是详细情况: 1)公司的服务器都是做过nginx反向代理 2)访问路径是在tomcat中配置过虚拟路径 3)前几天服务器有做过磁盘恢复 当然如果你也遇到过这关问题,没解决的可以参考一下,如果解决了就看一下我的解决方案是否有问题,本人刚接触Nginx不深: 出现这个问题,我首先考虑应该是路径出现了问题,然后去修改tomcat中的配置文件server.xml中的虚拟路径:然后再测试,

  • 基于Nginx 反向代理获取真实IP的问题详解

    一.前言 前文Nginx 解决WebApi跨域二次请求以及Vue单页面问题 当中虽然解决了跨域问题带来的二次请求,但也产生了一个新的问题,就是如果需要获取用户IP的时候,获取的IP地址总是本机地址. 二.原因 由于Nginx反向代理后,在应用中取得的IP都是反向代理服务器的IP,取得的域名也是反向代理配置的Url的域名. 三.解决方案 解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中.同时,也要修改获取IP地址的方法. 但是需要注意的是,通

  • nginx代理多次302的解决方法(nginx Follow 302)

    用proxy_intercept_errors和recursive_error_pages代理多次302 302是HTTP协议中的一个经常被使用状态码,是多种重定向方式的一种,其语义经常被解释为"Moved Temporarily".这里顺带提一下,现实中用到的302多为误用(与303,307混用),在HTTP/1.1中,它的语义为"Found". 302有时候很明显,有时候又比较隐蔽.最简单的情况,是当我们在浏览器中输入一个网址A,然后浏览器地址栏会自动跳到B,进

  • nginx经过多层代理后获取真实来源ip过程详解

    问题 nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址 解决方案: 在 http 模块 加 set_real_ip_from 172.17.10.125; #上一层代理IP地址 real_ip_header X-Forwarded-For; real_ip_recursive on; 添加之后启动nginx报错: nginx: [emerg] unknown directiv

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

    本文实例讲述了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数量(若重复则只增加数量) fl

  • 微信公众号平台接口开发 获取微信服务器IP地址方法解析

    官方说明 目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用 访问接口 修改WeCharBase.cs,新增以下2个方法 public static string ServerIPs { get { return GetServerIPs(); } } /// <summary>获取所有服务器IP</summary> /// <returns></returns> private static string GetServerIPs

  • Python爬虫获取整个站点中的所有外部链接代码示例

    收集所有外部链接的网站爬虫程序流程图 下例是爬取本站python绘制条形图方法代码详解的实例,大家可以参考下. 完整代码: #! /usr/bin/env python #coding=utf-8 import urllib2 from bs4 import BeautifulSoup import re import datetime import random pages=set() random.seed(datetime.datetime.now()) #Retrieves a list

  • Python批量获取并保存手机号归属地和运营商的示例

    从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾. import requests import json import xlrd from xlutils.copy import copy host = 'https://cx.shouji.360.cn/phonearea.php' # excel文件路径 file_path = "F:\\temp.xlsx" # 新文件路径 new_file_path = "F:\\temp(含

  • python使用在线API查询IP对应的地理位置信息实例

    这篇文章中的内容是来源于去年我用美国的VPS搭建博客的初始阶段,那是有很多恶意访问,我就根据access log中的源IP来进行了很多统计,同时我也将访问量最高的恶意访问的源IP拿来查询其地理位置信息.所以,我就用到了根据IP查询地理位置信息的一些东西,现在将这方面积累的一点东西共享出来. 根据IP查询所在地.运营商等信息的一些API如下(根据我有限的一点经验):1. 淘宝的API(推荐):http://ip.taobao.com/service/getIpInfo.php?ip=110.84.

  • Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例

    本文实例讲述了Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能.分享给大家供大家参考,具体如下: 因为需要使用叶子节点的路径来作为特征,但是原始的lxml模块解析之后得到的却是整个页面中所有节点的xpath路径,不是我们真正想要的形式,所以就要进行相关的处理才行了,差了很多网上的博客和文档也没有找到一个是关于输出html中全部叶子节点的API接口或者函数,也可能是自己没有那份耐心,没有找到合适的资源,只好放弃了寻找,但是这并不说明没有其他的方法了,在对页面全部节点

  • Python实现的读取电脑硬件信息功能示例

    本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天,用python试了一下,简单多了.分享一下: 首先安装wmi库,wmi是一种规范和基础结构,通过它可以访问.配置.管理和监视几乎所有的Windows资源.大多用户习惯于使用众多的图形化管理工 具来管理Windows资源,在wmi之前这些工具都是通过 Win32应用程序编程接口来访问和管理Window

  • Android开发使用json实现服务器与客户端数据的交互功能示例

    本文实例讲述了Android开发使用json实现服务器与客户端数据的交互功能.分享给大家供大家参考,具体如下: 第一步:写一个远程查询工具类,使用单例模式 /** * 查询远程服务器的工具 * @author chen.lin * */ public class QueryUtils { //private static final String TAG = "CommonUtils"; private static QueryUtils instance; private Share

  • 微信小程序ajax实现请求服务器数据及模版遍历数据功能示例

    本文实例讲述了微信小程序ajax实现请求服务器数据及模版遍历数据功能.分享给大家供大家参考,具体如下: 昨天下载了一个微信小程序的开发者工具,大概看了一下文档,简单的用他的方法实现了ajax请求. 微信小程序文档地址: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1474632113_xQVCl 头部标题和底部tab配置都在 app.json文件中,底部tab位最少两个,最多五个.下面是app.json文件代码和相关注释 { &qu

  • Python爬虫实现的根据分类爬取豆瓣电影信息功能示例

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius.Zhao import json from urllib.parse import quote from urllib.request import urlopen from urllib.reque

随机推荐