nginx的日誌切割,定時分析

2021-10-09 05:50:34 字數 1738 閱讀 5326

我們知道,nginx會將訪問日誌寫入到logs/access.log日誌檔案中,天長日久,access.log檔案就會越來越大,如果訪問量巨大,並不用多長時間,access.log檔案的體積就會變得非常大,對於我們的管理工作來說,這是不利的,首先,當我們開啟乙個非常大的日誌檔案時,就會比較慢,而且,從乙個非常大的日誌中找到某個時間段的日誌也會比較慢。

例如:使用命令訪問nginx伺服器10000次:

[root@server1~]# ab -c 1 -n 10000
[root@server1 logs]# du -sh access.log 

1.0m access.log

當訪問100000次時,日誌檔案大小將會變成17m

所以,我們最好將日誌按天分割開(或者按照你覺得合適的時間段分隔開),比如,每天晚上0點5分生成乙個新的日誌檔案,0點5分之後(新的一天)的日誌寫入到新的日誌檔案中,之前的日誌則保留在老的檔案中,這樣每天就會生成乙個日誌檔案,而不是將所有日誌都寫入到同乙個日誌檔案中。

所以,我們需要為nginx配置"日誌分割"的功能,或者稱之為"日誌滾動"的功能,說到nginx的日誌切割,要分如下兩種情況來說:

一、通過編譯的方式安裝nginx後,預設沒有日誌分割的功能。

二、通過yum源的方式安裝nginx後,缺省會對nginx日誌進行切割。

也就是說,當安裝完nginx以後,預設是否存在日誌滾動的功能,取決於你的安裝方式。

為nginx實現日誌切割的方法通常有兩種,第一種方法是編寫指令碼實現日誌切割,第二種方法是使用系統自帶的日誌滾動軟體logrotate完成日誌切割,但是無論選擇哪種方法,其實都是殊途同歸,在本質上都是一樣的,那麼,我們先來看看怎樣通過最"原始"的方法為nginx進行日誌滾動:

1、進入日誌目錄

cd /usr/local/nginx/logs
2、重新命名日誌檔案

[root@server1 logs]# mv access.log `date +%f -d -1day`_access.log

[root@server1 logs]# ls

2020-02-25_access.log error.log nginx.pid

我們已經重新命名了"access.log"檔案,但是你會發現,重新命名後,nginx日誌仍然會寫入到2020-02-25_access.log檔案中,並不會自動建立乙個新的"access.log"檔案,即使你手動建立了乙個新的access.log檔案,nginx仍然會把日誌寫入到重新命名後的2020-02-25_access.log檔案中。

出現上述情況,是因為nginx程序讀寫日誌檔案時,是通過檔案描述符去操作的,雖然我們修改了原access.log檔案的檔名,但是原檔案描述符與檔案本身的對應關係仍然存在,所以,單單對檔案重新命名是不夠的,我們需要讓nginx重新開啟乙個新檔案,以便將新的日誌寫入到新檔案中。

3、傳送訊號

我們需要向nginx主程序傳送乙個reopen訊號,以便nginx能夠開啟乙個新的日誌檔案,具體命令如下:

[root@server1 logs]# nginx -s reopen

nginx 日誌切割定時

1.安裝定時任務 yum install crontabs 1 usr local nginx sbin cut my log.sh 3.重啟定時任務 service crond restart 附 常用定時任務命令 service crond start 啟動服務 service crond st...

Nginx定時日誌切割

進入到nginx的可執行sbin目錄裡,usr local nginx sbin 下 建立乙個shell可執行檔案 cut my log.sh 內容為 bin bash log path var log nginx record time date d yesterday y m d h m pid...

nginx日誌模組及日誌定時切割

ngx http log module 定義日誌格式,並且以指定的格式儲存。句法 access log path format buffer size gzip level flush time if condition access log off 預設 access log logs acces...