Linux 运维与安全专家 10 · 日志监控与性能分析

第 10 章 · 日志监控与性能分析

阶段 C预计 6–7 小时替代面板的核心

你羡慕的「随时查服务器状态、被攻击能及时从日志发现」全在这章:日志体系怎么读、实时状态怎么盯、硬件健康怎么查、性能瓶颈怎么定位、监控告警怎么搭。学完你将拥有比宝塔更细、更快的状态感知能力。

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.logWeb 访问与错误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/内存/磁盘/网络)

瓶颈现象定位命令常见对策
CPUload 高、进程 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监控告警搭建:从小到大的三步走

第一步:脚本告警(零成本,立刻能上)

终端 · 磁盘告警脚本示例(cron 每 10 分钟跑)
# /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 都能装)

终端 · 安装 Cockpit
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 章集群监控会展开)。

本章自测题

  1. Ubuntu 与 Rocky 的认证日志文件各是什么?统计爆破来源 IP 排行用什么命令?
  2. journalctl 和 /var/log 什么关系?实时跟踪 nginx 服务日志用什么?
  3. logrotate 的作用;磁盘快满时排查步骤?
  4. CPU/内存/磁盘/网络瓶颈各用哪个命令看?(各一个)
  5. 查看磁盘 SMART 状态、CPU 温度各用什么命令?
  6. sysstat 有什么用?为什么推荐生产装它?
  7. 「轻量替代面板看状态」的最小可行方案是什么?
参考答案
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 看状态/日志/服务)。