本文我們要從日志文件中找出IP訪問最多的10條記錄,然后判斷其是否合法,從而采取對應的措施。感興趣的朋友們一起來看看吧。
日志解析流程
正常情況下,關于Nginx日志解析的流程如下所示:
一般情況下我們會對要解析的日志提前進行切分,常用的方式是按照日期,然后保存1個星期的日志。然后接下來就是日志的解析了,在這個過程中會使用到一些工具或編程語言,例如awk、grep、perl、python。
最后的入庫和可視化處理一般視業務而定,沒有強制的要求。
日志查詢的解決方案
而關于Nginx日志解析的常用解決方案主要有如下4種方式:
其中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
新聞熱點
疑難解答