网站访问变慢或出现错误时,除了检查服务器CPU、内存和磁盘,还需要了解Nginx的连接数与请求变化。通过Nginx Exporter,可以将这些指标接入Prometheus,再通过Grafana观察入口层的运行情况。需要注意,基础stub_status提供的是连接与请求计数,不包含按200、404、502等HTTP状态码分类的统计。
一、监控目标
本次配置主要监控以下内容:
- 当前活跃连接数
- HTTP请求速率
- 正在读取请求头的连接数
- 正在向客户端写入响应的连接数
- 等待新请求的空闲连接数
这些指标用于观察Nginx处理连接和请求的情况,不能单独作为网站业务正常的判断依据。
二、组件版本
本次环境使用以下版本:
nginx 1.24.0
prometheus-nginx-exporter 1.1.0-1ubuntu0.3
Nginx Exporter默认监听9113端口,以下配置按Nginx、Exporter与Prometheus同机部署编写。
三、开启stub_status
配置一个仅供本机采集的Nginx状态页:
server {
listen 127.0.0.1:8080;
server_name localhost;
location = /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
将该server配置放入Nginx的http配置范围内,或由其加载的配置文件中。本例仅监听本机回环地址,不对公网提供状态页访问。
stub_status需要对应模块支持;如果配置检查提示无法识别该指令,应先检查Nginx是否包含该模块。
四、验证Nginx状态页
先检查配置:
nginx -t
检查通过后,对已经运行的Nginx重新加载配置:
systemctl reload nginx
重新加载会让新工作进程使用新配置,同时允许旧工作进程继续处理已有连接,避免为修改状态页而直接重启服务。
随后访问状态页:
curl http://127.0.0.1:8080/nginx_status
返回内容应包含以下字段,具体数值随运行情况变化:
Active connections
server accepts handled requests
Reading Writing Waiting
其中,Active connections包含等待中的连接;requests是累计请求数,不能直接当作每秒请求量。
五、配置Nginx Exporter
为Exporter设置状态页采集地址:
--nginx.scrape-uri=http://127.0.0.1:8080/nginx_status
这是Exporter的启动参数,需要写入实际使用的服务启动配置,不能单独作为Shell命令执行。修改后重启本次环境中的Exporter服务,并检查指标接口:
systemctl restart prometheus-nginx-exporter
curl http://127.0.0.1:9113/metrics
Exporter从状态页获取数据,再将其转换为Prometheus指标。
在Prometheus配置文件已有的 scrape_configs列表下加入以下任务,实际键名为scrape_configs,不带前导空格:
- job_name: nginx
static_configs:
- targets:
- localhost:9113
不要覆盖原有采集任务。修改后先校验配置,再按当前部署方式重新加载或重启Prometheus:
promtool check config /etc/prometheus/prometheus.yml
systemctl restart prometheus
六、Targets验证
进入Prometheus Targets页面,检查nginx任务是否为UP。
这里的UP表示Prometheus成功抓取了Exporter,并不代表Exporter一定成功读取了Nginx状态页。建议同时检查下面两个指标。
Prometheus抓取状态:
up{job="nginx"}
Exporter读取Nginx状态页的结果:
nginx_up{job="nginx"}
两者正常时均应为1。如果前者为1、后者为0,应继续检查状态页地址、访问权限和Nginx运行情况。
七、常用PromQL
以下查询对应Exporter提供的基础连接与请求指标。
1. 活跃连接数
nginx_connections_active{job="nginx"}
2. 请求速率
rate(nginx_http_requests_total{job="nginx"}[5m])
用于观察最近5分钟的平均每秒请求量。
3. 读取连接数
nginx_connections_reading{job="nginx"}
4. 写入连接数
nginx_connections_writing{job="nginx"}
5. 等待连接数
nginx_connections_waiting{job="nginx"}
读取连接指正在读取请求头的连接,写入连接指正在向客户端返回响应的连接,等待连接则是等待新请求的空闲连接。等待连接并不等于请求处理失败。
八、Grafana看板
在Grafana中添加对应查询,展示Nginx连接数和请求速率。
建议将活跃连接、读取连接、写入连接和等待连接放在相邻面板,并单独展示请求速率。排查时统一时间范围,便于与网站报错时间及日志记录对照。
九、故障排查
1. Prometheus中的nginx任务显示DOWN
先检查Exporter服务和指标接口:
systemctl status prometheus-nginx-exporter
curl http://127.0.0.1:9113/metrics
再核对Prometheus中的采集地址,并检查配置:
promtool check config /etc/prometheus/prometheus.yml
Targets中的DOWN首先指向Prometheus抓取失败,应从Exporter是否可达查起。
2. Targets为UP,但nginx_up为0
检查Nginx服务与状态页:
systemctl status nginx
curl http://127.0.0.1:8080/nginx_status
重点核对:
- Nginx是否正常运行
- 状态页配置是否已经加载
- Exporter中的采集地址是否正确
- 状态页是否允许Exporter访问
nginx_up反映的是Exporter对Nginx的采集结果,需要与Prometheus自身的up区分。
3. 采集正常,但网站打不开
基础状态页没有验证具体业务网址,也没有提供完整的上游错误信息,因此仍需继续排查网站访问链路。
建议按以下方向检查:
- 查看对应网站的
access.log - 查看故障时段的
error.log - 检查后端
upstream服务 - 核对域名解析
- 检查HTTPS证书
- 对照Blackbox探测结果
不要仅凭连接数有数据或采集状态为UP,就结束网站故障排查。
-
广告合作
-
QQ群号:4114653





