1.6.1 日志体系与/var/log结构
日志体系与/var/log结构#
Linux 日志体系由内核日志、系统服务日志、应用日志三部分组成,通常由 systemd-journald 与 rsyslog(或应用自带日志)协作完成。运维目标是保证日志完整、可追溯、可检索,并可通过轮转与归档控制磁盘占用。
原理草图(日志流转):
/var/log 关键目录与文件(含定位用途):
- /var/log/messages:RHEL/CentOS 通用系统日志
- /var/log/syslog:Debian/Ubuntu 通用系统日志
- /var/log/kern.log:内核日志
- /var/log/auth.log 或 /var/log/secure:认证/SSH/sudo
- /var/log/boot.log:启动过程
- /var/log/dmesg:内核启动快照
- /var/log/cron:计划任务
- /var/log/audit/:审计日志
- /var/log/journal/:journald 持久化日志
- /var/log/nginx/、/var/log/mysql/:应用日志
常用命令与解释:
# 1) 查看系统通用日志(实时跟踪)
tail -f /var/log/messages
# 作用:持续输出最新日志行,适合现场排障
# 2) 在 syslog 中搜索错误关键字
grep -i "error" /var/log/syslog
# 作用:快速定位错误类事件
# 3) 查看 systemd 服务的日志(最近 100 行)
journalctl -u sshd -n 100 --no-pager
# 作用:定位特定服务的启动/运行问题
# 4) 查看内核日志
dmesg | tail -n 50
# 作用:排查硬件/驱动相关异常
# 5) 统计登录失败次数(安全审计)
grep -i "failed password" /var/log/secure | wc -l
# 作用:识别暴力破解迹象
安装与持久化示例(journald 持久化配置):
# 1) 确认 systemd-journald 已安装(大多数发行版默认)
systemctl status systemd-journald
# 2) 配置持久化
sudo mkdir -p /var/log/journal
sudo sed -i 's/^#Storage=.*/Storage=persistent/' /etc/systemd/journald.conf
# 3) 重启服务并验证
sudo systemctl restart systemd-journald
journalctl --disk-usage
# 预期效果:/var/log/journal 下产生持久化日志
排错场景示例:日志未写入 /var/log
# 1) 检查 rsyslog 状态
systemctl status rsyslog
# 2) 检查 journald 是否接收
journalctl -n 20 --no-pager
# 3) 检查磁盘空间与权限
df -h /var/log
ls -ld /var/log
# 预期:磁盘未满,/var/log 权限正常(一般为 755,属主 root)
目录结构与命名规范建议:
- 以服务名为目录前缀:/var/log/nginx/、/var/log/mysql/
- 访问日志与错误日志分离:access.log / error.log
- 统一时间格式与编码,利于集中检索
练习:
1. 在你的系统上找出最近 5 分钟内的 SSH 登录失败记录。
2. 查看某个服务(如 nginx 或 sshd)的最近 50 行日志并总结异常。
3. 统计 /var/log 下占用空间最大的 5 个日志文件并写出原因分析。
练习参考命令:
# 1) 最近 5 分钟 SSH 失败(按实际日志文件选择)
journalctl -u sshd --since "5 min ago" | grep -i "failed"
# 2) 查看服务日志
journalctl -u sshd -n 50 --no-pager
# 3) 找出最大的 5 个日志文件
sudo du -ah /var/log | sort -hr | head -n 5