如何编写Nginx监控巡检脚本才能有效保障网关服务稳定运行?
- 内容介绍
- 文章标签
- 相关推荐
本文共计932个文字,预计阅读时间需要4分钟。
为确保Nginx网关服务稳定运行,依赖人工查看日志和top命令远远不够。您需要一个轻量级、可靠、定时执行的巡检脚本,帮助您提前发现进程异常、端口占用、配置错误、连接堆栈等问题。
检查 Nginx 进程与端口状态
服务是否在跑,监听是否正常,是最基础也最容易被忽略的一环。脚本应同时验证进程存在性和端口可达性,避免因端口被其他程序抢占或进程假死导致误判。
- 用 pgrep -f "nginx: master process" 检查主进程是否存在,比单纯查 nginx 进程名更准确(避开 worker 进程干扰)
- 用 ss -tln | grep ":80\|:443" 或 lsof -i :80 -sTCP:LISTEN 确认端口确实在监听,且状态为 LISTEN
- 若两者任一失败,立即记录告警并尝试 nginx -t && systemctl reload nginx 自动恢复(前提是配置无误)
校验配置语法与文件完整性
一次错误的配置热重载(reload)可能让整个网关不可用。巡检时必须在 reload 前做双重确认:语法是否合法、关键配置文件是否被意外修改或丢失。
- 执行 nginx -t -c /etc/nginx/nginx.conf 验证语法,捕获 stdout/stderr 判断是否返回 “syntax is ok” 和 “test is successful”
- 用 md5sum -c 核对核心配置文件(如 nginx.conf、conf.d/*.conf)的校验和,防止人为误改或自动化工具覆盖
- 检查 /etc/nginx/conf.d/ 目录下是否有以 .bak、.swp、~ 结尾的临时文件,这类文件可能被 nginx 错误加载引发解析失败
分析活跃连接与请求速率趋势
连接数突增、请求超时率升高、5xx 响应激增,往往是后端故障或攻击前兆。脚本无需实时绘图,但应提取关键指标并与基线对比。
- 通过 curl -s http://127.0.0.1/nginx_status(需开启 stub_status)获取 Active connections、requests/sec、handled/requests 等原始数据
- 计算近 1 分钟内 5xx 响应占比(可用 access.log 尾部 1000 行统计:tail -1000 /var/log/nginx/access.log | awk '$9 ~ /^5../ {c++} END{print c/NR*100}'),超过 5% 触发预警
- 记录当前活跃连接数,若持续高于历史均值 2 倍且 > 2000,提示可能存在连接泄漏或慢后端拖累
归档日志与清理临时资源
长期运行的 Nginx 容易因日志膨胀、临时文件堆积影响磁盘空间和性能。巡检脚本应附带轻量级清理逻辑,避免单独维护清理任务。
- 检查 /var/log/nginx/ 下 access.log 和 error.log 是否超过 100MB,超限时用 logrotate -f /etc/logrotate.d/nginx 强制轮转
- 扫描 /var/cache/nginx/ 中过期缓存(如 last-modified 超过 7 天)和 client_body_temp、proxy_temp 等临时目录中的残留文件
- 清理 /tmp/ 下以 nginx_ 开头的临时 socket 或 pid 文件(某些异常退出未清理)
把以上逻辑封装成 Shell 脚本,配合 crontab 每 5 分钟执行一次,并将结果输出到统一日志文件或通过 mail/sendmail 推送关键告警,就能构建起一道低成本、高响应的 Nginx 健康防线。
本文共计932个文字,预计阅读时间需要4分钟。
为确保Nginx网关服务稳定运行,依赖人工查看日志和top命令远远不够。您需要一个轻量级、可靠、定时执行的巡检脚本,帮助您提前发现进程异常、端口占用、配置错误、连接堆栈等问题。
检查 Nginx 进程与端口状态
服务是否在跑,监听是否正常,是最基础也最容易被忽略的一环。脚本应同时验证进程存在性和端口可达性,避免因端口被其他程序抢占或进程假死导致误判。
- 用 pgrep -f "nginx: master process" 检查主进程是否存在,比单纯查 nginx 进程名更准确(避开 worker 进程干扰)
- 用 ss -tln | grep ":80\|:443" 或 lsof -i :80 -sTCP:LISTEN 确认端口确实在监听,且状态为 LISTEN
- 若两者任一失败,立即记录告警并尝试 nginx -t && systemctl reload nginx 自动恢复(前提是配置无误)
校验配置语法与文件完整性
一次错误的配置热重载(reload)可能让整个网关不可用。巡检时必须在 reload 前做双重确认:语法是否合法、关键配置文件是否被意外修改或丢失。
- 执行 nginx -t -c /etc/nginx/nginx.conf 验证语法,捕获 stdout/stderr 判断是否返回 “syntax is ok” 和 “test is successful”
- 用 md5sum -c 核对核心配置文件(如 nginx.conf、conf.d/*.conf)的校验和,防止人为误改或自动化工具覆盖
- 检查 /etc/nginx/conf.d/ 目录下是否有以 .bak、.swp、~ 结尾的临时文件,这类文件可能被 nginx 错误加载引发解析失败
分析活跃连接与请求速率趋势
连接数突增、请求超时率升高、5xx 响应激增,往往是后端故障或攻击前兆。脚本无需实时绘图,但应提取关键指标并与基线对比。
- 通过 curl -s http://127.0.0.1/nginx_status(需开启 stub_status)获取 Active connections、requests/sec、handled/requests 等原始数据
- 计算近 1 分钟内 5xx 响应占比(可用 access.log 尾部 1000 行统计:tail -1000 /var/log/nginx/access.log | awk '$9 ~ /^5../ {c++} END{print c/NR*100}'),超过 5% 触发预警
- 记录当前活跃连接数,若持续高于历史均值 2 倍且 > 2000,提示可能存在连接泄漏或慢后端拖累
归档日志与清理临时资源
长期运行的 Nginx 容易因日志膨胀、临时文件堆积影响磁盘空间和性能。巡检脚本应附带轻量级清理逻辑,避免单独维护清理任务。
- 检查 /var/log/nginx/ 下 access.log 和 error.log 是否超过 100MB,超限时用 logrotate -f /etc/logrotate.d/nginx 强制轮转
- 扫描 /var/cache/nginx/ 中过期缓存(如 last-modified 超过 7 天)和 client_body_temp、proxy_temp 等临时目录中的残留文件
- 清理 /tmp/ 下以 nginx_ 开头的临时 socket 或 pid 文件(某些异常退出未清理)
把以上逻辑封装成 Shell 脚本,配合 crontab 每 5 分钟执行一次,并将结果输出到统一日志文件或通过 mail/sendmail 推送关键告警,就能构建起一道低成本、高响应的 Nginx 健康防线。

