python實(shí)現(xiàn)的分析并統(tǒng)計(jì)nginx日志數(shù)據(jù)功能示例
本文實(shí)例講述了python實(shí)現(xiàn)的分析并統(tǒng)計(jì)nginx日志數(shù)據(jù)功能。分享給大家供大家參考,具體如下:
利用python腳本分析nginx日志內(nèi)容,默認(rèn)統(tǒng)計(jì)ip、訪(fǎng)問(wèn)url、狀態(tài),可以通過(guò)修改腳本統(tǒng)計(jì)分析其他字段。
一、腳本運(yùn)行方式
python count_log.py -f med.xxxx.com.access.log
二、腳本內(nèi)容
#!/usr/bin/python # -*- coding: utf-8 -*- """ 1.分析日志,每行日志按空格切分,取出需要統(tǒng)計(jì)的相應(yīng)字段,作為字典的key,遍歷相加 2.使用到字典的get方法,通過(guò)定義默認(rèn)值,避免miss key的錯(cuò)誤 3.使用列表解析表達(dá)式 4.使用sorted函數(shù)排序列表 5.使用argparse傳入?yún)?shù) 6.nginx日志格式: log_format access_log '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$request_time"' '"$upstream_addr"' '"$upstream_response_time"'; 7.日志內(nèi)容: 222.xx.xxx.15 - - [07/Dec/2016:00:03:27 +0800] GET /app/xxx/xxx.apk HTTP/1.0 "304" 0 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "0.055""-""-" 8.腳本運(yùn)行結(jié)果: ('106.xx.xx.46', '/gateway/xxx/user/mxxxxx/submitSelfTestOfSingleQuestion', '"200"', 299) ('182.1xx.xx.83', '/', '"200"', 185) ('222.xx.1xx.15', '/', '"200"', 152) ('125.xx.2xx.58', '/', '"200"', 145) """ import argparse def count_log(filename, num): try: with open(filename) as f: dic = {} for l in f: if not l == '\n': # 判斷空白行 arr = l.split(' ') ip = arr[0] url = arr[6] status = arr[8] # 字典的key是有多個(gè)元素構(gòu)成的元組 # 字典的get方法,對(duì)取的key的值加1,第一次循環(huán)時(shí)由于字典為空指定的key不存在返回默認(rèn)值0,因此讀第一行日志時(shí),統(tǒng)計(jì)結(jié)果為1 dic[(ip, url, status)] = dic.get((ip, url, status), 0) + 1 # 從字典中取出key和value,存在列表中,由于字典的key比較特殊是有多個(gè)元素構(gòu)成的元組,通過(guò)索引k[#]的方式取出key的每個(gè)元素 dic_list = [(k[0], k[1], k[2], v) for k, v in dic.items()] for k in sorted(dic_list, key=lambda x: x[3], reverse=True)[:num]: print(k) except Exception as e: print("open file error:", e) if __name__ == '__main__': parser = argparse.ArgumentParser(description="傳入日志文件") # 定義必須傳入日志文件,使用格式-f filename parser.add_argument('-f', action='store', dest='filename', required=True) # 通過(guò)-n傳入數(shù)值,取出最多的幾行,默認(rèn)取出前10 parser.add_argument('-n', action='store', dest='num', type=int, required=False, default=10) given_args = parser.parse_args() filename = given_args.filename num = given_args.num count_log(filename, num)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python日志操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Docker構(gòu)建python Flask+ nginx+uwsgi容器
- 淺析python 定時(shí)拆分備份 nginx 日志的方法
- nginx搭建基于python的web環(huán)境的實(shí)現(xiàn)步驟
- python監(jiān)控nginx端口和進(jìn)程狀態(tài)
- Python開(kāi)發(fā)之Nginx+uWSGI+virtualenv多項(xiàng)目部署教程
- Python運(yùn)維自動(dòng)化之nginx配置文件對(duì)比操作示例
- 詳解python使用Nginx和uWSGI來(lái)運(yùn)行Python應(yīng)用
- Python的Flask框架及Nginx實(shí)現(xiàn)靜態(tài)文件訪(fǎng)問(wèn)限制功能
- 在阿里云服務(wù)器上配置CentOS+Nginx+Python+Flask環(huán)境
- python 檢測(cè)nginx服務(wù)郵件報(bào)警的腳本
相關(guān)文章
python獲取微信企業(yè)號(hào)打卡數(shù)據(jù)并生成windows計(jì)劃任務(wù)
由于公司的系統(tǒng)用的是Java版本,開(kāi)通了企業(yè)號(hào)打卡之后又沒(méi)有預(yù)算讓供應(yīng)商做數(shù)據(jù)對(duì)接,所以只能自己搗鼓這個(gè),以下是個(gè)人設(shè)置的一些內(nèi)容,僅供大家參考2019-04-04Python網(wǎng)絡(luò)編程之網(wǎng)絡(luò)與通信介紹
這篇文章主要介紹了Python網(wǎng)絡(luò)編程之網(wǎng)絡(luò)與通信介紹,計(jì)算機(jī)網(wǎng)絡(luò)就是分布在不同的地區(qū)的計(jì)算機(jī)與專(zhuān)門(mén)的外部設(shè)備通信線(xiàn)路互聯(lián)在一起,2023-08-08
成為一個(gè)功能強(qiáng),規(guī)模大的網(wǎng)絡(luò)系統(tǒng),本期就主要介紹網(wǎng)絡(luò)與通信的相關(guān)知識(shí)和原理,需要的朋友可以參考下python簡(jiǎn)單爬蟲(chóng)--get方式詳解
本篇文章介紹了python爬蟲(chóng)中g(shù)et和post方法介紹以及cookie作用,對(duì)此有興趣的朋友學(xué)習(xí)下,希望能夠給你帶來(lái)幫助2021-09-09Python中的多行注釋文檔編寫(xiě)風(fēng)格匯總
在Python中利用多行注釋編寫(xiě)小型的程序文檔說(shuō)明非常方便,而約定俗成的格式也多種多樣,這里我們就進(jìn)行一下最常見(jiàn)的Python中的多行注釋文檔編寫(xiě)風(fēng)格匯總:2016-06-06Python學(xué)習(xí)之虛擬環(huán)境原理詳解
本文將帶大家學(xué)習(xí)一下虛擬環(huán)境的相關(guān)知識(shí),虛擬環(huán)境對(duì)于剛剛使用Python的初學(xué)者來(lái)說(shuō)使用的概率可能會(huì)比較低,但是我們依然要對(duì)它有一定的了解。快跟隨小編一起學(xué)習(xí)一下吧2022-03-03Python求兩個(gè)圓的交點(diǎn)坐標(biāo)或三個(gè)圓的交點(diǎn)坐標(biāo)方法
今天小編就為大家分享一篇Python求兩個(gè)圓的交點(diǎn)坐標(biāo)或三個(gè)圓的交點(diǎn)坐標(biāo)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11vscode中配置jupyter的詳細(xì)步驟(徹底解決Failed?to?start?the?Kernel問(wèn)題)
自從vscode出了支持jupyter?notebook的功能之后,我就再也沒(méi)有傻傻的用瀏覽器開(kāi)過(guò)jupyter(問(wèn)就是vscode好看),下面這篇文章主要給大家介紹了關(guān)于vscode中配置jupyter(徹底解決Failed?to?start?the?Kernel問(wèn)題)的相關(guān)資料,需要的朋友可以參考下2022-12-12