第 10 章 · 日志监控与性能分析
你羡慕的「随时查服务器状态、被攻击能及时从日志发现」全在这章:日志体系怎么读、实时状态怎么盯、硬件健康怎么查、性能瓶颈怎么定位、监控告警怎么搭。学完你将拥有比宝塔更细、更快的状态感知能力。
10.1日志体系总览:一切异常的第一现场
Linux 日志分两大体系,排障时两个都看:
| 体系 | 位置/命令 | 典型内容 |
|---|---|---|
| journald(systemd 统一日志) | journalctl | 服务启动/崩溃、内核消息、开机过程;二进制格式,按服务/级别/时间过滤(第 7 章已用) |
| rsyslog 文本日志 | /var/log/ | 认证、系统、应用自己的业务日志,纯文本可 grep |
| 文件 | 内容 | 主要系统 |
|---|---|---|
/var/log/auth.log / secure | 登录/认证/sudo 记录(爆破与入侵取证主战场) | Ubuntu / Rocky |
/var/log/syslog / messages | 系统与杂项服务日志 | Ubuntu / Rocky |
/var/log/kern.log / dmesg | 内核日志(硬件/驱动/panic) | Ubuntu / Rocky |
/var/log/nginx/access.log / error.log | Web 访问与错误 | Nginx(第 12 章) |
/var/log/mysql/ 等 | 各服务自己的日志目录 | 随服务 |
/var/log/cron / syslog 里的 CRON | 定时任务执行记录 | Rocky / Ubuntu |
/var/log/boot.log | 开机过程 | Rocky 系 |
/var/log/lastlog wtmp btmp | 登录记录(last/lastlog/lastb 读它) | 通用 |
日志阅读姿势
实时跟踪用
tail -f 文件 或 journalctl -u 服务 -f;大文件搜索用 grep + less;关键节点记住:auth.log/secure(认证)、syslog/messages(系统)、dmesg(内核硬件)、服务自身目录(业务)。
10.2日志轮转:不让日志吃满磁盘
logrotate 按大小/周期自动切割压缩旧日志,避免 /var/log 无限增长写满磁盘。
sudo logrotate -vf /etc/logrotate.conf # 手动强制执行一次
# /etc/logrotate.d/ 下每个服务一个文件,示例(nginx):
/var/log/nginx/*.log {
daily # 每天轮转
rotate 14 # 保留 14 份
compress # 压缩旧日志
missingok
notifempty
postrotate
systemctl reload nginx # 轮转后让服务重开日志句柄
endscript
}
排查「磁盘突然满了」:df -h 看分区 → du -sh /var/log/* | sort -h 找大头 → 对应处理(清空用 > 文件 或 logrotate,别直接删正在写的日志文件)。
10.3实时状态全家桶:面板背后就是这些命令
uptime # 负载 1/5/15 分钟(load average)
free -h # 内存与 swap
top / htop # 实时进程(P=CPU M=内存 1=每核)
df -h # 磁盘空间
iostat -x 2 # 磁盘 IO 详情(util% 高=磁盘忙)
mpstat -P ALL 2 # 每核 CPU 使用(多核不均=单线程瓶颈)
ss -s # 连接数统计
ss -tunap | wc -l # 当前连接数
iftop # 实时流量排行(需安装)
nethogs eth0 # 按进程看流量(谁在狂下载)
sar -n DEV 1 3 # 网卡吞吐采样(sysstat 包)
sar -q # 负载历史(排查过去的峰值)
# 历史性能存档:开启 sysstat 的 cron 采集,事后可回溯“昨天几点 CPU 爆了”
安装补充
htop/iftop/nethogs/sysstat 用
apt install htop iftop nethogs sysstat 或 dnf install 装齐。生产服务器建议装 sysstat(自带 cron 每 10 分钟采一次历史),事后回溯性能问题全靠它。
10.4硬件健康:怎么保证所有硬件都正常
lscpu / nproc # CPU 信息/核数
free -h # 内存总量与使用
lsblk / smartctl -a /dev/sda # 磁盘;SMART 看坏道与寿命(smartctl 需 smartmontools)
lspci | grep -iE "vga|ethernet|raid" # 硬件识别(显卡/网卡/阵列卡)
lsusb # USB 设备
sensors # CPU/主板温度(lm-sensors,需先 sensors-detect)
dmesg | grep -iE "error|fail|firmware" | tail # 内核报错与固件告警
sudo dmesg -T | tail -50 # 最近的硬件/驱动事件(插拔、超时)
fwupdmgr get-updates # 固件更新(fwupd,笔记本/物理机)
ubuntu-drivers devices # Ubuntu 显卡驱动建议(NVIDIA 用户)
modinfo 驱动名 / lsmod | grep 驱动 # 内核模块加载情况
物理机/自建机房重点
定期看
smartctl -a(磁盘寿命)、温度(sensors)、dmesg -T(硬件事件);配合第 17 章故障手册,磁盘报 SMART 错误要立刻备份并计划换盘。云主机这些大多由厂商代管,重点看实例监控即可。
10.5性能瓶颈定位四象限(CPU/内存/磁盘/网络)
| 瓶颈 | 现象 | 定位命令 | 常见对策 |
|---|---|---|---|
| CPU | load 高、进程 CPU 100% | top 按 P 排、mpstat -P ALL、ps --sort=-%cpu | 优化代码、加核/换机型、限制进程(nice/cgroup) |
| 内存 | free 几乎为 0、swap 持续使用、OOM 杀进程 | free -h、top 按 M 排、dmesg | grep -i oom | 加内存、查泄漏(长期增长)、调整服务内存限制 |
| 磁盘 | iowait 高、util≈100%、写入慢 | iostat -x 2、iotop、df -i(inode 满) | 换 SSD、优化查询/写入、日志轮转、清理大文件 |
| 网络 | 带宽打满、连接数爆、延迟高 | iftop、sar -n DEV、ss -s、tcpdump | 限流、加带宽、上 CDN/负载均衡(第 14 章) |
判断套路:先 uptime(负载)→ top(谁在吃 CPU/内存)→ iostat(磁盘)→ iftop/sar(网络)。四象限里先排除最直观的,再深入。
10.6监控告警搭建:从小到大的三步走
第一步:脚本告警(零成本,立刻能上)
# /usr/local/bin/disk_alert.sh
#!/bin/bash
USE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USE" -gt 85 ]; then
echo "磁盘 / 使用率 ${USE}% 告警" | mail -s "磁盘告警" you@example.com
# 或推送到企业微信/钉钉/飞书机器人 webhook
curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=XXX" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"磁盘告警 ${USE}%\"}}"
fi
第二步:轻量 Web 监控(Cockpit,Rocky/Ubuntu 都能装)
sudo apt install cockpit # Ubuntu
sudo dnf install cockpit # Rocky
sudo systemctl enable --now cockpit.socket
# 浏览器访问 https://服务器IP:9090,用系统账号登录:实时状态/日志/服务管理
这就是「宝塔替代」的轻量答案之一
Cockpit 是红帽官方出的轻量 Web 管理(无广告、无全家桶、资源占用极小),能看状态、管服务、看日志 —— 满足你「随时查服务器状态、看攻击日志」的 80% 需求。第 12 章会给出完整替代方案对比。
第三步:企业级监控(生产多机必学)
| 方案 | 特点 | 适合 |
|---|---|---|
| Prometheus + Grafana | 云原生事实标准:抓取指标 + 漂亮大盘 + 告警;学习曲线中等,生态极强 | 容器/微服务/多机监控(第 13/14 章会用) |
| Zabbix | 老牌传统监控:agent 采集 + 自动发现 + 告警,功能全 | 传统服务器机房、网络设备 |
| Uptime Kuma / 云厂商监控 | 轻量可用性监控(HTTP ping)+ 云控制台自带监控告警 | 个人/小团队快速起步 |
选型建议:先做「脚本告警 + 云监控」过渡,2–3 台以上机器再上 Prometheus+Grafana(第 14 章集群监控会展开)。
本章自测题
- Ubuntu 与 Rocky 的认证日志文件各是什么?统计爆破来源 IP 排行用什么命令?
- journalctl 和 /var/log 什么关系?实时跟踪 nginx 服务日志用什么?
- logrotate 的作用;磁盘快满时排查步骤?
- CPU/内存/磁盘/网络瓶颈各用哪个命令看?(各一个)
- 查看磁盘 SMART 状态、CPU 温度各用什么命令?
- sysstat 有什么用?为什么推荐生产装它?
- 「轻量替代面板看状态」的最小可行方案是什么?
参考答案
1. auth.log(Rocky: secure);sudo grep "Failed password" 文件 | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn
2. journald 管服务/内核日志,/var/log 是文本日志与应用业务日志;journalctl -u nginx -f。
3. 自动切割压缩旧日志防磁盘写满;df -h 看分区 → du -sh /var/log/* 找大头 → logrotate/清空处理。
4. top/mpstat;free -h;iostat -x;iftop / sar -n DEV。
5. smartctl -a /dev/sda;sensors。
6. 定时采集性能历史;事后能回溯“几点发生了什么”(生产排障刚需)。
7. 脚本告警(df 检查+webhook)+ Cockpit(Web 看状态/日志/服务)。