CentOS環境下日志管理的核心技巧
journalctl -n 100
:查看最近100條日志;journalctl -k
:查看內核日志;journalctl -b
:查看本次啟動的日志;journalctl -f
:實時跟蹤日志變化;journalctl grep "error"
:搜索包含“error”的日志行(支持正則表達式)。tail -f /var/log/messages
(系統一般信息)、tail -f /var/log/secure
(安全日志,如SSH登錄)實時查看;用grep "keyword" /var/log/syslog
搜索特定關鍵詞。/etc/logrotate.conf
,設置基礎規則(如rotate 7
保留7天日志、compress
壓縮舊日志、missingok
日志丟失不報錯)。/etc/logrotate.d/
下創建服務專屬文件(如/etc/logrotate.d/nginx
),示例:/var/log/nginx/*.log {
daily # 每天輪轉
rotate 30 # 保留30個歸檔
compress # 壓縮舊日志
delaycompress # 延遲壓縮(下一次輪轉時壓縮上一次的歸檔)
missingok # 日志丟失不報錯
notifempty # 日志為空不輪轉
create 0640 nginx nginx # 新日志權限、屬主、屬組
sharedscripts # 所有日志輪轉完成后執行腳本
postrotate
/bin/kill -USR1 `cat /var/run/nginx.pid` 2>/dev/null || true # 通知nginx重新打開日志文件
endscript
}
sudo logrotate -f /etc/logrotate.d/nginx
強制輪轉(即使未到輪轉時間)。grep
:過濾關鍵詞(如grep "failed" /var/log/secure
查看登錄失敗記錄);awk
:提取特定字段(如awk '{print $1,$9}' /var/log/messages
提取時間戳和進程名);sort/uniq
:統計頻率(如grep "error" /var/log/syslog | sort | uniq -c | sort -nr
統計錯誤類型及次數)。sudo yum install logwatch && systemctl enable --now logwatch
)。access.log
),支持導出HTML/JSON報告(goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
)。journalctl --vacuum-time=1w
;journalctl --vacuum-size=500M
;journalctl --vacuum-by-service ssh.service
。find
命令刪除30天以上的.log
文件(謹慎操作,避免刪除正在使用的日志):find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
logrotate
的maxage
參數設置日志保留天數(如maxage 30
保留30天),或通過cron定時運行logrotate
(默認每天執行/etc/cron.daily/logrotate
)。640
(屬主root,屬組adm/syslog),防止未授權訪問:chown root:adm /var/log/messages
chmod 640 /var/log/messages
auditd
監控關鍵目錄(如/var/log
),記錄文件訪問/修改行為:
sudo yum install audit
;auditctl -w /var/log/ -p wa -k log_audit
(監控/var/log目錄的寫和屬性變更);ausearch -k log_audit
(查看審計日志)。/etc/rsyslog.conf
,添加:*.* @192.168.1.100:514 # UDP轉發(514端口)
*.* @@192.168.1.100:514 # TCP轉發(更可靠)
重啟rsyslog服務:systemctl restart rsyslog
。