要使用 Prometheus 监控 Nginx 数据,通常需要通过一个 exporter 来暴露 Nginx 的指标数据。
Nginx 本身并不直接支持 Prometheus 格式的指标输出,但可以通过以下几种方式实现监控,一种是通过nginx_exporter 监控,需要开启 nginx_stub_status,主要是 nginx 自身的 status 信息,metrics 数据相对较少;另一种是使用 nginx-vts-exporter 监控,但是需要在编译 nginx 的时候添加 nginx-module-vts 模块,监控数据较多,提供了包含 server、upstream以及cache的相关监控指标,指标更加丰富。
Nginx 通过 stub_status 页面暴露了部分监控指标。Nginx Prometheus Exporter 会采集单个 Nginx 实例指标,并将其转化为 Prometheus 可用的监控数据, 最终通过 HTTP 协议暴露给 Prometheus 服务进行采集。
开启 NGINX stub_status 功能
nginx -V 2>&1 | grep -o with-http_stub_status_module |
添加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 |
下载地址: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 |
--- 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 |
在 Grafana 中导入 12708 模板 grafana模板大全参考
因为 nginx 需要 nginx-module-vts 依赖包支持,但最近项目都未进行此包,因此这次未能进行验证,但可参考:https://www.cnblogs.com/you-men/p/13173245.html 和 4009-OpenResty 及模块编译安装