13. 系统监控与日志
13.1 系统性能监控
bash
# vmstat — 虚拟内存统计(每2秒刷新)
vmstat 2 5
# iostat — IO 统计(需安装 sysstat)
iostat -xz 2 3
# sar — 系统活动报告(需安装 sysstat)
sar -u 1 5 # CPU 使用率
sar -r 1 5 # 内存使用率
sar -b 1 5 # IO 统计
# uptime — 系统负载
uptime
# dmesg — 内核消息
dmesg | tail -20
dmesg | grep -i errorbash
$ vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 247808 156340 23456 999232 0 0 2 15 89 156 5 1 93 1 0
0 0 247808 155216 23456 1000356 0 0 0 42 102 178 3 1 96 0 0
2 0 247808 154092 23456 1001480 0 0 0 28 95 168 4 1 95 0 0
$ uptime
10:30:45 up 15:23, 2 users, load average: 0.52, 0.48, 0.35
# load average 含义:1分钟/5分钟/15分钟的平均负载
# 对于 8 核 CPU,负载 0.52 表示系统非常空闲13.2 日志系统
Linux 的日志是排错的金矿。大多数日志保存在 /var/log/ 目录。
| 日志文件 | 内容 |
|---|---|
| /var/log/syslog(Debian) | 系统综合日志 |
| /var/log/messages(RHEL) | 系统综合日志 |
| /var/log/auth.log | 认证日志(登录、sudo) |
| /var/log/kern.log | 内核日志 |
| /var/log/dmesg | 硬件检测日志 |
| /var/log/apt/ | APT 包管理日志 |
| /var/log/nginx/ | Nginx 访问和错误日志 |
| /var/log/mysql/ | MySQL 日志 |
bash
# 实时查看系统日志
tail -f /var/log/syslog
# 搜索登录失败
grep "Failed password" /var/log/auth.log
# 查看 SSH 登录记录
journalctl -u ssh --since today
# 查看最近的内核错误
dmesg | grep -i "error\|fail" | tail -10
# 查看某个时间段的日志
grep "Jun 20 10:" /var/log/syslog | head -20bash
$ grep "Failed password" /var/log/auth.log | tail -5
Jun 20 08:15:23 server sshd[5678]: Failed password for invalid user admin from 45.33.32.156 port 48312 ssh2
Jun 20 08:15:25 server sshd[5678]: Failed password for invalid user admin from 45.33.32.156 port 48312 ssh2
Jun 20 09:22:14 server sshd[6789]: Failed password for root from 104.236.228.48 port 37216 ssh2
Jun 20 09:22:16 server sshd[6789]: Failed password for root from 104.236.228.48 port 37216 ssh2
Jun 20 10:05:30 server sshd[7890]: Failed password for invalid user test from 185.143.223.67 port 54512 ssh2⚠️ 注意: ⚠️ 安全提示:如果你看到大量 "Failed password" 来自陌生 IP,说明服务器正在被暴力破解。立即安装fail2ban来阻止这些攻击。
13.3 logrotate — 日志轮转
日志文件会不断增长,logrotate 负责自动压缩、轮转和删除旧日志。
bash
# 查看 logrotate 配置
cat /etc/logrotate.conf
# 查看特定应用的配置
cat /etc/logrotate.d/nginx
# 手动测试(不实际执行)
sudo logrotate -d /etc/logrotate.d/nginx
# 强制执行轮转
sudo logrotate -f /etc/logrotate.d/nginxNginx 日志轮转配置示例:
bash
/var/log/nginx/*.log {
daily # 每天轮转
missingok # 日志不存在时不报错
rotate 14 # 保留 14 个备份
compress # 压缩旧日志
delaycompress # 延迟一轮压缩
notifempty # 空日志不轮转
create 0640 www-data adm # 新日志的权限
sharedscripts # 所有日志轮转后只执行一次脚本
postrotate
[ -s /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}