Linux 从被动救火到主动运维的转变

8次阅读

journalctl -f 不能代替监控告警,因其被动性需人工盯屏,而告警可主动推送;应提炼日志为可量化指标、分层健康检查、多维磁盘监控、自动化资源采集,实现真正主动运维。

Linux 从被动救火到主动运维的转变

为什么 systemdjournalctl -f 不能代替监控告警

因为日志流是被动的,你得盯着看;而告警是主动的,问题发生时它会推给你。很多团队把 journalctl -f 当成“实时监控”,结果线上出事时还在翻屏找 Failed with result 'exit-code' —— 这不是运维,是守夜。

真正有用的主动运维,是从日志里提炼可量化、可收敛的指标,比如:

  • systemctl is-failed 检查服务状态,配合 cron 每分钟扫一次,失败即发钉钉/企微
  • journalctl --since "1 hour ago" | grep -i "segmentation fault|killed process" 定期扫描致命错误
  • systemdStartLimitIntervalSecStartLimitBurst 配置写进 CI/CD 检查项,防止服务反复崩溃被忽略

如何让 curl -I 变成真正的健康检查而不是形式主义

很多人在探活脚本里只写 curl -I http://localhost:8080/health,但 HTTP 状态码 200 不代表服务可用:后端 DB 连不上、缓存雪崩、线程池打满,接口照样返回 200。

真正有效的健康检查要分层验证:

  • -s -o /dev/NULL -w "%{http_code}" 抓状态码,再用 grep -q "^2" 判断是否 2xx 范围
  • /health 接口增加字段校验,比如要求响应 jsON 中必须含 "db": "ok""redis": "connected"
  • timeout 3s curl ... 避免卡死,超时直接标为不健康 —— 响应慢等于不可用

df -h 看似简单,但磁盘预警为什么总在半夜炸

因为 df -h 显示的是挂载点使用率,而真正压垮系统的往往是 inodes 耗尽、XFS 日志空间占满、或 /var/log/journal 无节制增长 —— 这些 df 根本不报。

主动运维需要多维采集:

  • df -i 查 inode 使用率,尤其注意 /var/100% 就意味着新建文件失败
  • /var/log/journal 做配额:sudo systemd-journald --disk-usage 查当前大小,SystemMaxUse=512M 写进 /etc/systemd/journald.conf
  • find /var/log -name "*.log" -mtime +7 -delete 类脚本必须加 dry-run 和日志记录,否则删库跑路是分分钟的事

为什么 tophtop 不该出现在值班手册第一页

它们是诊断工具,不是预警手段。等你手动敲 top 发现 java 进程占了 900% CPU,服务早雪崩三次了。

把资源使用变成可触发动作的关键是:

  • pidstat -u 1 3 替代 top 做采样,输出可直接喂给 prometheusnode_exporter
  • 对关键进程(如 nginx, mysqld)用 pgrep -f + ps -o pid,ppid,pcpu,pmem,etime -p 定期抓快照,异常值入库或告警
  • /proc/[pid]/status 里的 Threads:State: 字段比 CPU 更早暴露线程阻塞、D 状态卡死等问题

真正的主动运维,不是把命令记得多熟,而是让命令在你睡觉时替你盯住那些沉默的异常信号。最危险的不是报错,是没报错却已失效的服务。

text=ZqhQzanResources