日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺析python 定時拆分備份 nginx 日志的方法

瀏覽:168日期:2022-07-27 10:53:56

一、背景:

nginx 的log 不會自動按天備份,而且記錄時間格式不統(tǒng)一,此程序?qū)iT解決這兩個問題;

二、windows 部署方式

1.在 nginx 目錄,創(chuàng)建一個 nginx_logs_backup.bat 文件;文件內(nèi)容如下

python nginx_logs_splter.py --nginxConf=nginx.conf --nginxDir=xxxxx --logPrefixs=access,error

2.在定時任務中加一個定時任務,調(diào)用這個 bat 文件;

2.1 開始-程序-管理工具-任務計劃程序;

2.2 新建基本任務;

2.3 注意的一點是,在'編輯操作'窗口,在'起始于(可選)'這一欄需要填入 bat 所在目錄,否則 bat 不會執(zhí)行;

三、執(zhí)行邏輯

1.將指定前綴的 log 在同目錄創(chuàng)建一個臨時文件(對源文件重命名),如:access_200426.log;2.使用 nginx -s 命令,從容重啟 nginx,重新創(chuàng)建 log;3.讀 access_200426.log 文件,將記是 2020-04-26 產(chǎn)生的日志,轉(zhuǎn)存至 ./bac/access_200426.log 文件中;4.刪除臨時文件 access_200426.log ;注:同一天可多次執(zhí)行,轉(zhuǎn)存的 log 將增量添加;

四、調(diào)用方式

python nginx_logs_splter.py --nginxConf=nginx.conf --nginxDir=xxxxx --logPrefixs=access,error參數(shù): nginxConf=nginx 配置文件 nginxDir=nginx 目錄 logPrefixs=log文件前綴(多個逗號分隔)

五、nginx_logs_splter.py 源碼

