亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

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

2024-08-30 12:28:29
字體:
來源:轉載
供稿:網友

本文我們要從日志文件中找出IP訪問最多的10條記錄,然后判斷其是否合法,從而采取對應的措施。感興趣的朋友們一起來看看吧。

日志解析流程

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

mongodb,日志分析,nginx,日志分析系統

一般情況下我們會對要解析的日志提前進行切分,常用的方式是按照日期,然后保存1個星期的日志。然后接下來就是日志的解析了,在這個過程中會使用到一些工具或編程語言,例如awk、grep、perl、python。

最后的入庫和可視化處理一般視業務而定,沒有強制的要求。

日志查詢的解決方案

而關于Nginx日志解析的常用解決方案主要有如下4種方式:

  1. 通過awk和grep進行解析
  2. 通過Postgresql外聯表進行日志的映射
  3. 通過Python與MongoDB的組合來進行日志查詢
  4. 通過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 

默認情況下,awk以空格作為分隔符號,因此$1將獲取到Nginx默認格式中的遠程地址。在這里,我們通過定義1個字段,使用IP作為鍵名,如果對應的鍵名存在則將其數量加1處理。最后我們遍歷這個字典,之后通過數量進行排序,最后通過head獲取10條記錄。
當然這種操作方式是有較大誤差的,因為我們沒有指定狀態碼等其他條件,下面我們來看根據狀態碼和請求方式這2個條件后過濾的數據:

dog@dog-pc:~$ awk '{if($9>0 && $9==200 && substr($6,2)== "GET") a[$1]++}END{for(i in a)print i,a[i]}' nginx.log|sort -t ' ' -k2 -rn|head -n 10 222.84.160.249 2856 183.28.6.143 2534 116.1.127.110 1625 14.208.240.200 1521 14.17.37.143 1335 219.133.40.13 1014 219.133.40.15 994 14.17.37.144 988 14.17.37.161 960 183.61.51.195 944 

這樣我們就可以將這10個IP進行分析,考慮下一步的操作,比如通過iptables組合禁止該IP的訪問或限制其訪問的次數等。

通過Postgresql

通過Postgresql入庫后使用SQL進行查詢的方式可以通過如下2種圖片來查看:

mongodb,日志分析,nginx,日志分析系統

在上圖中主要是查看日志中請求狀態碼的總數量。而下圖是對狀態碼為200的前10條IP的篩選:

mongodb,日志分析,nginx,日志分析系統

可以看到基本上與上面awk解析的方式一致。

通過MongoDB進行查詢

我們知道,MongoDB是1個文檔型數據庫,通過這個數據庫我們輔助解決關系型數據庫一些不太擅長的工作。

在Python中,主要的MongoDB客戶端驅動是PyMongo,我們可以通過如下的方式建立1個連接:

In [1]: from pymongo import MongoClient In [2]: client = MongoClient()

由于這里我們使用的是默認的端口和地址,因此在MongoClient類中不傳入任何的參數。

在這里,我們先說下我們插入到MongoDB中日志的格式:

