一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python正則分析nginx的訪問日志

python正則分析nginx的訪問日志

2020-09-18 10:11mindg Python

最近工作中遇到一個需求,是要分析nginx的訪問日志,覺著利用python來實現(xiàn)比較合適,所以下面這篇文章主要介紹了利用python正則如何分析nginx的訪問日志,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

本文的腳本是分析nginx的訪問日志, 主要為了檢查站點uri的訪問次數(shù)的,檢查的結果會提供給研發(fā)人員做參考,因為談到分析嘛,那肯定要用到正則表達式了,所以請沒有接觸過正則的小伙伴自行補腦,因為涉及正則的內容,實在沒法展開寫,正則的內容太過龐大,根本不是一篇兩篇能寫清楚的。

開始前,我們先看看要分析的日志結構:

?
1
2
127.0.0.1 - - [19/Jun/2012:09:16:22 +0100] "GET /GO.jpg HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; SE 2.X MetaSr 1.0)"
127.0.0.1 - - [19/Jun/2012:09:16:25 +0100] "GET /Zyb.gif HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQDownload 711; SV1; .NET4.0C; .NET4.0E; 360SE)"

這是修改過的日志內容,敏感內容都以刪除或替換了,不過不影響我們的分析結果,當然格式什么的這都不重要,Nginx訪問日志是可以自定義的,每家公司可能都會稍有不同,所以要能理解腳本內容,并通過自己修改應用到了自己工作中才是重點,我給的日志格式也就是個參考,我打賭你在你公司服務器上看到的日志格式肯定跟我的格式不一樣, 看完日志格式,我們開始要寫我們的腳本了

我先貼代碼,稍后解釋:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import re
from operator import itemgetter
 
def parser_logfile(logfile):
 pattern = (r''
   '(\d+.\d+.\d+.\d+)\s-\s-\s' #IP address
   '\[(.+)\]\s' #datetime
   '"GET\s(.+)\s\w+/.+"\s' #requested file
   '(\d+)\s' #status
   '(\d+)\s' #bandwidth
   '"(.+)"\s' #referrer
   '"(.+)"' #user agent
  )
 fi = open(logfile, 'r')
 url_list = []
 for line in fi:
  url_list.append(re.findall(pattern, line))
 fi.close()
 return url_list
 
def parser_urllist(url_list):
 urls = []
 for url in url_list:
  for r in url:
   urls.append(r[5])
 return urls
 
def get_urldict(urls):
 d = {}
 for url in urls:
  d[url] = d.get(url,0)+1
 return d
 
def url_count(logfile):
 url_list = parser_logfile(logfile)
 urls = parser_urllist(url_list)
 totals = get_urldict(urls)
 return totals
 
if __name__ == '__main__':
 urls_with_counts = url_count('example.log')
 sorted_by_count = sorted(urls_with_counts.items(), key=itemgetter(1), reverse=True)
 print(sorted_by_count)

腳本解釋,parser_logfile()函數(shù)功能是分析日志,返回匹配的行列表,正則部分就不解釋了,大家看注釋應該知道它是匹配什么內容的,parser_urllist()函數(shù)功能是將獲取用戶訪問的url,get_urldict()函數(shù)功能是返回一個字典,以url為鍵,如果鍵相同值增1,返回的字典是每個url和最大的訪問次數(shù),url_count()函數(shù)功能就是調用了之前定義的函數(shù),主函數(shù)部分,就說說itemgetter,它可以實現(xiàn)按指定元素進行排序,舉例就明白了:

?
1
2
3
4
5
6
7
8
>>> from operator import itemgetter
>>> a=[('b',2),('a',1),('c',0)]
>>> s=sorted(a,key=itemgetter(1))
>>> s
[('c', 0), ('a', 1), ('b', 2)]
>>> s=sorted(a,key=itemgetter(0))
>>> s
[('a', 1), ('b', 2), ('c', 0)]

reverse=True參數(shù)表示降序排序,就是從大到小排序,腳本運行結果:

?
1
[('http://domain.com/htm_data/7/1206/758536.html', 141), ('http://domain.com/?q=node&page=12', 3), ('http://website.net/htm_data/7/1206/758536.html', 1)]

總結

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 撕开老师的丝袜白丝扒开粉嫩的小 | 免费网址视频在线看 | 99久女女精品视频在线观看 | 国产香蕉国产精品偷在线观看 | 99ri在线精品视频在线播放 | 久久学生精品国产自在拍 | 成人精品mv视频在线观看 | 成人观看免费观看视频 | 午夜福利院电影 | 师尊被各种play打屁股 | 日韩欧美一区二区在线观看 | 91九色在线视频 | 亚洲 欧美 国产 在线 日韩 | 十六一下岁女子毛片免费 | 草莓在线 | 日本男男漫画 | 色综合网天天综合色中文男男 | 日本中文字幕二区三区 | 免费高清资源黄网站在线观看 | 免费视频一级片 | 久久成人国产精品一区二区 | 3d蒂法受辱在线播放 | youzljzljzljzlj96 | 男同gay作爰视频网站 | 日本不卡免费新一二三区 | 天天干天天日天天射天天操毛片 | 全彩孕交漫画福利啪啪吧 | 视频在线观看高清免费看 | 欧美精品一国产成人性影视 | 丝袜足控免费网站xx动漫漫画 | 欧美男同猛男 videos 同性 | 色猪视频 | 日本高清在线播放一区二区三区 | 爽好大快深点一视频 | 波多野结衣xxxxx在线播放 | 日本视频高清 | 日韩欧美高清视频 | 亚洲乱码一二三四五六区 | 日韩精选| 歪歪视频在线播放无遮挡 | 免费国产成人 |