一、技术选型与方案架构
Nginx作为主流Web服务器,其运行状态监控对业务稳定性至关重要。本方案采用Prometheus+Grafana的开源技术栈,通过Nginx模块暴露监控指标,经Prometheus采集存储后,由Grafana实现可视化展示。
1.1 核心组件功能解析
- Nginx监控模块:通过
nginx-module-vts或stub_status模块暴露关键指标(如请求数、响应时间、连接数) - Prometheus:时序数据库,负责指标采集与存储,支持灵活的查询语言
- Grafana:可视化平台,提供丰富的图表类型与告警功能
1.2 方案优势对比
相较于传统监控方式,本方案具有三大优势:
- 非侵入式部署:无需修改Nginx业务代码
- 实时性保障:数据采集间隔可配置至秒级
- 扩展性强:支持自定义监控指标与告警规则
二、环境准备与组件安装
2.1 基础环境要求
- Linux服务器(推荐CentOS 7+/Ubuntu 18.04+)
- Nginx 1.12+版本(需支持动态模块)
- Prometheus 2.0+与Grafana 7.0+
2.2 Nginx监控模块配置
2.2.1 编译安装VTS模块
# 下载Nginx源码与VTS模块wget http://nginx.org/download/nginx-1.20.1.tar.gzgit clone https://github.com/vozlt/nginx-module-vts.git# 重新编译Nginx(保留原有配置)./configure --add-module=/path/to/nginx-module-vtsmake && make install
2.2.2 配置Nginx暴露指标
http {vts_host = "0.0.0.0";vts_port = 8080;server {location /status {vts_filter;access_log off;}}}
验证指标接口:
curl http://localhost:8080/status/format/json
2.3 Prometheus配置
2.3.1 安装Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gztar xvfz prometheus-*.tar.gzcd prometheus-*
2.3.2 配置采集任务
编辑prometheus.yml:
scrape_configs:- job_name: 'nginx'static_configs:- targets: ['nginx-server:8080']metrics_path: '/status/format/prometheus'
三、Grafana仪表盘设计
3.1 数据源配置
- 登录Grafana控制台
- 添加Prometheus数据源:
- URL填写Prometheus服务地址
- 访问方式选择”Direct”
- 测试连接并保存
3.2 核心监控面板设计
3.2.1 请求概览面板
# PromQL查询示例sum(rate(nginx_http_requests_total{status!~"5.."}[1m])) by (status)
图表类型:状态图(Stat)
显示内容:
- 2xx/3xx/4xx请求占比
- 实时QPS数值
3.2.2 性能分析面板
# 响应时间分布查询histogram_quantile(0.99, sum(rate(nginx_http_request_time_seconds_bucket[5m])) by (le))
图表类型:时序图(Time Series)
显示内容:
- P99/P95/P50响应时间曲线
- 异常波动告警阈值线
3.2.3 连接数监控面板
# 活跃连接数查询nginx_connections_active
图表类型:仪表盘(Gauge)
显示内容:
- 当前活跃连接数
- 最大连接数阈值
3.3 告警规则配置
- 在Grafana中创建告警通道(邮件/Webhook)
- 设置告警规则示例:
# 5xx错误率告警expr: rate(nginx_http_requests_total{status="5xx"}[1m]) / rate(nginx_http_requests_total[1m]) > 0.01for: 5mlabels:severity: criticalannotations:summary: "Nginx 5xx错误率过高"description: "当前5xx错误率{{ $value }}"
四、高级优化技巧
4.1 多维度数据聚合
通过标签组合实现精细监控:
# 按主机分组统计sum(rate(nginx_http_requests_total[1m])) by (instance)# 按API路径统计sum(rate(nginx_http_requests_total{path=~"/api/.*"}[1m])) by (path)
4.2 动态阈值设置
利用Grafana的”Threshold”功能:
- 选择”Add threshold”
- 设置条件:
- 警告:当值>100
- 严重:当值>200
- 关联告警通道
4.3 历史数据对比
在仪表盘添加”Comparison”视图:
- 选择”Add query”
- 配置偏移量:
# 同比上周数据rate(nginx_http_requests_total[1m]) offset 7d
五、常见问题解决方案
5.1 指标采集失败排查
- 检查Nginx模块是否加载:
nginx -V 2>&1 | grep -o with-http_vts_module
- 验证Prometheus目标状态:
- 访问
http://prometheus:9090/targets - 检查nginx任务状态是否为UP
- 访问
5.2 数据延迟处理
- 调整Prometheus抓取间隔:
scrape_configs:- job_name: 'nginx'scrape_interval: 15s # 默认1分钟
- 优化Grafana查询缓存:
- 在数据源设置中调整”Min interval”参数
5.3 高并发场景优化
- 启用Nginx连接池:
upstream backend {keepalive 32;server 127.0.0.1:8080;}
- 调整Prometheus存储参数:
# prometheus.yml配置示例storage:tsdb:retention.time: 30dwal.segment.size: 128M
本方案通过标准化监控流程与可视化设计,帮助运维团队快速构建Nginx监控体系。实际部署中可根据业务特点调整监控指标与告警策略,建议每季度进行监控面板的可用性验证与优化迭代。