Nginx、Grafana与Node Exporter通过Prometheus串联实现系统级监控:Node Exporter采集主机指标(端口9100),nginx-prometheus-exporter转换Nginx stub_status指标(端口9113),Prometheus统一抓取,Grafana可视化node_和nginx_两类指标并支持跨源关联分析。

要让 Nginx、Grafana 和 Node Exporter 协同实现系统级监控,核心在于:Node Exporter 负责采集主机基础指标(CPU、内存、磁盘、网络等),Nginx 需额外暴露自身运行指标(如连接数、请求速率),再统一由 Prometheus 抓取,最终在 Grafana 中可视化。三者不是直接“结合”,而是通过 Prometheus 作为数据中枢串联起来。
确保 Node Exporter 正常采集主机指标
Node Exporter 是轻量级的主机指标收集器,需部署在运行 Nginx 的服务器上:
- 下载并启动 Node Exporter(默认监听 9100 端口),例如:
./node_exporter & - 验证是否就绪:
curl http://localhost:9100/metrics应返回大量以node_开头的指标(如node_cpu_seconds_total) - 在 Prometheus 的
scrape_configs中添加 job,例如:
static_configs:
- targets: ['localhost:9100']
让 Nginx 暴露可被 Prometheus 抓取的指标
原生 Nginx 不输出 Prometheus 格式指标,需借助 nginx-prometheus-exporter 或启用 stub_status 模块 + 第三方 exporter:
- 推荐使用 nginx-prometheus-exporter:它主动连接 Nginx 的 stub_status 接口(需先在 Nginx 配置中开启),再转换为 Prometheus 可读格式(默认端口 9113)
- Nginx 配置示例(在 server 块内):
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
} - 启动 exporter 时指定 Nginx 地址:
./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:80/nginx_status - Prometheus 中新增 job:
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
在 Grafana 中关联绘制系统与 Nginx 指标
导入或新建 Dashboard 时,注意区分数据源和指标语义:
- 系统资源类(来自 Node Exporter)用
node_*前缀指标,例如:
– CPU 使用率:100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
– 内存剩余:node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 - Nginx 类(来自 nginx-exporter)用
nginx_*前缀指标,例如:
– 当前活跃连接:nginx_connections_active
– 每秒请求数:rate(nginx_http_requests_total[1m]) - 可做跨数据源关联,比如将 “Nginx 连接数” 与 “主机 TCP ESTABLISHED 连接数(
node_netstat_Tcp_CurrEstab)” 放在同一图表对比,辅助判断连接瓶颈位置
补充建议:提升可观测性边界
单靠 Node Exporter + Nginx 指标只能覆盖基础层,若需更深入分析,可考虑:
- 启用 Nginx access log 的 JSON 格式,并用 Loki + Promtail 收集,实现日志与指标联动排查
- 对关键 upstream(如后端 API)配置
upstream_zone,配合 exporter 获取上游健康状态与请求延迟 - 在 Grafana 中设置告警规则(通过 Prometheus Alertmanager),例如当
nginx_connections_active > 5000且node_load1 > 8同时触发,说明可能遭遇高并发+资源过载


















