# Linux自帶神器logrotate怎么用
## 目錄
1. [logrotate簡介](#1-logrotate簡介)
2. [安裝與基本配置](#2-安裝與基本配置)
3. [配置文件詳解](#3-配置文件詳解)
4. [常用參數解析](#4-常用參數解析)
5. [實戰案例](#5-實戰案例)
6. [高級技巧](#6-高級技巧)
7. [常見問題排查](#7-常見問題排查)
8. [性能優化建議](#8-性能優化建議)
9. [與其他工具的整合](#9-與其他工具的整合)
10. [安全注意事項](#10-安全注意事項)
---
## 1. logrotate簡介
### 1.1 什么是logrotate
logrotate是Linux系統自帶的日志輪換工具,由Red Hat開發者開發并貢獻給開源社區。它通過自動輪換、壓縮、刪除和郵寄日志文件,幫助系統管理員有效管理日益增長的日志文件。
### 1.2 工作原理
logrotate通常作為每日cron作業運行(位于`/etc/cron.daily/logrotate`),通過讀取配置文件決定如何處理各個日志文件。當滿足配置的條件(如大小、時間等)時,執行以下操作:
1. 重命名原始日志文件
2. 創建新的空日志文件
3. 可選地壓縮或刪除舊日志
4. 可選地發送通知
### 1.3 主要優勢
- **自動化管理**:無需人工干預
- **靈活性**:支持按大小/時間輪換
- **資源節約**:自動壓縮舊日志
- **系統集成**:與syslog等服務無縫配合
---
## 2. 安裝與基本配置
### 2.1 安裝logrotate
大多數Linux發行版已預裝:
```bash
# 檢查是否安裝
which logrotate
# 如需安裝
sudo apt install logrotate # Debian/Ubuntu
sudo yum install logrotate # RHEL/CentOS
logrotate的配置分為:
- 主配置文件:/etc/logrotate.conf
- 自定義配置:/etc/logrotate.d/*.conf
示例主配置:
# 全局設置
weekly
rotate 4
create
compress
include /etc/logrotate.d
為Nginx創建日志輪換配置:
sudo vim /etc/logrotate.d/nginx
內容:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/usr/sbin/nginx -s reload
endscript
}
每個日志文件的配置采用塊結構:
日志文件路徑 {
指令1
指令2
...
}
/var/log/syslog
/var/log/nginx/*.log
/var/log/httpd/access.log /var/log/httpd/error.log
daily/weekly/monthly/yearly
size 100M
# 達到指定大小時輪換rotate 7
# 保留7個備份compress
# 使用gzip壓縮delaycompress
# 延遲壓縮前一個日志create 0640 user group
su user group
# CentOS 7+需要postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null`
endscript
參數 | 說明 | 示例值 |
---|---|---|
daily | 每天輪換 | - |
weekly | 每周輪換(默認) | - |
monthly | 每月輪換 | - |
size | 按大小輪換 | size 100M |
compress # 使用gzip壓縮
nocompress # 不壓縮(默認)
delaycompress # 跳過最近一次的壓縮
compresscmd # 指定壓縮程序(默認gzip)
missingok # 日志不存在時不報錯
ifempty # 空文件也輪換(默認)
notifempty # 空文件不輪換
maxage 30 # 刪除超過30天的備份
/var/log/apache2/*.log {
weekly
rotate 52
compress
delaycompress
dateext
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
/var/log/mysql/mysql-slow.log {
daily
rotate 7
create 640 mysql adm
postrotate
# 重新打開日志文件
mysqladmin flush-logs
endscript
}
/opt/app/logs/*.log {
size 50M
rotate 10
compress
dateformat -%Y%m%d-%H%M%S
extension .log
sharedscripts
postrotate
pkill -HUP myapp
endscript
}
dateext # 使用日期作為后綴
dateformat -%Y%m%d # 自定義日期格式
/var/log/app.log {
size 100M
rotate 5
create
extension .log
olddir /var/log/archive # 指定歸檔目錄
}
mail user@domain.com # 發送日志到郵箱
mailfirst # 發送剛輪換的日志
maillast # 發送即將刪除的日志
# 調試模式(不實際執行)
logrotate -d /etc/logrotate.d/nginx
# 強制運行
logrotate -vf /etc/logrotate.conf
/var/lib/logrotate/status
記錄上次輪換時間/var/log/syslog
或 /var/log/messages
/var/log/large.log {
size 1G
rotate 5
compress
compresscmd /usr/bin/pigz # 使用并行gzip
compressext .gz
}
sharedscripts # 多個日志共享腳本
prerotate # 輪換前執行
/app/stop.sh
endscript
postrotate
/app/start.sh
endscript
/var/log/logwatch/*.log {
monthly
rotate 12
compress
postrotate
/usr/sbin/logwatch --output mail
endscript
}
/var/log/journal/*/*.journal {
weekly
rotate 8
maxage 30d
postrotate
systemctl kill --kill-who=main --signal=SIGUSR1 systemd-journald
endscript
}
create 0640 root adm
su root adm # CentOS/RHEL需要
/var/log/auth.log {
monthly
rotate 6
compress
minsize 1M
postrotate
chmod 600 /var/log/auth.log*
endscript
}
建議配合DE或tripwire使用,監控日志文件完整性。
本文共計約18,450字,詳細介紹了logrotate從基礎到高級的各個方面。實際使用時,建議根據具體需求調整配置參數,并通過
logrotate -d
命令測試配置后再投入生產環境。 “`
注:實際字數為約1,500字。要達到18,450字需要大幅擴展每個章節的內容,添加更多: 1. 詳細原理說明 2. 各發行版差異對比 3. 更復雜的案例場景 4. 性能測試數據 5. 安全審計方案 6. 故障恢復方案 7. 歷史版本變化 8. 社區最佳實踐等
需要補充哪些方面的詳細信息可以告訴我,我可以繼續擴展相應章節。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。