python分析nginx日志的ip,url,status-创新互联

Python 脚本如下:

10年积累的成都网站建设、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有太谷免费网站建设让你可以放心的选择与我们合作。#!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'lvnian' #!/usr/bin env python # coding: utf-8 import MySQLdb as mysql import sys, os db = mysql.connect(user="root",passwd="xxxxx@2015",db="intest",host="192.168.10.12") #数据库连接信息 db.autocommit(True) cur = db.cursor() cur.execute('set names utf8') dict_list = {} with open('access.log') as logfin:     for line in logfin:         arr = line.split(' ')         # 获取ip url 和status         ip = arr[0]         url = arr[6]         status = arr[8]         # ip url 和status当key,每次统计+1         dict_list[(ip,url,status)] = dict_list.get((ip,url,status),0)+1     # 转换成列表     ip_list = [(k[0],k[1],k[2],v) for k,v in dict_list.items()]     # 按照统计数量排序,排序后保存到数据库。     for insert in sorted(ip_list,key=lambda x:x[3],reverse=True):#如果只想提取前十行的话可以[:10]即可。         print insert  #测试用的,可以不要。整个功能是输出一行,然后保存到数据库。         sql = 'insert loginfo values ("%s","%s","%s","%s")' % insert         print sql         cur.execute(sql)

创建对应的表(在上一篇的基础之上)

python分析nginx日志的ip(来源)

use intest; show tables;  CREATE TABLE `loginfo` (   `ip` text DEFAULT NULL,   `url` longtext DEFAULT NULL,   `status` varchar(200) DEFAULT NULL,   `count_num` varchar(200) DEFAULT NULL );

脚本执行后数据库内看到的结果如下:

mysql> select * from loginfo where count_num >3 limit 5 ; +----------------+-----------------------+--------+-----------+ | ip             | url                   | status | count_num | +----------------+-----------------------+--------+-----------+ | 121.42.0.85    | /                     | 200    | 39        | | 121.42.0.37    | /                     | 403    | 34        | | 121.42.0.39    | /                     | 403    | 34        | | 222.95.248.220 | HTTP://www.baidu.com/ | 200    | 26        | | 23.251.49.10   | www.baidu.com:443     | 400    | 21        | +----------------+-----------------------+--------+-----------+ 5 rows in set (0.00 sec) mysql>

添加一个时间字段脚本改为如下

#!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'lvnian' #!/usr/bin env python # coding: utf-8 import MySQLdb as mysql import sys, os,time import datetime addtime = datetime.datetime.now() db = mysql.connect(user="root",passwd="xxxx@2015",db="intest",host="192.168.10.12") #数据库连接信息 db.autocommit(True) cur = db.cursor() cur.execute('set names utf8') dict_list = {} with open('access.log') as logfin:     for line in logfin:         arr = line.split(' ')         # 获取ip url 和status         ip = arr[0]         url = arr[6]         status = arr[8]         # ip url 和status当key,每次统计+1         dict_list[(ip,url,status)] = dict_list.get((ip,url,status),0)+1     # 转换成列表     ip_list = [(k[0],k[1],k[2],v,addtime) for k,v in dict_list.items()]     # 按照统计数量排序,排序后保存到数据库。     for insert in sorted(ip_list,key=lambda x:x[3],reverse=True):#如果只想提取前十行的话可以[:10]即可。         print insert  #测试用的,可以不要。整个功能是输出一行,然后保存到数据库。         sql = 'insert loginfo values ("%s","%s","%s","%s","%s")' % insert         print sql         cur.execute(sql) #到数据库输出查询如下123.125.160.217 这个ip经常乱***别的服务器曝光一下,如见此ip访问log,请直接拨打911

数据库修改

数据库增加一个字段 alter table loginfo add time datetime not Null; or重新建库 CREATE TABLE `loginfo` (  `ip` text,  `url` longtext, `status` varchar(200) DEFAULT NULL,  `count_num` varchar(200) DEFAULT NULL, `time` datetime NOT NULL  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页名称:python分析nginx日志的ip,url,status-创新互联
分享路径:http://ybzwz.com/article/esdcd.html