[Linux] uwsgi日志按天分割保存


原文鏈接:http://loonlog.com/2020/1/7/uwsgi-log-divided-by-day/

最近網站被頻繁的攻擊,需要經常查看uwsgi日志,進行分析,查找可疑ip,進行黑名單設置;在查看uwsgi日志的時候發現uwsgi日志很大,有上百M,下載很不方面,並且打開日志和查看日志均不是很方便;
最理想的就是每天一個日志文件,方面管理和查看。
uwsgi沒有提供按天切割日志的配置,只提供了一個log-maxsize配置,當文件達到多大的時候自動切分,對於查找歷史日志還是很不方便,我們一般是按照時間查詢。
我是小白,根據網上的資料,歸納總結,並加以菜鳥備注呈現給大家;

原理就是:配合sh+crontab腳本技術,用mv+touch-logreopen參數,移動日志文件后,讓uwsgi重新打開日志並記錄。

系統:centos 7 (其他系統也是一樣的)

應用:django + uwsgi + nginx 的 web 應用 (只要有uwsgi,配置也是一樣的)

  1. 在uwsgi的配置文件 uwsgi.xml 中,添加 touch-logreopen配置

    (我的情況是uwsgi 的配置文件在django項目根目錄下,其他情況也是一樣的原理):

    <uwsgi> 
       ...
       <!-- 進程在后台運行,並將日志打印到指定文件 -->  
       <daemonize>./logs/uwsgi.log</daemonize>
       <!-- 進程在后台運行,並將日志打印到指定文件 -->
       <touch-logreopen>./logs/.touchforlogrotat</touch-logreopen>
    </uwsgi>
    

    如果你的uwsgi配置文件是 ini 格式的,可以新增如下內容

    #進程在后台運行,並將日志打印到指定文件 
    daemonize = ./logs/uwsgi.log 
    #設置一個監聽對象 
    touch-logreopen = ./logs/.touchforlogrotat
    

    關於路徑問題,大家根據自己的情況規划即可,因為uwsgi配置文件在項目根目錄,因此上面的路徑 ./logs/uwsgi.log的意思是在uwsi配置文件所在的目錄中的一個文件夾logs,uwsgi.log就在logs這個文件夾內。

    以上配置結合下面的腳本文件作用的原理是:當監聽對象 touch-logreopen 所指向的文件被touch,時間戳改變后,當前的uwsgi.log文件會重新按照日期命名,並保存在相應的文件夾,同時uwsgi會重新新建uwsgi.log文件進行寫入新日志,且不會中斷當前程序的執行。如果沒有touch-logreopen這個監聽對象,是無法對uwsgi.log進行轉儲的。

  2. 創建腳本文件

    在系統根目錄的shell目錄中,新建一個.sh的腳本文件uwsgi_log_cut.sh,內容如下:

    #!/bin/bash
    LOGDIR="/www/logs/"    #當前日志所在目錄
    DATE=`date -d "yesterday" +"%Y-%m-%d"`
    NEWDIR="/www/logs/history"   #新建文件夾history用來放舊日志
    mkdir -p  ${NEWDIR}
    mv ${LOGDIR}/uwsgi.log   ${NEWDIR}/uwsgi-${DATE}.log   #將舊日志重新以日期命名
    touch /www/logs/.touchforlogrota
    

    這里面的文件路徑www在系統根目錄,我django項目就在www文件夾。

  3. 腳本的運行設置

    通過crontab設置定時任務,命令行下輸入:

    crontab -e
    會進入一個當前用戶的文件,在這個文件中添加下面這行操作:

    '''
    * * * * * 執行任務
    第一個* 一小時當中的第幾分鍾:0-59
    第二個* 一天當中的第幾個小時:0-23
    第三個* 一月當中的第幾天:1-31
    第四個* 一年當中的第幾個月:1-12
    第五個* 一周當中的第幾個星期:0-7 0,7都代表周日
    '''
    0 0 * * * sh  /shell/uwsgi_log_cut.sh  #代表每天0點執行腳本 uwsgi_log_cut.sh
    

    這里的原理就是每天0點執行系統根目錄中shell文件夾中的uwsgi_log_cut.sh文件。

    最后重啟uwsgi,logs文件中的history文件夾都會有每天的日志了

以上的路徑大家不要弄混淆,根據你的結構進行設置即可。有問題可以留言,我也是小白,說的有點啰嗦,請諒解一下;以上的腳本寫法有很多,我也沒太理解,我現在這個我認為精明扼要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM