国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python正則分析nginx的訪問日志

2019-11-25 16:24:11
字體:
供稿:網(wǎng)友

前言

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

開始前,我們先看看要分析的日志結(jié)構(gòu):

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)"

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

我先貼代碼,稍后解釋:

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

>>> 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ù)表示降序排序,就是從大到小排序,腳本運(yùn)行結(jié)果:

[('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)]

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涪陵区| 昭平县| 鸡西市| 太和县| 桑日县| 隆林| 通许县| 贵德县| 浮梁县| 金阳县| 巴塘县| 铁力市| 新晃| 康保县| 荣成市| 天台县| 永福县| 邵武市| 胶州市| 涟水县| 河源市| 保靖县| 黄山市| 邢台市| 吴旗县| 辉南县| 峨眉山市| 衡山县| 乐至县| 丽水市| 淮阳县| 库车县| 涡阳县| 武邑县| 南昌市| 改则县| 宽甸| 云霄县| 郑州市| 博野县| 宁阳县|