国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用logrotate完成日志自動切分并輪轉(zhuǎn)

raise_yang / 3252人閱讀

摘要:日志文件總管日志輪轉(zhuǎn)工具可以自動對日志文件提供截斷壓縮以及輪轉(zhuǎn)的功能。使用假設(shè)我們現(xiàn)在有一個日志文件存儲在,需要對其每日進行切分為新舊兩個日志文件,并刪除天前的舊日志。以后系統(tǒng)就會對該日志進行自動的輪轉(zhuǎn)管理。

部署網(wǎng)絡(luò)應(yīng)用時,會對請求進行日志保存,用于數(shù)據(jù)統(tǒng)計分析以及故障排除,但對于高并發(fā)請求的服務(wù)器,日志文件會迅速增長,快速的消耗磁盤空間,同時,分析一個大文件來排查問題也會非常慢。因此,我們通常需要將日志按照天級別進行存儲,并對過舊的日志進行壓縮轉(zhuǎn)存或刪除,方便節(jié)省磁盤空間和進行腳本分析。

當我第一次有這種需求的時候,最先想到的是crontab腳本定時執(zhí)行日志清理腳本。就是先編寫一個cleanLog.sh,然后讓crontab定期的來執(zhí)行它。這個方法可行,但是比較麻煩費事,此時一個Linux內(nèi)置的工具就比較有用了:logrotate

logrotate: Linux日志文件總管

logrotate(日志輪轉(zhuǎn)工具)可以自動對日志文件提供截斷、壓縮以及輪轉(zhuǎn)的功能。

logrotate工具默認安裝在linux機器上,全局命令在/usr/sbin/logrotate,另外還包含兩個配置文件:

// 全局配置文件,存儲的為公用的默認配置項
/etc/logrotate.conf
// 子項配置文件夾,該文件夾下提供一些系統(tǒng)級別的日志配置,你的自定義配置也需要配置在這里
/etc/logrotate.d/

這個工具能做到自動執(zhí)行的功能,其實還是依賴于crontab工具,只不過這些設(shè)定系統(tǒng)自動完成了,我們可以查看crontab系統(tǒng)級別的日運行腳本:

$ vim /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

可以看到在crontab的日級別配置文件目錄下有一個logrotate子項,它會每天執(zhí)行logrotate命令,調(diào)用的配置為/etc/logrotate.conf

在實際執(zhí)行中,logrotate命令會先讀取/etc/logrotate.conf的配置作為默認項,然后再依次讀取/etc/logrotate.d/目錄下的各文件配置來覆蓋默認項,并執(zhí)行日志輪轉(zhuǎn)功能。

logrotate命令
語法:logrotate [OPTION...] 
參數(shù)說明:
-d, --debug :debug模式,測試配置文件是否有錯誤。
-f, --force :強制轉(zhuǎn)儲文件。
-m, --mail=command :壓縮日志后,發(fā)送日志到指定郵箱。
-s, --state=statefile :使用指定的狀態(tài)文件。
-v, --verbose :顯示轉(zhuǎn)儲過程。
logrotate使用

假設(shè)我們現(xiàn)在有一個日志文件存儲在/home/work/log/nginx.access.log,需要對其每日進行切分為新舊兩個日志文件,并刪除7天前的舊日志。

首先我們創(chuàng)建新的日志輪轉(zhuǎn)配置:

$vim /etc/logrotate.d/nginxAccessLog
# 指定需要輪轉(zhuǎn)處理的日志文件
/home/work/log/nginx.access.log {
    # 日志文件輪轉(zhuǎn)周期,可用值為: daily/weekly/yearly
    daily
    # 新日志文件的權(quán)限
    create 0664 work work
    # 輪轉(zhuǎn)次數(shù),即最多存儲7個歸檔日志,會刪除最久的歸檔日志
    rotate 7
    # 以當前日期作為命名格式
    dateext
    # 輪循結(jié)束后,已歸檔日志使用gzip進行壓縮
    compress
    # 與compress共用,最近的一次歸檔不要壓縮
    delaycompress
    # 忽略錯誤信息
    missingok
    # 日志文件為空,輪循不會繼續(xù)執(zhí)行
    notifempty
    # 當日志文件大于指定大小時,才繼續(xù)執(zhí)行,單位為bytes(默認)/k/M/G
    size = 100M
    # 將日志文件轉(zhuǎn)儲后執(zhí)行的命令,以endscript結(jié)尾,命令需要多帶帶成行
    postrotate
        # 重啟nginx日志服務(wù),寫入到新的文件中去,否則會依然寫入重命名后的文件中
        /bin/kill -USR1 `cat /home/work/run/nginx.pid 2> /dev/null` 2> /dev/null || true
        # 默認logrotate會以root身份運行,如果想要以其他身份執(zhí)行一個命令,可以這樣使用:
        #su - work -c "/home/work/odp/webserver/loadnginx.sh restart"
    endscript
}

在使用前,我們先演練一下,也就是debug模式,此時,不用實際輪循,而是模擬并輸出,使用強制執(zhí)行是因為還沒到輪循周期:

$logrotate -d -f /etc/logrotate.d/nginxAccessLog 
reading config file /etc/logrotate.d/nginxAccessLog
reading config info for /home/work/log/nginx.access.log

Handling 1 logs

rotating pattern: /home/work/log/nginx.access.log forced from command line (7 rotations)
empty log files are rotated, old logs are removed
considering log /home/work/log/nginx.access.log
  log needs rotating
rotating log /home/work/log/nginx.access.log, log->rotateCount is 7
dateext suffix "-20190228"
glob pattern "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
glob finding old rotated logs failed
renaming /home/work/log/nginx.access.log to /home/work/log/nginx.access.log-20190228
creating new /home/work/log/nginx.access.log mode = 0664 uid = 500 gid = 501
running postrotate script
running script with arg /home/work/log/nginx.access.log: "
        /bin/kill -USR1 `cat /home/work/run/nginx.pid 2> /dev/null` 2> /dev/null || true
"

可以看到整個執(zhí)行流程,以及沒有什么報錯信息,此時我們直接繼續(xù)執(zhí)行:

$logrotate -f /etc/logrotate.d/nginxAccessLog
$ll /home/work/lnmp/log/                      
-rw-r--r-- 1 work work          0 Feb 28 13:40 nginx.access.log
-rw-r--r-- 1 work work    5379846 Feb 28 13:37 nginx.access.log-20190228

可以看到我們已經(jīng)對日志進行了切分,最新的日志文件大小為0。以后系統(tǒng)就會對該日志進行自動的輪轉(zhuǎn)管理。

參考資料

Linux日志文件總管——logrotate:https://linux.cn/article-4126...

logrotate-(8) manual page:https://linuxconfig.org/logro...

運維中的日志切割操作梳理:https://www.cnblogs.com/kevin...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/40363.html

相關(guān)文章

  • 使用 Fluentd 管理 Docker 日志

    摘要:使用管理日志標簽空格分隔日志管理本文作者是,本文原文地址是當前版本的一個問題就是日志管理。任何長時間運行的進程產(chǎn)生的日志都是冗長的,這會導(dǎo)致仔細檢查非常困難。所有文件這時能被轉(zhuǎn)發(fā)到一個中央日志系統(tǒng)。 使用 Fluentd 管理 Docker 日志 標簽(空格分隔): Fluentd Docker 日志管理 本文作者是 jwilder,本文原文地址是 Docker Log M...

    Hujiawei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<