#!/usr/bin/env python3# coding=utf-8import osimport sysimport argparseimport codecsimport time,datetimeimport re ’’’拆分 nginx access log日志不會自動按天創(chuàng)建,需要輔助任務把日志按天拆分備份,統(tǒng)一日志時間格式;作者:草青工作室’’’ _version=’200426.1’_isDebug = True_isDebug = False def logSpliter(nginxDir, prefix): #今日 today = datetime.datetime.now(); yymmdd_today = today.strftime(’%y%m%d’) #昨日 yestoday = datetime.date.today()-datetime.timedelta(days=1) yymmdd_yestoday = yestoday.strftime(’%y%m%d’) # logFileFullName = os.path.join(nginxDir,'logs','%s.log'%prefix) tmpFileFullName = os.path.join(nginxDir,'logs','%s_%s.log'%(prefix,yymmdd_yestoday)) bacFileFullName = os.path.join(nginxDir,'logs','bac','%s-%s.log'%(prefix,yymmdd_yestoday)) print(’%sntmpFileFullName=%snbacFileFullName=%snn’%( ’-’*60, tmpFileFullName, bacFileFullName)) start = datetime.datetime.now() totalCount = 0 with codecs.open(tmpFileFullName, ’r’, ’utf-8’) as f: for line in f.readlines(): totalCount += 1 print(’總記錄數(shù)t%stfileName=%s’ % (totalCount,tmpFileFullName)) # 針對 access log 的時間格式 dtAccess = re.compile(’d{1,2}/[a-zA-Z]+/d{4}:d{1,2}:d{1,2}:d{1,2}’) # 針對 error log 的時間格式 dtError = re.compile(’d{4}/d{1,2}/d{1,2} d{1,2}:d{1,2}:d{1,2}’) # 轉(zhuǎn)換 access log 日期格式('24/Apr/2020:23:26:29 +0800' to 2020-04-24 23:26:29) dtReplace = re.compile(’^'.+?'|^[.+?]’) # 增量寫備份文件 outputFile = open(bacFileFullName, ’a+’, encoding=’utf-8’) # 寫備注 outputFile.writelines('#備份時間t%sn' % today.strftime(’%Y-%m-%d %H:%M:%S’)) outputFile.writelines('#版本號t%sn' % _version) #轉(zhuǎn)存 tmp 文件 with open(tmpFileFullName, ’r’, encoding=’utf-8’) as f: rows = 0 # 按行統(tǒng)計 while True: rows += 1 if rows % 10000 == 0: print(’已分析t%s/%st耗時t%ss’ % (rows ,totalCount ,(datetime.datetime.now() - start).seconds)) # ------ if _isDebug and rows>=35000: print(’_isDebug = ’,_isDebug) break # ------ line = f.readline() if not line: #等價于if line == '': break if line.startswith(’#’): print('跳過注釋內(nèi)容=>',line) continue #時間格式適配 dt = None if ’access’ in prefix: #獲取時間 '24/Apr/2020:14:43:38 +0800' arr = dtAccess.findall(line) if len(arr) == 0: continue dt = datetime.datetime.strptime(arr[0],’%d/%b/%Y:%H:%M:%S’) #轉(zhuǎn)換時間格式 line = dtReplace.sub(’'%s'’%dt.strftime(’%Y-%m-%d %H:%M:%S’),line) elif ’error’ in prefix: #獲取時間 2020/04/24 23:37:46 arr = dtError.findall(line) if len(arr) == 0: continue dt = datetime.datetime.strptime(arr[0],’%Y/%m/%d %H:%M:%S’) if not dt: print(’日期轉(zhuǎn)換失敗 dt is none’) continue yymmdd_log = dt.strftime(’%y%m%d’) #小于昨天繼續(xù) if yymmdd_log<yymmdd_yestoday: #print(’跳過,小于 %s’%yymmdd_yestoday) continue #大于昨天退出 if yymmdd_log>yymmdd_yestoday: print(’退出,大于 %s’%yymmdd_yestoday) break #print(line) outputFile.writelines('%s'%line) #關閉輸出文件流 if outputFile: outputFile.close() #分離后刪除 tmp 文件 if os.path.exists(bacFileFullName): os.remove(tmpFileFullName) print(’刪除臨時文件,%st%s’%(tmpFileFullName,not os.path.exists(tmpFileFullName))) print(’nn%sn拆分完成,耗時 %s 秒 nlog=%s’ % (’*’ * 30 , (datetime.datetime.now() - start).seconds , bacFileFullName)) pass’’’>>> f = open(’test.txt’, ’w’) # 若是’wb’就表示寫二進制文件>>> f.write(’Hello, world!’)>>> f.close()python文件對象提供了兩個“寫”方法: write() 和 writelines()。write()方法和read()、readline()方法對應,是將字符串寫入到文件中。writelines()方法和readlines()方法對應,也是針對列表的操作。它接收一個字符串列表作為參數(shù),將他們寫入到文件中,換行符不會自動的加入,因此,需要顯式的加入換行符。關于open()的mode參數(shù):’r’:讀’w’:寫’a’:追加’r+’ == r+w(可讀可寫,文件若不存在就報錯(IOError))’w+’ == w+r(可讀可寫,文件若不存在就創(chuàng)建)’a+’ ==a+r(可追加可寫,文件若不存在就創(chuàng)建)對應的,如果是二進制文件,就都加一個b就好啦:’rb’’wb’’ab’’rb+’’wb+’’ab+’’’’ def test(): # '24/Apr/2020:14:43:38 +0800' dt =time.time() print(time.strftime(’%Y-%m-%d %H:%M:%S [%Z]’,time.localtime(dt))) print(time.strftime(’%y-%m-%d %I:%M:%S [%Z]’,time.localtime(dt))) print(time.strftime(’%d/%b/%Y %H:%M:%S [%Z]’,time.localtime(dt))) print(’-’*30) str = ’24/Apr/2020:14:43:38’ dt = datetime.datetime.strptime(str,’%d/%b/%Y:%H:%M:%S’) print('%s[%s] => %s[%s]' % (str,type(str),dt,type(dt))) str = dt.strftime(’%Y-%m-%d %H:%M:%S’) print('%s [%s]' % (str,type(str))) pass ’’’python中時間日期格式化符號: %y 兩位數(shù)的年份表示(00-99) %Y 四位數(shù)的年份表示(000-9999) %m 月份(01-12) %d 月內(nèi)中的一天(0-31) %H 24小時制小時數(shù)(0-23) %I 12小時制小時數(shù)(01-12) %M 分鐘數(shù)(00=59) %S 秒(00-59) %a 本地簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化的月份名稱 %B 本地完整的月份名稱 %c 本地相應的日期表示和時間表示 %j 年內(nèi)的一天(001-366) %p 本地A.M.或P.M.的等價符 %U 一年中的星期數(shù)(00-53)星期天為星期的開始 %w 星期(0-6),星期天為星期的開始 %W 一年中的星期數(shù)(00-53)星期一為星期的開始 %x 本地相應的日期表示 %X 本地相應的時間表示 %Z 當前時區(qū)的名稱 ’’’def createTempFile(nginxConf,nginxDir,prefixArr): yestoday = datetime.date.today()-datetime.timedelta(days=1) yymmdd = yestoday.strftime(’%y%m%d’) for prefix in prefixArr: logFileFullName = os.path.join(nginxDir,'logs','%s.log'%prefix) tmpFileullName = os.path.join(nginxDir,'logs','%s_%s.log'%(prefix,yymmdd)) if not os.path.exists(logFileFullName): print(’log 文件不已存在:%s’%tmpFileullName) continue if os.path.exists(tmpFileullName): print(’tmp 文件已存在:%s’%tmpFileullName) continue #備份log os.rename(logFileFullName,tmpFileullName) if not os.path.exists(tmpFileullName): print(’log 重命名失敗:%s’%logFileFullName) continue print(’%s rename %s’%(tmpFileullName,os.path.exists(tmpFileullName))) #重啟 nginx cmd = ’nginx -p %s -c %s -s reload’%(nginxDir,nginxConf) print(’%sn執(zhí)行 nginx reload 命令nt%snn’%(’-’*60,cmd)) #os.system() 將導致進程阻塞 os.system(cmd) #等待重啟 time.sleep(3) #判斷文件是否存在 print(’rolad 命令已觸發(fā),驗證log 是否新建’) for prefix in prefixArr: log = os.path.join(nginxDir,'logs',’%s.log’%prefix) print(’t%s rename %s’%(log,os.path.exists(log))) print(’n’) def main(nginxConf,nginxDir, logPrefixs): if not nginxDir or not logPrefixs: print('參數(shù)為空:--nginxDir={} --logPrefixs={}'.format(nginxDir, logPrefixs)) return if not os.path.exists(nginxDir): print('文件不存在:--nginxDir={} '.format(nginxDir)) return conf = os.path.join(nginxDir,nginxConf) if not os.path.exists(conf): print('nginx config 不存在:--nginxConf={} '.format(conf)) return prefixArr = logPrefixs.split(’,’) #備份+重新加載 nginx createTempFile(nginxConf,nginxDir,prefixArr) #分離當天的log for prefix in prefixArr: try: print('備份 %s 文件'%prefix) logSpliter(nginxDir, prefix) except Exception as ex: print('備份 %s 異常'%prefix,ex) pass if __name__ == ’__main__’: parser = argparse.ArgumentParser(description=’manual to this script’) parser.add_argument(’--nginxConf’, type=str, default = None) parser.add_argument(’--nginxDir’, type=str, default = None) parser.add_argument(’--logPrefixs’, type=str, default= None) args = parser.parse_args() #test() ’’’ 功能: 備份執(zhí)行時間-1天(昨天)的 nginx log,需要指定 log 的前綴,多個文件名逗號分隔; 運行邏輯: 1.將指定前綴的 log 在同目錄創(chuàng)建一個臨時文件(對源文件重命名),如:access_200426.log; 2.使用 nginx -s 命令,從容重啟 nginx,重新創(chuàng)建 log; 3.讀 access_200426.log 文件,將記是 2020-04-26 產(chǎn)生的日志,轉(zhuǎn)存至 ./bac/access_200426.log 文件中; 4.刪除臨時文件 access_200426.log ; 注:同一天可多次執(zhí)行,轉(zhuǎn)存的 log 將增量添加; 調(diào)用方式: python nginx_logs_splter.py --nginxConf=nginx.conf --nginxDir=xxxxx --logPrefixs=access,error 參數(shù): nginxConf=nginx 配置文件 nginxDir=nginx 目錄 logPrefixs=log文件前綴(多個逗號分隔) windows 部署: 1.在 nginx 目錄,創(chuàng)建一個 nginx_logs_backup.bat 文件;文件內(nèi)容如下 python nginx_logs_splter.py --nginxConf=nginx.conf --nginxDir=xxxxx --logPrefixs=access,error 2.在定時任務中加一個定時任務,調(diào)用這個 bat 文件; 2.1 開始-程序-管理工具-任務計劃程序; 2.2 新建基本任務; 2.3 注意的一點是,在'編輯操作'窗口,在'起始于(可選)'這一欄需要填入 bat 所在目錄,否則 bat 不會執(zhí)行; ’’’ sys.exit(main(args.nginxConf,args.nginxDir,args.logPrefixs))