{  "status": 302, //HTTP狀態碼  "addr": "101.226.89.14", //遠程IP地址  "url": "-",  "req": "/pocketmoney-2016-XiCXCpCK.html", //請求的地址  "agent": "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", //請求的user-agent  "referer": "NetType/WIFI",  "t": "2016/07/10 06:28:32", //請求的時間  "size": 231, //響應的大小  "method": "GET", //請求的方法  "user": "-" //用戶名稱 } 

在這里我們通過Python進行解析后,組裝成如上的格式后插入到MongoDB中,在這里主要用到的是MongoDB文檔對象的insert_one方法插入1條記錄。

db = client['log'] col = db['nginx'] data = {} ... col.insert_one(data)

接著我們開始對上述的記錄進行查詢操作,主要是通過MongoDB提供的map-reduce來實現聚合操作,其對應的Python代碼為:

In [3]: db = client['log'] In [4]: col = db['nginx'] In [5]: pipeline = [  ...: {"$match":{"status":200}},  ...: {"$group":{"_id":"$addr","count":{"$sum":1}}},  ...: {"$sort":{"count":-1}},  ...: {"$limit":10}  ...: ] In [6]: list(col.aggregate(pipeline)) Out[6]: [{u'_id': u'222.84.160.249', u'count': 2856},  {u'_id': u'183.28.6.143', u'count': 2534},  {u'_id': u'116.1.127.110', u'count': 1625},  {u'_id': u'14.208.240.200', u'count': 1521},  {u'_id': u'14.17.37.143', u'count': 1335},  {u'_id': u'219.133.40.13', u'count': 1014},  {u'_id': u'219.133.40.15', u'count': 994},  {u'_id': u'14.17.37.144', u'count': 988},  {u'_id': u'14.17.37.161', u'count': 960},  {u'_id': u'183.61.51.195', u'count': 944}]

可以看到這個過程與之前的2種方式得到的結果是一致的。

關于可視化處理

關于可視化處理,我們可以選擇一些Javascript的庫,例如:

  1. 百度的Echarts
  2. d3.js及其衍生的庫

對于Python,可視化處理可以使用如下的一些庫:

  1. matplotlib
  2. pandas

當然還有一些其他的庫這里就不一一敘述了。

下面是1個使用百度Echart繪制的界面:

mongodb,日志分析,nginx,日志分析系統

看起來還是挺漂亮的。

參考文章:http://api.mongodb/206242.html">mongodb.com/python/current/examples/aggregation.html

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久99热| 精品视频久久久久久| 欧美一乱一性一交一视频| 精品一区电影国产| 国产精品久久久av久久久| 最近中文字幕日韩精品| 成人福利在线视频| 91免费看国产| 亚洲精品美女免费| 色婷婷av一区二区三区久久| 国产一区二区三区高清在线观看| 国产欧洲精品视频| 韩国欧美亚洲国产| 国产精品久久一区主播| 国产精品久久久一区| 久久免费观看视频| 91久久综合亚洲鲁鲁五月天| 日韩av在线网址| 亚洲www永久成人夜色| 欧美亚洲成人xxx| 亚洲一区二区三区四区在线播放| 精品国产精品三级精品av网址| 青青青国产精品一区二区| 日韩精品在线电影| 亚洲欧美日韩在线一区| 国产原创欧美精品| 日韩中文综合网| 色琪琪综合男人的天堂aⅴ视频| 国内揄拍国内精品| 国产精品高清在线观看| 国产精品久久久久999| 日韩**中文字幕毛片| 97人人模人人爽人人喊中文字| 亚洲第一免费播放区| 国产欧美一区二区三区久久人妖| 91免费在线视频| 国产精品国产亚洲伊人久久| 欧美成人性生活| 日韩av中文字幕在线播放| 午夜精品99久久免费| 日韩精品在线播放| 91中文字幕在线| 日韩av在线精品| 亚洲免费视频观看| 2019中文字幕全在线观看| 国产精品亚洲综合天堂夜夜| 黑人狂躁日本妞一区二区三区| 亚洲综合第一页| 中文字幕在线视频日韩| 日韩精品欧美激情| 亚洲第一网站免费视频| 国产精品视频一区二区三区四| 日韩在线视频播放| 久久在线视频在线| 亚洲成人激情小说| 欧美黄色片在线观看| 日本三级韩国三级久久| 最新国产成人av网站网址麻豆| 国产精品久久久久久久久久久久久久| 精品视频—区二区三区免费| 亚洲最大的成人网| 欧美精品在线视频观看| 久久人人爽人人爽人人片亚洲| 精品国产拍在线观看| 日韩av综合网| www.日韩.com| 欧美黑人又粗大| 国产精品嫩草影院久久久| 日韩成人中文字幕在线观看| 久久久久久久成人| 精品国产精品三级精品av网址| 77777少妇光屁股久久一区| 国产精品高清免费在线观看| 欧美麻豆久久久久久中文| 亚洲精品一区二三区不卡| 91在线免费观看网站| 久久久久久久久久久免费| 亚洲免费一在线| 欧美成人中文字幕在线| 一本一本久久a久久精品综合小说| 尤物yw午夜国产精品视频| 亚洲国产精品悠悠久久琪琪| 欧美成人精品在线观看| 欧美理论电影在线观看| 91久久久久久久久久久久久| 亚洲а∨天堂久久精品喷水| 日韩av电影在线免费播放| 国产精品久久久久久久久久东京| 亚洲国产三级网| 欧美色xxxx| 91免费人成网站在线观看18| 日韩av中文在线| 欧美一区三区三区高中清蜜桃| 久久天天躁日日躁| 欧美日韩人人澡狠狠躁视频| 91久久精品在线| 午夜精品蜜臀一区二区三区免费| 亚洲视频欧洲视频| 69av在线播放| 韩国精品美女www爽爽爽视频| 欧美在线视频网| 91在线观看免费| 97视频在线观看免费高清完整版在线观看| 91精品国产综合久久香蕉最新版| 91亚洲精品久久久| 中文字幕亚洲天堂| 欧美精品videosex性欧美| 欧美黑人巨大精品一区二区| 欧美激情第6页| 亚洲精品欧美极品| 国产一区二区黄| 亚洲综合中文字幕在线| 欧美性生交大片免网| 国产精品女主播视频| 97久久国产精品| 亚洲最大福利网站| 精品少妇v888av| 亚洲欧美在线一区| 精品国产乱码久久久久久婷婷| 亚洲第一页在线| 少妇高潮久久久久久潘金莲| 91在线中文字幕| 91在线视频精品| 国产精品网红福利| 欧美性生交大片免网| 91九色视频在线| 18久久久久久| 欧美视频免费在线观看| 欧洲成人在线观看| 亚洲欧美日韩精品久久奇米色影视| 久久色免费在线视频| 亚洲亚裔videos黑人hd| 欧美精品日韩三级| 成人黄色在线播放| 精品一区精品二区| 色婷婷av一区二区三区在线观看| 久久精品视频在线| 国产精品三级在线| 久久久国产视频| 国产精品福利小视频| 欧美性感美女h网站在线观看免费| 成人黄色av网站| 热门国产精品亚洲第一区在线| 欧美色道久久88综合亚洲精品| 欧美精品一区二区三区国产精品| 欧美最猛性xxxx| 一本色道久久综合狠狠躁篇的优点| 亚洲欧美国产va在线影院| 成人精品在线视频| 国产精品精品视频一区二区三区| 91在线观看免费网站| 狠狠色狠狠色综合日日五| 国产精品视频一| 日韩精品免费在线视频| 91精品久久久久久久久久另类| 亚洲日本成人女熟在线观看| 97香蕉久久夜色精品国产| 久久99精品视频一区97| 国产在线播放不卡| 久久久精品一区| 国模精品系列视频| 最近的2019中文字幕免费一页| 自拍亚洲一区欧美另类| 国产精品一二三在线|