導航:首頁 > 編程語言 > pythonnginx日誌統計

pythonnginx日誌統計

發布時間:2023-03-03 16:00:46

『壹』 使用python解析nginx日誌文件

本文使用Python2.7解析nginx日誌文件,並把nginx的時間轉化為時間戳(1970紀元後經過的浮點秒數),並存放到特定文件中。

Nginx的http日誌格式:

示例如下:

這里使用Python的glob模塊來獲取所有日誌文件。日誌文件每天0時進行備份,命名為nginx.log.YYMMDD。

模塊linecache允許從任何文件里得到任何的行,並且使用緩存進行優化,常見的情況是從單個文件讀取多行。

使用python的re模塊解析每一條日誌。

其中body_bytes捕獲非空字元串,而不是數字,因為日誌里可能存在該欄位值為「-」,即沒有請求體。

date、method、request等參數可以採用以下方式進行提取。

使用python的time模塊把時間轉為時間戳。

產生文件time.log,內容如下:

『貳』 14《Nginx 入門教程》Nginx的日誌功能

通常,在生產環境中使用 Nginx 進行反向代理和負載均衡或者各種其他處理時,良好的日誌記錄是非常關鍵的一環。通過精心配置的 Nginx 日誌,我們可以獲取用戶的真實 ip、瀏覽器信息,請求處理時間,請求URL等,這樣方便我們排查和回溯錯誤。具體要記錄哪些信息,可以通過 Nginx 中的 log_format 指令定義,由它定義日誌的格式。而對於使用哪種日誌格式和設置日誌的保存路徑則由 access_log 指令指定的。另外在 Nginx 中還有一個配置伺服器和請求處理過程中的錯誤信息的指令,那就是 error_log指令。最後,如果在配置的日誌文件路徑中使用了變數,我們可以通過open_log_file_cache指令來設置緩存,提升性能。對於大型的網站而言,大量的 http 請求意味著大量的日誌記錄,及時按天或按大小進行 Nginx 日誌備份也至關重要的。

在 Nginx 的日誌模塊主要有2個, ngx_stream_log_mole 和 ngx_http_log_mole,分別表示四層的日誌模塊和七層的日誌模塊,其指令和用法都是一致的,接下來我們只針對 http 請求的日誌進行說明和使用。

在 ngx_http_log_mole 模塊中,只3個指令,分別是 access_log、log_format 和 open_log_file_cache。這些指令具體的格式如下:

ngx_http_log_mole 模塊用來按某個格式來記錄請求的日誌。模塊中的 log_format 指令就是用來設置列印日誌的格式,該指令中可以使用 Nginx 中的各種變數,比如保存遠端ip地址的變數$remote_addr等。一個簡單的示例如下:

接下來是 access_log 指令。參考前面的指令格式。關閉日誌記錄,直接是寫 access_log off ,如果打開 access 日誌,它的寫法是:

access_log 指令示例:

每一條日誌記錄的寫入都是先打開文件再寫入記錄,然後關閉日誌文件。如果你的日誌文件路徑中使用了變數,如 access_log /var/logs/$host/access.log ,為提高性能,可以使用 open_log_file_cache 指令設置日誌文件描述符的緩存。可以通過 open_log_file_cache off 關閉該緩存。該指令的幾個參數選項說明如下:

最後 error_log 是 錯誤日誌配置指令,主要記錄客戶端訪問 Nginx 出錯時的日誌,它不不支持自定義日誌格式。通過檢查錯誤日誌,可以快速定位線上問題,所以也是很重要的。關閉錯誤日誌的方式和 access_log不一樣,沒有 error_log off 這樣關錯誤日誌的用法,反而會將錯誤日誌打到名為 off 的文件中。常用的關閉方式是:

就像在 Linux 系統中,輸出到 /dev/null 的內容實際上等價於丟棄一樣。

