kube-Prometheus监控Nginx
要使用 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 Prometheus Exporter监控
Nginx 通过 stub_status 页面暴露了部分监控指标。Nginx Prometheus Exporter 会采集单个 Nginx 实例指标,并将其转化为 Prometheus 可用的监控数据, 最终通过 HTTP 协议暴露给 Prometheus 服务进行采集。
前提条件
开启 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。
- 如果在终端中输出
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
安装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
加入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
Grafana中展示
在 Grafana 中导入 12708 模板 grafana模板大全参考
nginx-vts-exporter 监控
因为nginx需要nginx-module-vts
依赖包支持,但最近项目都未进行此包,因此这次未能进行验证,但可参考:https://www.cnblogs.com/you-men/p/13173245.html
参考
1.https://hub.docker.com/r/nginx/nginx-prometheus-exporter
2.https://github.com/nginx/nginx-prometheus-exporter/releases
3.https://github.com/nginx/nginx-prometheus-exporter/blob/main/examples/systemd/README.md
4.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