发表于: 2018-07-15 22:23:22

1 1032


拿到问题,先尝试去整理解决问题的思路,有了思路在按步骤解决每个具体的环节。通过百度后,认为解决这个问题主要有以下几个关键点:.

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. 1.将元组的前10个访问者地址通过邮件发送出去。
  2. 2.统计所有来访者及其数量。可以通过mysql来实现。

  3. Python的smtplib模块之前完全没接触过,尝试了一段代码,结果邮件无法正常发送,目前还没找到问题所在。代码就不放了。
  4. 同样Python的Mysql接口也还没接触过明今天就先到此了
  5. 明天写mysql的接口和邮件发送。

返回列表 返回列表
评论

    分享到