Nginx 的日誌切割實現的核心是使用 nginx 命令的 reopen 參數實現,該參數的含義是重新開始記錄日誌文件。人工切的做法就是凌晨將日誌備份,然後執行帶reopen參數的命令:

執行後會重新生成 access.log 和 error.log,這就是手工切割的方式。通常我們會用 shell 腳本和定時任務來幫我我們完成自動切割。首先准備如下的 shell 腳本,它完成日誌的備份以及給 nginx 進程發生 reopen 信號。

接下來,只要將這個腳本加入到 crontab 中即可,如下操作:

我們在 nginx.conf 中添加如下的日誌配置:

這里我們綜合了前面涉及的知識,這里只簡單測試日誌配置中 if 功能。我們設置請求的相應碼為 3xx 和 4xx 時,日誌不會記錄。接下來,啟動或者熱載入 Nginx, 然後分別對應三個埠發送 http 請求並觀察 access.log 日誌:

本小節我們介紹了 log 相關的指令,包括訪問日誌和錯誤日誌的指令。此外還介紹了 Nginx 中對日誌切割的常用處理方法,這也是生產環境上使用日誌備份的手段。

『叄』 如何用 python 分析網站日誌

日誌的記錄

Python有一個logging模塊,可以用來產生日誌。
(1)學習資料
http://blog.sina.com.cn/s/blog_4b5039210100f1wv.html

http://blog.donews.com/limodou/archive/2005/02/16/278699.aspx
http://kenby.iteye.com/blog/1162698
http://blog.csdn.NET/fxjtoday/article/details/6307285
前邊幾篇文章僅僅是其它人的簡單學習經驗,下邊這個鏈接中的內容比較全面。

http://www.red-dove.com/logging/index.html

(2)我需要關注內容
日誌信息輸出級別
logging模塊提供了多種日誌級別,如:NOTSET(0),DEBUG(10),
INFO(20),WARNING(30),WARNING(40),CRITICAL(50)。
設置方法:
logger = getLogger()
logger.serLevel(logging.DEBUG)

日誌數據格式
使用Formatter設置日誌的輸出格式。
設置方法:
logger = getLogger()
handler = loggingFileHandler(XXX)
formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")

%(asctime)s表示記錄日誌寫入時間,"%Y-%m-%d,%H:%M:%S「設定了時間的具體寫入格式。
%(levelname)s表示記錄日誌的級別。
%(message)s表示記錄日誌的具體內容。

日誌對象初始化
def initLog():
logger = logging.getLogger()
handler = logging.FileHandler("日誌保存路徑")
formatter = logging.Formatter("%(asctime)s %(levelname) %(message)s","%Y-%m-%d,%H:%M:%S")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel

寫日誌
logging.getLogger().info(), logging.getLogger().debug()......

2. 日誌的分析。
(1)我的日誌的內容。(log.txt)
2011-12-12,12:11:31 INFO Client1: 4356175.0 1.32366309133e+12 1.32366309134e+12
2011-12-12,12:11:33 INFO Client1: 4361320.0 1.32366309334e+12 1.32366309336e+12
2011-12-12,12:11:33 INFO Client0: 4361320.0 1.32366309389e+12 1.32366309391e+12
2011-12-12,12:11:39 INFO Client1: 4366364.0 1.32366309934e+12 1.32366309936e+12
2011-12-12,12:11:39 INFO Client0: 4366364.0 1.32366309989e+12 1.32366309991e+12
2011-12-12,12:11:43 INFO Client1: 4371416.0 1.32366310334e+12 1.32366310336e+12
2011-12-12,12:11:43 INFO Client0: 4371416.0 1.32366310389e+12 1.32366310391e+12
2011-12-12,12:11:49 INFO Client1: 4376450.0 1.32366310934e+12 1.32366310936e+12
我需要將上述內容逐行讀出,並將三個時間戳提取出來,然後將其圖形化。

