日誌切分神器--logrotate
阿新 • • 發佈:2020-11-14
> Blog:[部落格園](https://www.cnblogs.com/Rohn/) [個人](https://k8sdev.com/)
## 概述
還在自己寫定時切分日誌的指令碼?試試系統自帶的logrotate工具吧!
logrotate是一個日誌檔案管理工具。用於分割日誌檔案,刪除舊的日誌檔案,並建立新的日誌檔案,起到**轉儲**的作用,便於節省磁碟空間。
## 配置
### 配置檔案
Linux系統預設安裝logrotate,預設配置檔案如下:
- */etc/logrotate.conf*:主配置檔案,logrotate.d是一個目錄,該目錄裡的所有檔案都會被主動的讀入*/etc/logrotate.conf*中執行。
- */etc/logrotate.d/*:用於存放不同程式自定義切分配置
### 執行原理
Logrotate是基於**CRON**來執行的,其指令碼是*/etc/cron.daily/logrotate*,日誌輪轉是系統自動完成的。
實際執行時,Logrotate會呼叫配置檔案*/etc/logrotate.conf*。可以在*/etc/logrotate.d*目錄裡放置自定義好的配置檔案,用來覆蓋Logrotate的預設值。
*/etc/cron.daily/logrotate*指令碼如下:
```bash
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
```
### 配置引數說明
| 配置引數 | 說明 |
| :--------------------: | ------------------------------------------------------------ |
| create | 自動建立新的日誌檔案,新的日誌檔案具有和原來的檔案相同的許可權;因為日誌被改名,因此要建立一個新的來繼續儲存之前的日誌 |
| rotate n | 保留多少個日誌檔案(輪轉幾次),n可以是0,1,2,3...,如果n為0,則沒有備份。 |
| dateext | 就是切割後的日誌檔案以當前日期為格式結尾 |
| compress | 是否通過gzip壓縮轉儲以後的日誌檔案,如xxx.log-20201111.gz |
| nocompress | 不做gzip壓縮處理,與compress互斥 |
| missingok | 在日誌輪循期間,任何錯誤將被忽略,例如“檔案無法找到”之類的錯誤。 |
| notifempty | 如果日誌檔案為空,輪循不會進行。 |
| create 0664 nginx root | 以指定的許可權建立全新的日誌檔案,同時logrotate也會重新命名原始日誌檔案。 |
| postrotate | 在所有其它指令完成後,postrotate裡面指定的命令將被執行。 |
## lograte命令
語法格式如下:
```bash
logrotate [OPTION...]
```
### 引數說明
| 引數 | 說明 |
| :--: | ----------------------------------- |
| -d | debug模式,測試配置檔案是否有錯誤。 |
| -f | 強制轉儲檔案。 |
| -m | 壓縮日誌後,傳送日誌到指定郵箱。 |
| -s | 使用指定的狀態檔案。 |
| -v | 顯示轉儲過程。 |
## 案例
以nginx日誌切分為例,建立*/etc/logrotate.d/nginx*:
```
/var/log/nginx/*log {
create 0664 nginx root
daily
rotate 10
dateext
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
```
手動強制切分日誌:
```bash
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx
```
效果如下:
![image-20201112110725767](https://rohn-web.oss-cn-hangzhou.aliyuncs.com/img/blog/image-20201112110725767.png?x-oss-process=style/