本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#!/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的访问日志:
1
2
3
4
5
6
7
8
9
10
11
|
[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进行增加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[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
|
获取执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
|
[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程序设计有所帮助。
原文链接:http://www.cnblogs.com/jsonhc/p/7280293.html