(2) 文件操作以及字元串的分析。
打開文件,讀取出一行日誌。
file = file("日誌路徑",「r」)
while True:
line = file.readline()
if len(len) == 0:
break;
print line
file.close()

從字元串中提取數據。
字元串操作學習資料:

http://reader.you.com/sharelite?itemId=-4646262544179865983&method=viewSharedItemThroughLink&sharedBy=-1137845767117085734
從上面展示出來的日誌內容可見,主要數據都是用空格分隔,所以需要使用字元串的
split函數對字元串進行分割:
paraList = line.split(),該函數默認的分割符是空格,返回值為一個list。
paraList[3], paraList[4], paraList[5]中分別以字元串形式存儲著我需要的時間戳。

使用float(paraList[3])將字元串轉化為浮點數。
(3)將日誌圖形化。
matplotlib是python的一個繪圖庫。我打算用它來將日誌圖形化。
matplotlib學習資料。
matplotlib的下載與安裝:
http://yexin218.iteye.com/blog/645894
http://blog.csdn.Net/sharkw/article/details/1924949

對matplotlib的宏觀介紹:
http://apps.hi..com/share/detail/21928578
對matplotlib具體使用的詳細介紹:

http://blog.sina.com.cn/s/blog_4b5039210100ie6a.html
在matplotlib中設置線條的顏色和形狀:
http://blog.csdn.net/kkxgx/article/details/python

如果想對matplotlib有一個全面的了解,就需要閱讀教程《Matplotlib for Python developers》,教程下載地址:
http://download.csdn.net/detail/nmgfrank/4006691

使用實例
import matplotlib.pyplot as plt

listX = [] #保存X軸數據
listY = [] #保存Y軸數據
listY1 = [] #保存Y軸數據

file = file("../log.txt","r")#打開日誌文件

while True:
line = file.readline()#讀取一行日誌
if len(line) == 0:#如果到達日誌末尾,退出
break
paraList = line.split()
print paraList[2]
print paraList[3]
print paraList[4]
print paraList[5]
if paraList[2] == "Client0:": #在坐標圖中添加兩個點,它們的X軸數值是相同的
listX.append(float(paraList[3]))
listY.append(float(paraList[5]) - float(paraList[3]))
listY1.append(float(paraList[4]) - float(paraList[3]))

file.close()

plt.plot(listX,listY,'bo-',listX,listY1,'ro')#畫圖
plt.title('tile')#設置所繪圖像的標題
plt.xlabel('time in sec')#設置x軸名稱
plt.ylabel('delays in ms'')#設置y軸名稱

plt.show()

『肆』 python 分析系統日誌

這個不用做計劃任務。直接用tail -f 文件名|grep executing too slow

這樣就可以了。然後wc統計行數。

如果你一定要用python做。就使用文件對象中的seek方法,移到上次處理的位置。

閱讀全文

與pythonnginx日誌統計相關的資料

熱點內容
給編譯原理論文起個題目 瀏覽:143
手機app底色變紅了該怎麼辦 瀏覽:524
flash命令行 瀏覽:666
反詐騙app怎麼找回密碼 瀏覽:631
java方法和函數 瀏覽:420
程序員衣服穿反 瀏覽:959
java多類繼承 瀏覽:159
怎麼用多玩我的世界連接伺服器地址 瀏覽:483
為什麼華為手機比安卓流暢 瀏覽:177
javamap多線程 瀏覽:228
卡西歐app怎麼改時間 瀏覽:843
jquery壓縮圖片 瀏覽:970
用紙筒做解壓東西 瀏覽:238
神奇寶貝伺服器如何tp 瀏覽:244
雲伺服器支持退貨嗎 瀏覽:277
貸款等額本息演算法 瀏覽:190
根伺服器地址配置 瀏覽:501
單片機是軟體還是硬體 瀏覽:624
vivo手機怎麼看編譯編號 瀏覽:320
塑鋼扣條演算法 瀏覽:301