发表于: 2018-07-15 22:23:22
1 1034
拿到问题,先尝试去整理解决问题的思路,有了思路在按步骤解决每个具体的环节。通过百度后,认为解决这个问题主要有以下几个关键点:.
1.如何用Python访问到Nginx的日志?
2.如何用Python统计出每个请求的访问次数?
3.如何用Python将每天前十个请求的信息通过邮件发出?
先从第一个问题入手。因为从来接接触过Nginx,所以第一个问题就是搞清楚Nginx以及它的日志分别是什么?如何从哪里获取?
通过百度Nginx日志,得到如下信息:
nginx的log日志分为access log 和 error log,其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息。error log 则是记录服务器错误日志。
access_log日志的存储位置:/usr/local/nginx/log/access.log
error_log位置:/usr/local/nginx/log/error.log
access.log的默认格式如下:
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_response_time $request_time ';
以下是一段真实的log行:100.109.195.91 - - [17/Feb/2017:00:08:11 +0800] "GET /data/upload/shop/common/loading.gif HTTP/1.0" 200 134 "http://www.mall121.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0; Windows NT 6.1; SLCC2 2.5.5231; .NET CLR 2.0.50727; .NET CLR 4.1.23457; .NET CLR 4.0.23457; Media Center PC 6.0; MS-WK 8)" "140.205.201.12"
到此Nginx基本搞清楚。
接下来使用Python的文件读取命令获得日志内容:
因为是在windows上练习,先暂时简化日志读取,将日志文件放入项目目录。
获取内容后,使用正则表达式过滤出来访者IP地址。使用re模块可以完成。最终获取的内容存入返回的元组中。
nginx_log='access.log'
string=r'((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)'
with open( nginx_log )as file_object:
for line in file_object:
tuple1=re.match(string,line)
按照要求,接下来有两个问题要处理:
- 1.将元组的前10个访问者地址通过邮件发送出去。
- 2.统计所有来访者及其数量。可以通过mysql来实现。
- Python的smtplib模块之前完全没接触过,尝试了一段代码,结果邮件无法正常发送,目前还没找到问题所在。代码就不放了。
- 同样Python的Mysql接口也还没接触过明今天就先到此了
- 明天写mysql的接口和邮件发送。
评论