首页 > 网站 > Nginx > 正文

使用MongoDB分析Nginx日志的方法详解

2024-08-30 12:25:50
字体:
来源:转载
供稿:网友

本文我们要从日志文件中找出IP访问最多的10条记录,然后判断其是否合法,从而采取对应的措施。感兴趣的朋友们一起来看看吧。

日志解析流程

正常情况下,关于Nginx日志解析的流程如下所示:

一般情况下我们会对要解析的日志提前进行切分,常用的方式是按照日期,然后保存1个星期的日志。然后接下来就是日志的解析了,在这个过程中会使用到一些工具或编程语言,例如awk、grep、perl、python。

最后的入库和可视化处理一般视业务而定,没有强制的要求。

日志查询的解决方案

而关于Nginx日志解析的常用解决方案主要有如下4种方式:

    通过awk和grep进行解析 通过Postgresql外联表进行日志的映射 通过Python与MongoDB的组合来进行日志查询 通过ELK这个开源套件进行查询

其中Postgresql外联表的方式在之前公司的时候已经使用过,当然是对公司多个3GB大小的日志进行处理。而第1种和第4种解决方案没有太多的实践的经验,这里我们主要来看第2种解决方案。

日志格式

关于日志解析处理,我们比较常用的方式是使用正则表达式来进行匹配,而常用的1个库是nginxparser,我们可以直接通过pip进行安装。当然还有其他的方式来进行解析,这个要视业务而定。

在日志解析中,比较重要的是日志的格式,默认情况下Nginx的日志格式如下:

log_format main '$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; 

下面我们来看实际业务中的1个应用。之前公司有1个抢微信红包的活动,当然有用户反映好几天都无法抢到1个红包。因此,我们团队成员认为可能在这个过程中存在作弊的现象,因此便决定对Nginx的日志进行解析。

下面是1条真实的日志的记录:

101.226.89.14 - - [10/Jul/2016:07:28:32 +0800] "GET /pocketmoney-2016-XiKXCpCK.html HTTP/1.1" 302 231 "-" "Mozilla/5.0 (Linux; Android 5.1; OPPO R9tm Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036548 Safari/537.36 MicroMessenger/6.3.22.821 NetType/WIFI Language/zh_CN" 

日志分析

通过awk进行解析

接着,我们来看下如何使用awk解析出IP访问最多的记录,关于awk语法可以参考进行学习:

dog@dog-pc:~$ awk '{a[$1]++}END{for(i in a)print i,a[i]}' nginx.log |sort -t ' ' -k2 -rn|head -n 10 111.167.50.208 26794 183.28.6.143 16244 118.76.216.77 9560 14.148.114.213 3609 183.50.96.127 3377 220.115.235.21 3246 222.84.160.249 2905 121.42.0.16 2212 14.208.240.200 2000 14.17.37.143 1993             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表