服务器健康检查自动化核心是让系统自主“看、判、动”,通过Nginx stub_status采集指标,配合curl+awk计算QPS并告警;用check_server.sh脚本定义健康判断逻辑(如连接数超阈值、非200返回码、磁盘超90%等),返回0/1状态;异常时自动重启服务或摘除节点,并记录日志;通过cron或systemd timer驱动执行,全程无需复杂平台。

服务器健康检查自动化,核心是让系统自己“看”、“判”、“动”,而不是等出问题再人工介入。它不依赖复杂平台,用好现有工具就能快速落地。
用Nginx Status做轻量级实时指标采集
Nginx自带的stub_status模块不是摆设,它是低开销、高可靠的状态出口。启用后,它每秒都在更新连接数、请求处理量、读写等待状态等关键数据。
- 配置时别用/status这类通用路径,改用/internal/metrics_8a2f等带随机字符的路径,防扫描
- 必须加访问控制:只允许监控服务器IP或内网段访问,禁用公网直连
- 配合curl + awk脚本,每10秒抓一次Active connections和requests差值,就能算出当前QPS,趋势异常立刻告警
用Shell或Python写判断逻辑,不靠人盯屏
光有数据没用,得定义“什么叫不健康”。比如Nginx连接数持续超过阈值、后端服务HTTP返回码非200、磁盘使用率超90%——这些都要转成可执行的判断条件。
- 写一个check_server.sh,里面包含ping检测、curl -I验证端口响应、df -h查磁盘、ps aux | grep nginx确认进程存活
- 每个检查项设超时(如curl --max-time 3),避免卡死整个脚本
- 返回值严格:0=健康,1=异常,其他值不识别。这样后续能直接被systemd或cron调用
绑定自动响应动作,实现闭环
发现异常后不能只发邮件。要让它能自己做点事,比如重启服务、切换负载、临时屏蔽节点。
- 在检查脚本末尾加判断:如果curl健康接口失败且重试3次仍不通,就执行systemctl restart nginx
- 如果是集群环境,可调用API把本机从负载均衡器中摘除(如Nginx Plus upstream API或Consul deregister)
- 所有操作记录日志,包括触发时间、检查结果、执行动作,方便事后复盘
用定时任务或轻量守护进程驱动执行
不需要上Kubernetes或Prometheus也能跑起来。最简方案就是cron + 脚本。
- crontab -e 添加:*/2 * * * * /opt/scripts/check_all.sh >> /var/log/health.log 2>&1
- 想更稳一点?用systemd timer替代cron,支持失败重试、依赖网络就绪等条件
- 避免多个实例并发运行,在脚本开头加flock锁,防止检查冲突