到此這篇關于淺析python 定時拆分備份 nginx 日志的方法的文章就介紹到這了,更多相關python nginx 日志內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜在线精品偷拍| 91精品福利观看| 亚洲福利国产| 亚洲图片久久| 青青青国产精品| 国产精品88久久久久久| 国产乱码精品一区二区三区亚洲人| 亚洲二区在线| 日本在线视频一区二区| 国产精品久久观看| 亚洲深夜视频| 手机精品视频在线观看| 国产精品香蕉| 国产精品一区二区中文字幕| 久久免费大视频| 欧美一区精品| 久久中文字幕av| 国产精品qvod| 亚洲综合不卡| 成人精品高清在线视频| 99视频一区| 日韩黄色大片| 少妇精品在线| 国产一区二区三区日韩精品 | 在线人成日本视频| 麻豆精品av| 亚洲一区激情| 久久久影院免费| 在线日韩欧美| 美女视频黄久久| 影音先锋久久精品| 麻豆精品99| 中文字幕av一区二区三区四区| 蜜芽一区二区三区| 99久久久久国产精品| 欧美日韩国产一区二区三区不卡| 国产精品一在线观看| 欧美午夜精品一区二区三区电影| 成人av二区| 亚洲激情黄色| 国产精品对白| 亚洲国产专区| 美女精品久久| 在线一区免费观看| 精品无人区麻豆乱码久久久| 亚洲一区网站| 亚洲国产欧美日本视频| 国产精品呻吟| 99精品综合| 久久久成人网| 国产夫妻在线| 国产一区调教| 鲁大师成人一区二区三区| 日韩一级网站| 亚洲性视频h| 亚洲91久久| 欧美精品九九| 一区二区国产在线观看| 天堂av在线一区| 亚洲一二av| 日本一区二区免费高清| 亚洲午夜电影| 成人羞羞视频播放网站| 在线亚洲自拍| 国产精品一区二区精品视频观看| 国产精品嫩模av在线| 麻豆国产欧美日韩综合精品二区| 国产午夜一区| 蜜桃免费网站一区二区三区| 国产亚洲欧美日韩精品一区二区三区 | 最新中文字幕在线播放| 亚洲最新无码中文字幕久久 | 青青伊人久久| 999视频精品| 婷婷综合六月| 国产视频一区在线观看一区免费| 首页国产欧美日韩丝袜| 日本欧美一区| 久久国产乱子精品免费女| 亚洲视频播放| 国产66精品| 亚洲人成网77777色在线播放| 欧美一级久久| 日韩高清中文字幕一区二区| 欧美日韩中文字幕一区二区三区| 国产欧美日韩一区二区三区四区 | 日韩精品高清不卡| 国产美女精品| 一区二区不卡| 久久中文视频| 久久一区精品| 久久99精品久久久野外观看| 少妇久久久久| 久久国内精品视频| 最新日韩欧美| 日韩高清成人在线| 国户精品久久久久久久久久久不卡| 在线人成日本视频| 久久av影院| 亚洲日韩中文字幕一区| 美女少妇全过程你懂的久久| 欧美日韩网址| 麻豆91小视频| 狠狠久久婷婷| 国产精品**亚洲精品| 亚洲综合三区| 久久国产欧美| 精品五月天堂| 日韩av有码| 久久精品免视看国产成人| 91精品国产自产精品男人的天堂| 日本一区中文字幕| 日韩精品亚洲专区在线观看| 久久97久久97精品免视看秋霞| 国产极品久久久久久久久波多结野| 蜜桃国内精品久久久久软件9| 国产日产高清欧美一区二区三区 | 国产精品一区二区三区四区在线观看 | 麻豆一区二区三| 蜜桃视频在线观看一区| 日韩精品1区2区3区| 国产一区二区三区黄网站| 亚洲爱爱视频| 久久蜜桃精品| 日韩成人亚洲| 久久久久久黄| 一区二区国产在线| 精品久久一区| 神马午夜久久| 亚洲三级国产| 国内精品美女在线观看| 日韩亚洲一区在线| 免费日本视频一区| 美女视频黄 久久| 国产成人精品免费视| 一区久久精品| 成人精品久久| 激情综合网址| 日韩精品三区四区| 国产成年精品| 国产精品久久久久久久久久齐齐| 视频二区不卡| 国产美女久久| 欧美亚洲tv| 久久精品人人| 自拍自偷一区二区三区| 日本精品黄色| 亚洲精品第一| 免费看日韩精品| 新版的欧美在线视频| 一区在线视频观看| 久久精品 人人爱| 在线日韩欧美| 免费观看在线色综合| 国产精品久久久久蜜臀| 亚洲精品黄色| 亚洲五月综合| 亚洲欧美专区| 精品国产精品国产偷麻豆| 婷婷视频一区二区三区| 欧美亚洲精品在线| 久久精品亚洲欧美日韩精品中文字幕| 四季av一区二区凹凸精品| 国产欧美日韩精品一区二区免费| 日本不卡视频在线观看| 国产精品嫩模av在线| 男人天堂欧美日韩| 伊人久久亚洲热| 久久久久久久久久久9不雅视频| 成人三级高清视频在线看| 久久精品国内一区二区三区| 国产成人精品一区二区三区免费 | 免费视频久久| 天堂av在线一区| 久久国产福利| 国产欧美激情| 日韩欧美综合| 成人一二三区| 久久视频国产| 亚洲欧美日本国产专区一区| 久久xxxx| 欧美在线看片| 麻豆高清免费国产一区| 日本蜜桃在线观看视频| 欧美日韩中文一区二区| 日韩精品2区| 石原莉奈一区二区三区在线观看| 日本亚洲视频| 热久久免费视频| 88久久精品| 亚洲大片在线| 国产精品视频一区二区三区 | 欧美aaaaaa午夜精品| 天堂√8在线中文| 日本在线视频一区二区| 国产精品久久久久av蜜臀| 99国产精品| 欧美激情在线精品一区二区三区| 国产高清视频一区二区| 男人的天堂亚洲一区|