- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會(huì )理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構許可:滇D3-20230001
- 代理域名注冊服務(wù)機構:新網(wǎng)數碼
程序在運行的時(shí)候為了了解運行狀態(tài),會(huì )輸出日志文件,時(shí)間久了日志文件會(huì )變得非常大,甚至達到GB級別。我在golang應用里使用logrus包來(lái)打日志,配置和使用都很方便,就是沒(méi)有日志分割的功能,應用在線(xiàn)上運行一個(gè)月后日志文件都已經(jīng)達到上百兆。后來(lái)發(fā)現了logrotate,這是centos自帶的日志分割工具,都不用安裝額外組件就能實(shí)現定時(shí)分割日志。
1.運行原理
logrotate由系統的cron運行,位置在/etc/cron.daily/logrotate
1 2 3 4 5 6 7 | #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate .status /etc/logrotate .conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 |
可以看到入口配置文件是/etc/logrotate.conf,依次運行/etc/logrotate.conf.d里的配置文件 如果發(fā)現配置的logrotate沒(méi)有執行,可以看下系統的crond服務(wù)有沒(méi)有開(kāi)啟
2.配置
如果有安裝nginx,可以參考nginx里的配置例子
1 2 3 4 5 6 7 8 9 10 11 12 | /var/log/nginx/ *log { create 0644 nginx nginx daily rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 ` cat /run/nginx .pid 2> /dev/null ` 2> /dev/null || true endscript } |
第一行定義的是日志文件的路徑,可以用*通配,一般可以定義成*.log來(lái)匹配所有日志文件。也可以指定多個(gè)文件,用空格隔開(kāi),比如
1 2 3 | /var/log/nginx/access .log /var/log/nginx/error .log { } |
花括號里面是日志切割相關(guān)的參數,下面是常用的切割參數
compress 是否開(kāi)啟壓縮,壓縮格式gzip
不開(kāi)啟壓縮
compresscmd 自定義壓縮命令
compressexty 壓縮文件名后綴
compressoptions 壓縮選項
copy 復制一份文件
create 后面跟mode owner group,設置新日志文件的權限
daily 按天分割
weekly 按周分割
monthly 按月分割
rotate 后面跟數字,表示需要保留的文件歷史記錄,超過(guò)數量就會(huì )刪除,或者通過(guò)郵件發(fā)送
size 后面跟文件大小,比如100k、100M,超過(guò)這個(gè)大小后分割
missingok 忽略不存在的文件,不報錯
notifempty 不分割空文件
sharedscripts 配合postrotate、prerotate,讓他們只執行一次
postrotate/endscript 文件分割完后,執行postrotate、endscript之間的命令
prerotate/endscript 文件分割完前,執行prerotate、endscript之間的命令
下面看幾個(gè)例子
1 2 3 4 5 6 7 8 9 | /var/log/httpd/error .log { rotate 5 mail i@wuyuans.com size=100k sharedscripts postrotate /sbin/killall -HUP httpd endscript } |
切割/var/log/httpd/error.log日志文件,超過(guò)100k后切割,保留最新的5個(gè)歷史記錄,超過(guò)5個(gè)的郵件發(fā)送到fss@qq.com,postrotate里的的命令是為了讓httpd重新打開(kāi)日志文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /var/lib/mysql/mysqld .log { # create 600 mysql mysql notifempty daily rotate 3 missingok compress postrotate # just if mysqld is really running
|