Nginx stub_status 能告诉我什么:连接数不等于访问人数

阿远
2026-10-28 / 1 评论 / 3 阅读 / 正在检测是否收录...

给 Nginx 安装 exporter 后,我最先想问的是:能不能直接知道有多少人访问博客?基础 stub_status 可以观察连接和请求,但它提供的不是访客分析报表。先弄清指标含义,比导入一张大看板更有用。

采集链路分两段

Nginx 在本机状态端点输出 stub_status,Nginx Prometheus Exporter 读取它,再把内容转换成 Prometheus 指标。本站状态入口只监听本机,exporter 也只监听本机,不需要把状态页公开给访客。

配置文件是 /etc/nginx/conf.d/exporter-status.conf。只读检查:

curl -fsS http://127.0.0.1:8080/nginx_status
curl -fsS http://127.0.0.1:9113/metrics

第一条验证 Nginx 状态端点,第二条验证 exporter 输出。Prometheus Targets 的 UP 只覆盖后半段,Nginx 状态页读取是否成功还要看 nginx_up。

状态数字怎样理解

Active connections 是当前连接数,Reading 是读取请求头的连接,Writing 是响应请求的连接,Waiting 通常是等待新请求的 keep-alive 连接。Waiting 较多不一定代表网站故障,也不能把它们都当成正在阅读文章的人。

一个访客可能建立多个连接,一个连接也可能处理多个请求。图片、CSS、JS、爬虫和健康检查都会带来请求,因此请求量与独立访客数不是一回事。

请求速率比累计数更容易观察

rate(nginx_http_requests_total{job="nginx"}[5m])

这是最近五分钟估算的每秒请求数。原始 total 是计数器,服务重启后可能重新开始计数;使用 rate 比直接相减更适合处理重置。nginx_connections_active 则是瞬时连接数量,不能再把它当累计计数器去求同样的意义。

不能从这里看出什么

基础 stub_status 没有按 URL、响应状态码或访客地区细分的数据,也没有每条请求耗时的完整分布。想知道 404、500、热门文章或来源,需要合理的访问日志或专门的日志分析方案。

本站对部分静态资源关闭了访问日志,因此仅统计现有 access.log 也不是完整网络请求总数。要看真实访客,还需要定义统计口径、排除爬虫和探测流量,并考虑代理/CDN 下的真实 IP 与隐私问题。

一个实用排查顺序

请求速率升高时,结合 CPU、PHP-FPM 和 MySQL 看是否同时出现压力;活跃连接堆积时,检查后端响应与超时。单独一个连接数字不足以定位原因。

这次增加 exporter 的价值,是让我看到 Web 层的运行趋势;访客统计则是另一项需要明确口径的工作。

连接状态的准确含义

Reading 主要是读取请求头的连接,Writing 是向客户端写响应的连接,Waiting 是空闲 keep-alive 连接。它们不是人数,也不等于 PHP 请求队列。基础 stub_status 不含 URL、状态码及完整响应耗时分布;如需这些维度应设计日志或相应采集方案。原始请求总数是计数器,观察速率用 rate 并考虑重启重置。

内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
0

评论 (1)

取消
  1. 头像
    阿远 作者
    Linux · Google Chrome

    作者补充|想统计“哪篇文章更受欢迎”,需要先定义口径。按文章路径统计请求次数,与按访客去重得到的人数是两回事;爬虫、刷新和监控请求也需要考虑。本站目前展示的阅读与点赞数经过手动调整,请勿将它们当作真实流量分析数据。

    回复