# Linux系統下Logrotate服務介紹
## 一、Logrotate概述
### 1.1 什么是Logrotate
Logrotate是Linux系統中一個用于管理系統日志文件的實用工具,它可以自動對日志文件進行**輪轉(rotation)**、**壓縮**、**刪除**以及**郵件通知**等操作。該工具通過周期性地處理日志文件,有效解決了日志文件不斷增長導致的磁盤空間占用問題。
### 1.2 核心功能特性
- **自動輪轉**:按時間或大小條件創建新日志
- **壓縮歸檔**:支持gzip/bzip2/xz等多種壓縮方式
- **日志清理**:可配置保留的日志文件數量
- **郵件通知**:輪轉后可通過郵件發送日志內容
- **腳本擴展**:支持預執行和后執行自定義腳本
- **權限保持**:輪轉后保持原文件的屬主和權限
### 1.3 典型應用場景
- Web服務器日志管理(Nginx/Apache)
- 系統日志維護(/var/log/messages)
- 應用日志處理(MySQL/PHP-FPM)
- 安全審計日志輪轉
## 二、Logrotate工作原理
### 2.1 系統架構
```mermaid
graph TD
A[Logrotate主程序] --> B[讀取配置文件]
B --> C[檢查觸發條件]
C -->|滿足條件| D[執行輪轉操作]
D --> E[創建新日志文件]
D --> F[壓縮舊日志]
D --> G[執行自定義腳本]
通過cron定時任務觸發:
# 查看系統調度
cat /etc/cron.daily/logrotate
依賴系統郵件服務(如配置mail參數)
需要對應服務的配合(如通知服務重新打開日志文件)
各Linux發行版安裝命令:
發行版 | 安裝命令 |
---|---|
CentOS/RHEL | yum install logrotate |
Ubuntu/Debian | apt-get install logrotate |
Arch Linux | pacman -S logrotate |
驗證安裝:
logrotate --version
# 示例輸出:logrotate 3.18.0
/etc/logrotate.conf 示例:
# 全局設置
weekly # 每周輪轉
rotate 4 # 保留4個歷史版本
create # 輪轉后創建新文件
compress # 啟用壓縮
include /etc/logrotate.d # 包含子配置
# 系統日志特殊配置
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
在/etc/logrotate.d/下創建新配置(以Nginx為例):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
關鍵參數說明:
- daily
:每天輪轉
- missingok
:日志不存在時不報錯
- delaycompress
:延遲一次再壓縮
- sharedscripts
:所有日志輪轉完再執行腳本
# 按大小觸發(100M)
/var/log/app.log {
size 100M
rotate 5
}
# 混合條件(每周或超過50M)
/var/log/app.log {
weekly
size 50M
rotate 5
}
處理正在寫入的日志:
/var/log/mysql.log {
copytruncate # 先拷貝后清空
rotate 7
}
多日志文件配置:
/var/log/tomcat/*.log /var/log/tomcat/catalina.out {
daily
rotate 30
}
/var/log/secure.log {
monthly
rotate 6
compress
create 0600 root root
postrotate
/usr/libexec/secure-log-notify
endscript
}
Nginx日志輪轉優化配置:
/var/log/nginx/*log {
daily
rotate 365
compress
dateext
dateformat -%Y%m%d
extension .log
missingok
notifempty
sharedscripts
postrotate
/bin/kill -USR1 $(cat /run/nginx.pid 2>/dev/null) 2>/dev/null || true
endscript
}
MySQL慢查詢日志配置:
/var/log/mysql/mysql-slow.log {
weekly
rotate 8
create 640 mysql adm
delaycompress
postrotate
mysqladmin flush-logs
endscript
}
Java應用日志配置:
/opt/app/logs/*.log {
daily
rotate 30
compress
dateext
missingok
copytruncate
size 100M
}
問題1:輪轉后服務無法寫入新日志 - 檢查create參數權限設置 - 確認postrotate腳本正確通知服務
問題2:輪轉未按時執行
# 手動測試配置
logrotate -vf /etc/logrotate.d/nginx
強制運行并顯示詳細信息:
logrotate -d /etc/logrotate.conf # 調試模式
logrotate -v /etc/logrotate.conf # 詳細輸出
檢查狀態文件:
cat /var/lib/logrotate/status
delaycompress
missingok
nocompress
避免壓縮存儲su
參數指定用戶組:
/var/log/app.log {
su appuser appgroup
}
設置日志輪轉監控:
# 檢查最近輪轉記錄
grep logrotate /var/log/cron
# 監控配置變更
auditctl -w /etc/logrotate.d/ -p wa
建議對重要日志實施額外備份:
# 示例備份腳本
tar -czf /backup/logs-$(date +%Y%m%d).tar.gz /var/log/app/
工具 | 特點 | 適用場景 |
---|---|---|
Logrotate | 系統集成度高,配置靈活 | 通用日志管理 |
Apache rotatelogs | 與Web服務器深度集成 | Apache專用 |
Systemd-journald | 二進制日志,結構化存儲 | Systemd系統 |
容器內日志管理方案:
# Dockerfile示例
RUN apt-get install -y logrotate && \
mkdir /etc/logrotate.d/myapp
COPY myapp-logrotate /etc/logrotate.d/myapp
AWS環境下的特殊配置:
/var/log/ec2/*.log {
size 100M
rotate 5
lastaction
aws s3 cp /var/log/ec2 s3://my-bucket/logs/ --recursive --exclude "*" --include "*.gz"
endaction
}
Logrotate作為Linux系統日志管理的標準工具,通過合理的配置可以: - 有效控制系統日志增長 - 保持日志文件的可管理性 - 滿足合規性要求 - 降低存儲成本
建議結合具體業務需求: 1. 關鍵業務日志延長保留周期 2. 高頻日志適當增加輪轉頻率 3. 對性能敏感服務使用copytruncate模式 4. 定期審計日志配置有效性
通過本文介紹的配置方法和最佳實踐,用戶可以構建出高效可靠的日志管理系統。
附錄:常用命令速查
# 手動立即執行輪轉
logrotate -f /etc/logrotate.d/app
# 測試配置文件語法
logrotate -d /etc/logrotate.d/nginx
# 查看最后執行時間
grep logrotate /var/log/syslog | tail -n 5
”`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。