nginx切割日誌指令碼(python)

來源:互聯網
上載者:User

標籤:nginx 日誌 分割

因為以前沒有做nginx日誌分割,有時候想看日誌的時候總是發現有十幾G的甚至上百G的記錄檔,於是就想使用python寫個nginx日誌分割(當然你也可以使用shell來完成都是很簡單)

需求:
1.按照日分割nginx所有日誌
2.由於日誌不需要隨時可以查看,需要做歸檔(壓縮.tar.gz)
3.歸檔日誌需要有到期時間和容量限制(分割日誌需要做週期性刪除,超過一定時間或者目錄大小超過一定容量)

分析:
按照需求,我們需要 備份前一天日誌---->重新載入記錄檔---->壓縮記錄檔---->檢測備份記錄檔目錄

好了,也不一一分析指令碼,直接發出來了,有什麼問題大家可以提啊。

#coding:utf-8‘‘‘Version: 1.0.0Actor:youshuminDate:2018/04/28指令碼需求--  1.使用者提供一個nginx日誌路徑 (目錄)  2.使用者提供nginxnginx執行路徑  3.備份日誌路徑  4.保留多久的儲存記錄檔或者空間 天和GB為單位‘‘‘#######Nginx_Log_Dir="/data/nginx/web1/"Nginx_Pid_File="/usr/local/nginx/sbin/nginx"Nginx_Bak_Dir="/data/nginx/bak/web1"Nginx_Bak_Day=15Nginx_Bak_Max_Size=20#######import os,time,shutilimport tarfile,datetimeTIME_Secs=time.strftime("%Y%m%d%H%M%S",                        time.localtime())Time_Day=time.strftime("%Y%m%d",time.localtime())POSSIBLE_TOPDIR=os.path.normpath(os.path.abspath(Nginx_Log_Dir))Tmp_Work_File=os.path.normpath(os.path.join(POSSIBLE_TOPDIR,                                            TIME_Secs))def MvLog(Sour_Dir,Desc_dir):    Need_Mv_File_List=os.listdir(Sour_Dir)    os.mkdir(Desc_dir)    for item in Need_Mv_File_List:        shutil.move(os.path.join(Sour_Dir,item),                    Desc_dir)def ReloadNginxLog(Nginx_Sbin):    Shell_Command="{0} -s reopen".format(Nginx_Sbin)    if os.system(Shell_Command)==0:        print "nginx 日誌已經重新載入"def Tar_Log_File(Log_Path,Tar_Dir):    Tar_Bak_Name=os.path.normpath(os.path.join(Tar_Dir,                                               "web1_{0}.tar.gz".format(Time_Day)))    Tar=tarfile.open(Tar_Bak_Name,"w:gz")    Tar.add(Log_Path,arcname=os.path.basename(Log_Path))    Tar.close()    shutil.rmtree(Log_Path)def Del_One_Old_File(Del_File_Dir,Check_Day=None):    for root, dirs, files in os.walk(Del_File_Dir):        files.sort(key=lambda fn: os.path.getctime(os.path.join(root, fn)))    if Check_Day==True:        OLd_File_Time_Day=datetime.datetime.fromtimestamp(os.path.getctime(os.path.join(root,                                                                                        files[0]))).strftime("%Y%m%d")        Time_Now=time.strftime("%Y%m%d",time.localtime())        S_Day=int(Time_Now)-int(OLd_File_Time_Day)        return S_Day    else:        os.remove(os.path.normpath(os.path.join(root,files[0])))def Check_Ture_Or_Flase(Nginx_Bak_Dir,Bak_Days,Bak_Size):    Nginx_Bak_Dir = os.path.normpath(Nginx_Bak_Dir)    Size = 0    for root, dirs, files in os.walk(Nginx_Bak_Dir):        Size += sum([os.path.getsize(os.path.join(root, name)) for name in files])    Mb_Size = ‘%.2f‘ % float(Size / 1024.0 / 1024.0)    Mb_Max_Bak_Size = ‘%.2f‘ % float(Bak_Size * 1024)    Flat = Del_One_Old_File(Nginx_Bak_Dir, True) > Bak_Days or float(Mb_Size) > float(Mb_Max_Bak_Size)    return Flatdef Check_Bak_Dir(Nginx_Bak_Dir,Bak_Days,Bak_Size):    Flat=Check_Ture_Or_Flase(Nginx_Bak_Dir,Bak_Days,Bak_Size)    while Flat:        Del_One_Old_File(Nginx_Bak_Dir)        Flat = Check_Ture_Or_Flase(Nginx_Bak_Dir, Bak_Days, Bak_Size)        if Flat==False:            breakif __name__=="__main__":  ‘‘‘    MvLog 移動當前檔案    ReloadNginxLog 從新載入nginx日誌    Tar_Log_File 打包記錄檔    Check_Bak_Dir 檢查記錄備份目錄,是否需要刪除備份日誌    ‘‘‘    MvLog(POSSIBLE_TOPDIR,Tmp_Work_File)    ReloadNginxLog(Nginx_Pid_File)    Tar_Log_File(Tmp_Work_File,Nginx_Bak_Dir)    Check_Bak_Dir(Nginx_Bak_Dir,Nginx_Bak_Day,Nginx_Bak_Max_Size)

nginx切割日誌指令碼(python)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.