日志文件包含了關(guān)于系統(tǒng)中發(fā)生的事件的有用信息,在排障過程中或者系統(tǒng)性能分析時(shí)經(jīng)常被用到。對(duì)于忙碌的服務(wù)器,日志文件大小會(huì)增長極快,服務(wù)器會(huì)很快消耗磁盤空間,這成了個(gè)問題。除此之外,處理一個(gè)單個(gè)的龐大日志文件也常常是件十分棘手的事。
張家口ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
logrotate是個(gè)十分有用的工具,它可以自動(dòng)對(duì)日志進(jìn)行截?cái)啵ɑ蜉喲嚎s以及刪除舊的日志文件。例如,你可以設(shè)置logrotate,讓/var/log/foo日志文件每30天輪循,并刪除超過6個(gè)月的日志。配置完后,logrotate的運(yùn)作完全自動(dòng)化,不必進(jìn)行任何進(jìn)一步的人為干預(yù)。
在Debian或Ubuntu上:
在Fedora,CentOS或RHEL上:
logrotate的配置文件是/etc/logrotate.conf,通常不需要對(duì)它進(jìn)行修改。日志文件的輪循設(shè)置在獨(dú)立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。
參數(shù)詳解:
上面的模板是通用的,而配置參數(shù)則根據(jù)你的需求進(jìn)行調(diào)整,不是所有的參數(shù)都是必要的。
logrotate可以在任何時(shí)候從命令行手動(dòng)調(diào)用。要調(diào)用為/etc/lograte.d/下配置的所有日志調(diào)用logrotate:
要為某個(gè)特定的配置調(diào)用logrotate,執(zhí)行一次切割任務(wù)測試
即使輪循條件沒有滿足,我們也可以通過使用‘-f’選項(xiàng)來強(qiáng)制logrotate輪循日志文件,‘-v’參數(shù)提供了詳細(xì)的輸出。
防止訪問日志文件過大
logrotate工具對(duì)于防止因龐大的日志文件而耗盡存儲(chǔ)空間是十分有用的。配置完畢后,進(jìn)程是全自動(dòng)的,可以長時(shí)間在不需要人為干預(yù)下運(yùn)行。本教程重點(diǎn)關(guān)注幾個(gè)使用logrotate的幾個(gè)基本樣例,你也可以定制它以滿足你的需求。
linux shell腳本按日期 切割pm2日志 (解決定時(shí)任務(wù)pm2命令無法執(zhí)行問題,原因:沒有環(huán)境變量)
首先在輸入命令echo $PATH 拿到當(dāng)前系統(tǒng)環(huán)境變量
然后在/root/.pm2目錄新建cutlog.sh文件(注意:第一句一定要有,設(shè)置當(dāng)前shell腳本里面的環(huán)境變量,沒有的話pm2命令會(huì)無法執(zhí)行)
PATH=/root/.nvm/versions/node/v6.10.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
CURPATH=/root/.pm2
OUTPATH=/home/cutLogsDate
mkdir -p $OUTPATH
INPUTPATH=$CURPATH/logs
reloadProcessLogs(){
logFilesGame="${INPUTPATH}/$1"
yesterday=`date -d last-day '+%Y%m%d_'$2`
logOfLastDay=$OUTPATH/$yesterday.log
mv $logFilesGame $logOfLastDay
touch $logFilesGame
echo "切割$1成功"
}
reloadProcessLogs 'game-out-0.log' 'game_out'
pm2 reloadLogs設(shè)置定時(shí)任務(wù)
輸入crontab -e命令編輯
0 3 * * * sh /root/.pm2/cutlog.sh
Linux下運(yùn)行的Web服務(wù)器Apache,默認(rèn)日志文件是不分割的,一個(gè)整文件既不易于管理,也不易于分析統(tǒng)計(jì)。安裝cronolog后,可以將日志文件按時(shí)間分割,易于管理和分析。
cronolog安裝配置非常簡單,下載后只需要輸入幾個(gè)命令即可完成。
1、下載(最新版本)
# wget
2、解壓縮
# tar zxvf cronolog-1.6.2.tar.gz
3、進(jìn)入cronolog安裝文件所在目錄
# cd cronolog-1.6.2
4、運(yùn)行安裝
# ./configure
# make
# make install
5、查看cronolog安裝后所在目錄(驗(yàn)證安裝是否成功)
# which cronolog
一般情況下顯示為:/usr/local/sbin/cronolog
整個(gè)安裝過程結(jié)束,下面需要把日志的格式配置一下:
1、虛擬主機(jī)配置文件 httpd-vhosts.conf
將Web日志設(shè)置 CustomLog 修改為以下格式
CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined
當(dāng)然,錯(cuò)誤日志設(shè)置 ErrorLog 也可以利用 cronolog 分割,設(shè)置為
ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"
2、如果服務(wù)器上只有一個(gè)站點(diǎn)(當(dāng)然這種情況比較少),直接按上面所說格式修改 httpd.conf 文件日志設(shè)置部分。
說明:
綠色部分 為 cronolog 安裝后所在位置,系統(tǒng)版本不同可能位置不完全一樣,以 which 命令查看到的位置為準(zhǔn);
藍(lán)色部分 為設(shè)置的日志文件所在位置,根據(jù)需要修改;
紅色部分 為設(shè)置的日志文件標(biāo)識(shí)性字符,根據(jù)需要修改;
%Y%m%d 為日志文件分割方式,例子中為“年月日”,也可以修改成自己需要的。
修改httpd.conf文件:
這個(gè)文件在我的電腦上是在 /etc/httpd/conf/httpd.conf 不同的服務(wù)器 應(yīng)該是不一樣的
在最后加上
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
ErrorLog /data/logs/apache/webapps.wps.cn-error_log
CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%d/access_log.%H" combined
#這個(gè)保證了每天一個(gè)文件夾 文件夾下 每個(gè)小時(shí)產(chǎn)生一個(gè)log
#CustomLog "|/usr/local/sbin/cronolog /data/logs/apache/%Y%m%%Hdaccess_log" combined
進(jìn)入到 /etc/init.d/httpd configtest 這樣驗(yàn)證你的配置文件是否正確
進(jìn)入到 /etc/init.d/httpd restart 重啟apache 服務(wù)器(不同的'系統(tǒng)應(yīng)該是不一樣 要自己找到)
用于Tomcat
第一步
將
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
修改為
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d
fi
第二步
將
touch "$CATALINA_OUT"
改為
#touch "$CATALINA_OUT"
第三步
將
org.apache.catalina.startup.Bootstrap "$@" start
"$CATALINA_OUT" 21
修改為
org.apache.catalina.startup.Bootstrap "$@" start 21
| /usr/local/sbin/cronolog "$CATALINA_OUT" /dev/null
重新啟動(dòng) Tomcat
service tomcat restart
可以在 Tomcat 的 logs 目錄底下找到以系統(tǒng)日期為結(jié)尾的 catalina.out.yyyy-mm-dd 的檔案,這樣子就成功了。
后續(xù)就是持續(xù)觀察看看是不是每天都有產(chǎn)生一個(gè)新的 catalina.out.yyyy-mm-dd 檔案。然后再安排定期刪除這些較舊的 log 檔即可。
這個(gè)腳本是在LNMP論壇看到的,你可以試試
腳本如下:
#!/bin/bash#function:cut nginx log files for lnmp v0.5 and v0.6#author: #設(shè)置你的日志存放的目錄log_files_path="/home/wwwlogs/"#日志以年/月的目錄形式存放log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")#設(shè)置需要進(jìn)行日志分割的日志文件名稱,多個(gè)以空格隔開log_files_name=(access )#設(shè)置nginx的安裝路徑nginx_sbin="/usr/local/nginx/sbin/nginx"#Set how long you want to savesave_days=30 #############################################Please do not modify the following script #############################################mkdir -p $log_files_dir log_files_num=${#log_files_name[@]} #cut nginx log filesfor((i=0;i$log_files_num;i++));domv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").logdone #delete 30 days ago nginx log filesfind $log_files_path -mtime +$save_days -exec rm -rf {} \;
$nginx_sbin -s reload
把上面的保存為.sh文件,然后給上可執(zhí)行權(quán)限,再配合Linux的計(jì)劃任務(wù),完美拉~~~
nohup.out日志文件太大了,且一直增長,命令查看日志受阻
①切割大文件變成多個(gè)小文件
②每天定時(shí)保存前一天的日志,重新記錄當(dāng)天日志
1.利用split命令切割
①按文件大小切割大文件:
切割文件:將ohup.out文件每500M切割一個(gè)文件放到/home/nginx/logs/newlog/目錄下
②按文件行數(shù)切割大文件:
查詢文件行數(shù):
wc -l b.log
2038711 b.log
按50W行切割一個(gè)文件:
split -l 500000 -d -a 4 /home/nginx/logs/b.log /home/nginx/logs/newlog/
2.定時(shí)備份前一天日志,重新記錄當(dāng)天日志splitlog.sh
3.定時(shí)執(zhí)行
查看定時(shí)任務(wù):
crontab -l
編輯定時(shí)任務(wù):
crontab -e
重啟定時(shí)任務(wù):
刪除10天以前的日志文件,此日期為文件本身的時(shí)間,非日志內(nèi)容時(shí)間
有些服務(wù),會(huì)自動(dòng)產(chǎn)生大量的日志文件,如果不限制,會(huì)占用磁盤空間。
如果單純的用定時(shí)任務(wù)crontab刪除,又不太靈活,這時(shí)需要日志神器logrotate。
logrotate工具是系統(tǒng)自帶為了方便進(jìn)行日志管理而產(chǎn)生的一個(gè)工具。
系統(tǒng)會(huì)定時(shí)運(yùn)行 logrotate,一般是每天一次。也是基于定時(shí)任務(wù)crontab運(yùn)行的。
配置文件:
主配置文件的位置在 /etc/logrotate.conf,一般配置在 /etc/logrotate.d/子目錄下。
如系統(tǒng)默認(rèn)日志配置:
配置文件參數(shù):
更多信息請參考man logrotate幫助文檔
模板是通用的,而配置參數(shù)則根據(jù)你的需求進(jìn)行調(diào)整,不是所有的參數(shù)都是必要的。
在上面的配置文件中,我們只想要輪詢一個(gè)日志文件,size=50M 指定日志文件大小可以增長到 50MB,dateext 指 示讓舊日志文件以創(chuàng)建日期命名。
可自行參考/etc/logrotate.d/目錄下系統(tǒng)默認(rèn)的文件。
logrotate命令:
具體 logrotate 命令格式如下:
要為某個(gè)特定的配置調(diào)用 logrotate:
排障過程中的最佳選擇是使用-d選項(xiàng)以預(yù)演方式運(yùn)行 logrotate。要進(jìn)行驗(yàn)證,不用實(shí)際輪循任何日志文件, 可以模擬演練日志輪循并顯示其輸出。
正如我們從上面的輸出結(jié)果可以看到的,logrotate 判斷該輪循是不必要的。如果文件的時(shí)間小于一天,就會(huì)發(fā)生了。
強(qiáng)制輪循即使輪循條件沒有滿足,我們也可以通過使用-f選項(xiàng)來強(qiáng)制 logrotate 輪循日志文件,-v參數(shù)提供了詳細(xì)的輸出。
個(gè)人項(xiàng)目配置:
項(xiàng)目每天可產(chǎn)生20G左右的日志,顯示不能做每日輪詢,所以額外需要添加定時(shí)任務(wù)做每小時(shí),或者每隔多少分鐘。
如果輪詢?nèi)罩井惓?bào)錯(cuò)如下:
error: skipping “” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.”
需要加 su root root 選項(xiàng)。
同時(shí)添加定時(shí)任務(wù):
定時(shí)任務(wù)說明:
第一條,每隔40分鐘輪詢執(zhí)行一次logrotate任務(wù)。
第二條,每天凌晨4點(diǎn)刪除前一天的日志,原因如下:
由于項(xiàng)目系統(tǒng)產(chǎn)生日志格式的原因,會(huì)導(dǎo)致以下情況:
如果昨天的分割到4個(gè)后(或者1,2,3),時(shí)間到第二天后,沒法轉(zhuǎn)儲(chǔ)遞增,會(huì)一直停留在4,沒法刪除,每天會(huì)有,久而久之,也會(huì)占用磁盤空間。所以需要定時(shí)刪除。
設(shè)置完成
開啟定時(shí)任務(wù)日志,以便查看定時(shí)任務(wù)是否執(zhí)行。后續(xù)可取消。
重啟rsyslog