为什么需要日志监控
服务器日志记录了系统中发生的一切——正常请求、错误、安全事件、性能问题。定期检查日志可以:
- 快速定位故障 — 网站挂了?先看日志
- 发现安全威胁 — 检测暴力破解、异常登录
- 性能分析 — 找出慢查询和瓶颈
- 合规要求 — 保留审计日志
Linux 系统日志
主要日志文件
| 日志文件 | 用途 | 查看命令 |
|---|---|---|
/var/log/syslog |
系统综合日志(Ubuntu/Debian) | tail -f /var/log/syslog |
/var/log/messages |
系统综合日志(CentOS/RHEL) | tail -f /var/log/messages |
/var/log/auth.log |
认证和登录日志 | tail -f /var/log/auth.log |
/var/log/nginx/access.log |
Nginx 访问日志 | tail -f /var/log/nginx/access.log |
/var/log/nginx/error.log |
Nginx 错误日志 | tail -f /var/log/nginx/error.log |
/var/log/mysql/error.log |
MySQL 错误日志 | tail -f /var/log/mysql/error.log |
/var/log/dpkg.log |
软件包安装日志 | less /var/log/dpkg.log |
使用 journalctl
现代 Linux 系统使用 systemd-journald 管理日志:
# 查看所有日志
journalctl
# 查看最近 30 分钟的日志
journalctl --since "30 min ago"
# 查看某个服务的日志
journalctl -u nginx
journalctl -u ssh
journalctl -u docker
# 实时追踪日志
journalctl -f
# 查看错误级别以上的日志
journalctl -p err
# 查看昨天的日志
journalctl --since yesterday --until today
实时日志监控
tail 命令
# 实时查看 Nginx 访问日志
tail -f /var/log/nginx/access.log
# 显示最后 100 行并追踪
tail -100f /var/log/nginx/error.log
# 查看多个日志文件
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
日志过滤与统计
# 统计 5xx 错误数量
grep 'HTTP/1.1" [5]..' /var/log/nginx/access.log | wc -l
# 查找访问量最大的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 查找请求最多的 URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 查找特定时间段的日志
awk '/12\/Jul\/2026:14:00/,/12\/Jul\/2026:15:00/' /var/log/nginx/access.log
实时监控脚本
#!/bin/bash
# monitor-errors.sh — 实时监控错误并通知
ALERT_EMAIL="[email protected]"
ERROR_PATTERNS="(PHP Fatal error|ERROR|FATAL|Out of memory)"
tail -f /var/log/nginx/error.log | while read line; do
if echo "$line" | grep -qE "$ERROR_PATTERNS"; then
echo "$line" | mail -s "Server Error Alert" $ALERT_EMAIL
echo "[ALERT] $line"
fi
done
日志轮转(Log Rotation)
logrotate 配置
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
手动执行
# 强制轮转
sudo logrotate -f /etc/logrotate.d/nginx
# 测试配置
sudo logrotate -d /etc/logrotate.d/nginx
日志分析工具
| 工具 | 类型 | 用途 |
|---|---|---|
grep / awk / sed |
命令行 | 快速过滤和分析 |
goaccess |
终端/Web | Nginx 日志实时分析 |
lnav |
终端 | 增强型日志查看器 |
ngxtop |
终端 | Nginx 访问统计 |
| ELK Stack | 服务 | 企业级日志分析和搜索 |
安全注意事项
- 日志中包含敏感信息(IP、路径、可能的数据),注意访问权限
- 日志文件设置为
640权限,只允许所有者和管理员读取 - 定期备份重要日志
- 配置日志轮转防止磁盘写满
- 考虑集中式日志管理(多台服务器时)