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。