Nginx与Node Exporter无隶属关系:Nginx是Web服务器,需通过vts模块或exporter暴露/metrics;Node Exporter采集宿主机系统指标;二者由Prometheus分别抓取、Grafana联动分析,实现应用层与系统层协同监控。

这个问题其实存在概念混淆。“Nginx Node”并不是一个标准术语——Nginx 是 Web 服务器/反向代理,本身不叫“Node”;而 Prometheus 生态中的 “Node Exporter” 是专门用于采集 Linux 主机(即物理机或虚拟机)系统级指标(CPU、内存、磁盘、网络等)的组件,和 Nginx 没有直接隶属关系。
先明确角色分工
• Nginx:负责处理 HTTP 请求,需暴露自身运行指标(如连接数、请求率、5xx 错误数)
• Node Exporter:运行在宿主机上,采集该机器的底层资源数据(比如 Nginx 进程所在服务器的 CPU 使用率、内存压力、磁盘 IO)
• Prometheus:分别抓取 Nginx 指标(通过 vts 或 exporter)和 Node Exporter 指标(默认 :9100/metrics),统一存储
• Grafana:可同时叠加展示 Nginx 应用层指标 + Node 主机层指标,做关联分析(例如:“5xx 突增时,是否伴随磁盘写满或 swap 使用飙升?”)
让 Nginx 暴露可观测指标(关键一步)
必须让 Nginx 输出 Prometheus 可读的 /metrics 数据,两种主流方式:
-
推荐 nginx-module-vts(内嵌式):
编译 Nginx 时添加--add-module=/path/to/nginx-module-vts,配置中启用:vhost_traffic_status_zone;
并开放两个 location:location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; }location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format prometheus; } -
nginx-prometheus-exporter(代理式):
确保 Nginx 已开启stub_status(location/nginx_status { stub_status on; allow 127.0.0.1; })
启动 exporter:./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1/nginx_status(默认监听:9113/metrics)
验证:执行 curl http://your-nginx-ip/metrics 或 curl http://localhost:9113/metrics,看到形如 nginx_vts_server_requests_total{server="default",code="200"} 1428 的文本即成功。
部署 Node Exporter 并接入 Prometheus
Node Exporter 与 Nginx 通常部署在同一台服务器(或各自所在节点),它不监控 Nginx,而是监控这台机器本身:
- 下载对应平台二进制(如 Linux amd64),解压后直接运行:
./node_exporter(默认端口9100) - 建议用 systemd 管理,确保开机自启、自动拉起
- 在 Prometheus 的
prometheus.yml中添加 job:- job_name: "node"<br> static_configs:<br> - targets: ["localhost:9100"]
- 重启 Prometheus,访问
http://prometheus:9090/targets确认两个 target(nginx 和 node)都为 UP 状态
在 Grafana 中联动分析 Nginx 与主机指标
导入通用面板后,可构建组合看板:
- 左侧区域放 Nginx 指标:活跃连接数
nginx_vts_server_connections_active、5xx 错误率rate(nginx_vts_server_requests_total{code=~"5.."}[5m]) / rate(nginx_vts_server_requests_total[5m]) - 右侧区域放 Node 指标:CPU 使用率
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)、根分区使用率100 * (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} - 设置告警规则时,可交叉引用:例如当
nginx_vts_upstream_fails_total > 100且node_memory_SwapFree_bytes 同时触发,说明上游失败可能由内存不足引发
这种分层监控(应用层 + 系统层)才是定位真实瓶颈的关键路径。不复杂但容易忽略。











