当前位置: 首页 > news >正文

Nginx stub_status 指南从启用到监控落地的全流程详解

1、模块定位

  • 轻量:核心指标只有 6 行文本,单次响应 < 200 B。
  • 零依赖:无需共享内存、无需 JS,可在任何 shell 中 curl
  • 快速:读取全局原子计数,不会遍历连接池,毫秒级返回。
  • 遗留兼容:很多老运维脚本(zabbix、cacti、nagios)默认解析它。
    如果需要 Upstream / 缓存 / 连接池维度,请考虑 ngx_http_api_module (≥ 1.13.3) 或商业版 status

2、最小可用配置

server {listen 127.0.0.1:8080;          # 仅本机location /basic_status {stub_status;                # 1.7.5+ 不再需要“on”allow 127.0.0.1;            # ★强烈建议加 ACLdeny  all;}
}

访问:

$ curl http://127.0.0.1:8080/basic_status
Active connections: 34
server accepts handled requests1946572 1946572 3558741
Reading: 3 Writing: 12 Waiting: 19

3、输出字段逐一解读

字段公式 / 含义运维关注点
1Active connections当前活跃 TCP 连接数 = Reading + Writing + Waiting突升→长连接激增/攻击
2-3(表头 + 三列)accepts:⽣成的 TCP 连接总计
handled:成功建链数(资源不足可 < accepts)
requests:HTTP 请求数(包括 keep-alive 内第二、三…次)
请求 / 连接比评估:requests / accepts ≈ keep-alive 平均复用次数
4Reading正在读请求头IO 阻塞、慢客户端
Writing正在回包上游慢 / 网速慢
Waiting已握手、空闲 Keep-alive 数太低→排队;太高→闲连浪费

4、内嵌变量(1.3.14+)

可在 log_formatmapsetlua 等处使用。

变量等价字段场景示例
$connections_activeActive connectionsshell_exporter 推送自定义 metrics
$connections_readingReading将 header 注入 PromTail:add_header X-Reading $connections_reading;
$connections_writingWritingLua 限流:if tonumber(ngx.var.connections_writing) > 100 then ... end
$connections_waitingWaiting分流高并发到只读节点

5、典型部署 & 安全加固

5.1 本地 + sidecar 采集(推荐)

Nginx ↔ 127.0.0.1:8080/basic_status ← sidecar exporter → Prometheus
  • 生产端口不上公网;
  • Sidecar 负责转 Prometheus 指标格式(文本或 PushGateway)。

5.2 多实例统一入口

map $hostname $stub_up {default 127.0.0.1:8080;web-2   127.0.0.2:8080;
}
server {listen 9000 ssl; auth_basic ...;location /status {proxy_pass http://$stub_up/basic_status;}
}
  • 运维只暴露 1 个 HTTPS;
  • 通过 $hostname 把多台 Nginx 的 stub_status 聚合。

6、Prometheus / Grafana 实战

6.1 telegraf 示例

[[inputs.exec]]commands = ["curl -s http://127.0.0.1:8080/basic_status"]data_format = "nginx"name_override = "nginx_stub"

data_format="nginx" 内置解析 stub_status,自动产出 8 个字段。

6.2 grafana.com Dashboard IDs

ID说明
10000官方轻量仪表,仅连接/请求
2949community,包含 Reading/Writing/Waiting 趋势

7、模块对比

功能stub_statusstatus (商业)api
连接级
Upstream 细节
Cache 统计
Stream(L4)
JSON
轻量/易启⭐⭐⭐⭐⭐⭐⭐⭐⭐

8、性能与常见误区

误区 / 问题说明正解
“开了 stub_status QPS 就掉”可能被外网频繁轮询,导致长 keep-alive 占用内网监听或 rate-limit (limit_req zone=monitor 1r/s)
handled < acceptsworker_connections 用尽或系统 FD 限制查看 error.log 中 “worker_connections are not enough”
Waiting 长期 0关闭 keep-alive(或代理通道关闭)keepalive_timeout 75 建议开启
Active connections 高但 QPS 低浏览器长轮询 / websocket评估升级 worker_connections

9、FAQ

Q1. 是否能出 JSON?
A. 原生不行,需 awk/lua 或升级 api 模块。

Q2. stub_status 会拖慢 Nginx 吗?
A. 读取共享原子计数 ≈ ++int; 单次响应 100–200 B,可忽略。

Q3. Windows Nginx 支持吗?
A. 只要编译打开即可,行为一致。

Q4. 如何同时监控多 worker?
A. 这些全局计数是跨 worker 汇总的,不需额外汇聚。

结语

如果你只想在“1 分钟”内拿到在线连接数、累计请求量、读写等待指标——stub_status 依然是最简单、最轻量、最兼容的方案。

对于需要更丰富度量的现代集群,请逐步迁移到 ngx_http_api_module 或官方商业 API;但在迁移完成前,掌握 stub_status 的安全暴露、采集脚本与指标含义,依旧是 Nginx 运维的基本功。祝你监控顺畅,问题秒定位!

相关文章:

  • 廉价却有效?ESD防护中的电容
  • 企业批量处理刚需PrintPDF 网络财务办公打印 网页到 Office 一键转 PDF
  • 【PhysUnits】10 减一操作(sub1.rs)
  • css五边形
  • 无需会员可一键转换
  • 【go】多线程编程如何识别和避免死锁,常见死锁场景分析,pprof使用指引
  • 【RK3588新品】嵌入式人工智能实验箱EDU-AIoT ELF 2发布
  • 物联网代理暴利逻辑拆解:格行随身WiFi三网切换技术实战分析
  • 日常效率工具【Tools】【持续更新】
  • Spring Cloud Gateway 微服务网关实战指南
  • 力扣48 .旋转图像 (最简单的方法)
  • 深度学习损失“三位一体”——从 Fisher 的最大似然到 Shannon 的交叉熵再到 KL 散度,并走进 PET·P-Tuning微调·知识蒸馏的实战
  • AI开发 | Web API框架选型-FastAPI
  • 机器学习——支持向量机(SVM)
  • 机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克
  • QT之INI、JSON、XML处理
  • mac 安装 mysql 和 mysqlshell
  • 黑马点评--基于Redis实现共享session登录
  • 技术文档炼金术:从混乱到优雅的知识封装
  • RabbitMQ核心特性——重试、TTL、死信队列
  • 大兴企业网站建设/网站推广优化教程
  • 网站如何做后台留言/网络推广有哪些常见的推广方法
  • 个人网站备案材料填写/关键词搜索站长工具
  • 2018年做网站/seo网页优化工具
  • 企业网站建设经验分享/seo关键字排名优化
  • 深圳公明网站建设公司/seo优化专家