-
创建者:
虚拟的现实,上次更新时间:9月 24, 2025 需要 3 分钟阅读时间
1. 简介
要使用 Prometheus 监控 Nginx 数据,通常需要通过一个 exporter 来暴露 Nginx 的指标数据。
Nginx 本身并不直接支持 Prometheus 格式的指标输出,但可以通过以下几种方式实现监控,一种是通过nginx_exporter 监控,需要开启 nginx_stub_status,主要是 nginx 自身的 status 信息,metrics 数据相对较少;另一种是使用 nginx-vts-exporter 监控,但是需要在编译 nginx 的时候添加 nginx-module-vts 模块,监控数据较多,提供了包含 server、upstream以及cache的相关监控指标,指标更加丰富。
2. Nginx Prometheus Exporter 监控
Nginx 通过 stub_status 页面暴露了部分监控指标。Nginx Prometheus Exporter 会采集单个 Nginx 实例指标,并将其转化为 Prometheus 可用的监控数据, 最终通过 HTTP 协议暴露给 Prometheus 服务进行采集。
2.1. 前提条件
开启 NGINX stub_status 功能
nginx -V 2>&1 | grep -o with-http_stub_status_module
- 如果在终端中输出 with-http_stub_status_module ,则说明 Nginx 已启用 stub_status 模块。
- 如果未输出任何结果,则可以使用 --with-http_stub_status_module 参数从源码重新配置编译一个 Nginx。
添加stub_status
确认 stub_status 模块启用之后,在 nginx 配置中,需要在对应的配置文件中进行 stub_status 模块的设置,才能被 exporter 识别。
# 根据业务情况进行调整 server { listen 8088 default_server; server_name localhost; allow 127.0.0.1; deny all; location /ngx_status { stub_status on; access_log off; } }
访问stub_status
修改配置后,重启加载nginx配置,访问 http://ip:port/ngx_status 即可查看 Nginx 上次启动后工作状态的统计结果。
[chenyh@swProxy1 ~]$ curl 127.0.0.1:8088/ngx_status Active connections: 1 server accepts handled requests 2068141 2068141 797683 Reading: 0 Writing: 1 Waiting: 0
2.2. 安装 nginx-prometheus-exporter
下载地址:https://github.com/nginx/nginx-prometheus-exporter/releases
# 下载上传文件 wget https://github.com/nginx/nginx-prometheus-exporter/releases/download/v1.4.1/nginx-prometheus-exporter_1.4.1_linux_amd64.tar.gz #解压至指定文件夹 mkdir /AppHome/nginx-prometheus-exporter tar -zxvf nginx-prometheus-exporter_1.4.1_linux_amd64.tar.gz -C /AppHome/nginx-prometheus-exporter # 测试运行,--nginx.scrape-uri参数指定了收集指标信息的URI地址。 /AppHome/nginx-prometheus-exporter/nginx-prometheus-exporter --web.listen-address=:29113 --nginx.scrape-uri=http://127.0.0.1:8088/ngx_status # 配置nginx-prometheus-exporter开机自启 cat << EOF > /usr/lib/systemd/system/nginx-prometheus-exporter.service [Unit] Description=nginx-prometheus-exporter After=network.target [Service] Restart=on-failure ExecStart=/AppHome/nginx-prometheus-exporter/nginx-prometheus-exporter --web.listen-address=:29113 --nginx.scrape-uri=http://127.0.0.1:8088/ngx_status [Install] WantedBy=multi-user.target EOF # 重启服务 systemctl daemon-reload && systemctl start nginx-prometheus-exporter && systemctl enable --now nginx-prometheus-exporter && systemctl stauts nginx-prometheus-exporter
docker部署
# 指定版本 docker run -p 29113:9113 nginx/nginx-prometheus-exporter:1.4.1 --nginx.scrape-uri=http://<nginx>:8088/ngx_status
访问 nginx-prometheus-exporter
浏览器运行访问 http://127.0.0.1:29113/metrics
[root@nginx109 chenyh]# curl http://127.0.0.1:29113/metrics |more # HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 9.5475e-05 go_gc_duration_seconds{quantile="0.25"} 0.00011314 go_gc_duration_seconds{quantile="0.5"} 0.000145038 go_gc_duration_seconds{quantile="0.75"} 0.004010894 go_gc_duration_seconds{quantile="1"} 0.004010894 go_gc_duration_seconds_sum 0.004364547
2.3. 加入prometheus监控
--- apiVersion: v1 kind: Service metadata: name: nginx-exporter labels: app: nginx type: nginx-exporter namespace: monitoring spec: type: ClusterIP ports: - name: http-metrics port: 29113 protocol: TCP targetPort: 29113 --- apiVersion: v1 kind: Endpoints metadata: name: monitoring-external-nginx-exporter labels: app: nginx type: nginx-exporter namespace: monitoring subsets: - addresses: - ip: 10.194.106.108 - ip: 10.194.106.109 ports: - name: http-metrics port: 29113 protocol: TCP --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app: nginx type: nginx-exporter name: nginx-monitor namespace: monitoring spec: endpoints: - port: http-metrics interval: 30s path: /metrics honorLabels: true selector: matchLabels: app: nginx type: nginx-exporter namespaceSelector: matchNames: - monitoring
3. Grafana 中展示
在 Grafana 中导入 12708 模板 grafana模板大全参考
4. nginx-vts-exporter 监控
因为 nginx 需要 nginx-module-vts 依赖包支持,但最近项目都未进行此包,因此这次未能进行验证,但可参考:https://www.cnblogs.com/you-men/p/13173245.html 和 4009-OpenResty 及模块编译安装
- https://hub.docker.com/r/nginx/nginx-prometheus-exporter
- https://github.com/nginx/nginx-prometheus-exporter/releases
- https://github.com/nginx/nginx-prometheus-exporter/blob/main/examples/systemd/README.md
- https://cloud.tencent.com/document/product/1416/111838#mysql-exporter-.E9.87.87.E9.9B.86.E5.8F.82.E6.95.B0.E8.AF.B4.E6.98.8E
- 无标签
添加评论