本文实例讲述了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