推荐使用nginx-prometheus-exporter采集nginx指标,通过access log或stub_status解析数据,prometheus配置抓取localhost:9113,grafana导入id为10587等面板,并配置5xx错误率告警及动态筛选看板。

准备Nginx指标暴露:启用nginx-module-vts或nginx-prometheus-exporter
原生Nginx不直接输出Prometheus兼容的指标,需借助第三方模块或Exporter。推荐使用轻量、维护活跃的 nginx-prometheus-exporter(官方推荐方案),它通过解析Nginx的stub_status或access log来采集数据,无需重新编译Nginx。
操作建议:
- 下载对应系统架构的二进制文件(如 Linux amd64),赋予执行权限
- 启动时指定Nginx状态地址(若已开启 stub_status,如 http://127.0.0.1:8080/nginx_status)或日志路径(推荐 access log 模式,支持更多维度如 upstream、vhost、status code)
- 确保 exporter 可被 Prometheus 抓取(如监听 :9113/metrics,默认路径)
- 在 Nginx 配置中添加 location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }(仅用于 stub_status 方式)
配置Prometheus抓取Nginx指标
Prometheus需知道从哪拉取数据。编辑 prometheus.yml,在 scrape_configs 下新增 job:
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
注意点:
- target 地址需能被Prometheus容器/进程网络访问(Docker部署时避免用 localhost,改用宿主机IP或docker network别名)
- 可加 relabel_configs 对指标打标,例如根据实例名区分多台Nginx服务器
- 重启Prometheus或发送 SIGHUP 重载配置后,访问 Prometheus UI → Status → Targets,确认 nginx job 状态为 UP
在Grafana中导入Nginx监控面板
Grafana本身不生成指标,只做可视化。推荐直接使用社区成熟模板提升效率:
- 访问 https://grafana.com/grafana/dashboards/,搜索 “nginx prometheus”
- 选用下载量高、更新及时的面板,如 ID 10587(Nginx Exporter Full)或 11725(Nginx with VTS Module)
- 在 Grafana 中点击 “+ → Import”,粘贴ID或上传JSON文件,选择对应Prometheus数据源
- 关键指标应包含:请求速率(rate(nginx_http_requests_total[5m]))、响应状态码分布、上游响应时间(histogram_quantile)、连接数(nginx_connections_active)
增强实用性:添加告警与自定义看板
基础面板满足查看,但生产环境需主动干预:
- 在 Prometheus 中编写告警规则,例如当 5xx 错误率连续2分钟 > 1% 时触发:
groups:
- name: nginx_alerts
rules:
- alert: NginxHighServerErrorRate
expr: 100 * sum(rate(nginx_http_requests_total{code=~"5.."}[2m])) / sum(rate(nginx_http_requests_total[2m])) > 1
for: 2m - 对接 Alertmanager 实现邮件、钉钉或企业微信通知
- 在 Grafana 中新建 Dashboard,用变量(Variable)支持按 server_name、upstream、location 动态筛选;用 Panel Link 跳转到详细日志或链路追踪系统
- 对核心API路径(如 /api/v1/user)单独建 panel,叠加响应时间 P95 和错误计数趋势线











