Python实现获取nginx服务器ip及流量统计信息功能示例
本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:
#!/usr/bin/python #coding=utf8 log_file="/usr/local/nginx/logs/access.log" withopen(log_file)asf: contexts=f.readlines() #defineipdict### ip={}#key为ip信息,value为ip数量(若重复则只增加数量) flow={}#key为ip信息,value为流量总和 sum=0 forlineincontexts: #countrowsizeofflow size=line.split()[9] #printip ip_attr=line.split()[0] #counttotalsizeofflow sum=int(size)+sum ifip_attrinip.keys():#ifiprepeated,如果ip重复就将ip数量加一,而流量继续叠加 #countofipplus1 ip[ip_attr]=ip[ip_attr]+1 #sizeofflowplussize flow[ip_attr]=flow[ip_attr]+int(size) else: #ifipnotrepeated #defineinitialvaluesofcountofipandsizeofflow ip[ip_attr]=1 flow[ip_attr]=int(size) print(ip) print(flow) print(sum/1024/1024)
现在有nginx的访问日志:
[root@weblogic~]#cataccess.log 192.168.223.1--[18/Jul/2017:10:21:25+0800]"GET/favicon.icoHTTP/1.1"192.168.223.136:808040424"http://192.168.223.136:8080/proxy_path/index.html""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""-" 192.168.223.136"192.168.223.1"--[17/Jul/2017:17:06:44+0800]"GET/index.htmlHTTP/1.0""192.168.223.136"3040"-""Mozilla/5.0(WindowsNT10.0;WOW64;Trident/7.0;rv:11.0)likeGecko""192.168.223.1" 192.168.223.1--[18/Jul/2017:10:30:12+0800]"GET/proxy_path/index.htmlHTTP/1.1"192.168.223.136:80803040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""-" 192.168.223.136"192.168.223.1"--[18/Jul/2017:10:30:12+0800]"GET/index.htmlHTTP/1.0""192.168.223.137"3040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""192.168.223.1" 192.168.223.1--[18/Jul/2017:10:38:38+0800]"GET/proxy_path/index.htmlHTTP/1.1"192.168.223.136:80803040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""-" 192.168.223.136"192.168.223.1"--[18/Jul/2017:10:38:38+0800]"GET/index.htmlHTTP/1.0""192.168.223.136:80"3040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""192.168.223.1" 192.168.223.1--[18/Jul/2017:10:45:07+0800]"GET/proxy_path/index.htmlHTTP/1.1"192.168.223.136:80803040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""-" 192.168.223.136"192.168.223.1"--[18/Jul/2017:10:45:07+0800]"GET/index.htmlHTTP/1.0""192.168.223.136:80"3040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""192.168.223.1" 192.168.223.1--[18/Jul/2017:10:51:25+0800]"GET/proxy_path/index.htmlHTTP/1.1"192.168.223.136:80803040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""-" 192.168.223.136"192.168.223.1"--[18/Jul/2017:10:51:25+0800]"GET/index.htmlHTTP/1.0""192.168.223.136:80"3040"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36""192.168.223.1"
利用python将nginx的ip进行统计
思路:将文件内容一行一行都出来,然后进行字符串strip().split(),得到一个列表,列表的第一个元素就是ip的内容
初始化一个空字典,用key表示ip内容,value表示该ip的个数,如果ip重复了,则将value进行增加:
[root@weblogic~]#catnginx.py #!/usr/bin/python #coding=utf8 log_file="/root/access.log" ip={} withopen(log_file)asf: foriinf.readlines(): printi.strip().split()[0] ip_attr=i.strip().split()[0] ifip_attrinip.keys():#如果ip存在于字典中,则将该ip的value也就是个数进行增加 ip[ip_attr]=ip[ip_attr]+1 else: ip[ip_attr]=1 printip
获取执行结果:
[root@weblogic~]#pythonnginx.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程序设计有所帮助。