托管 Prometheus 支持基于 exporter 的方式来监控 nginx 的运行状态,本文为您介绍如何在集群中部署 nginx-exporter,并实现对 nginx 的监控。
nginx 应用通过 stub_status 页面暴露了部分监控指标。nginx-exporter 会采集单个 nginx 实例指标,并将其转化为 Prometheus 可用的监控数据。
nginx 通过 stub_status 页面暴露 nginx 的状态数据。当您完成 nginx 部署后,需要首先检查 nginx 是否启用了该功能。
nginx -V 2>&1 | grep -o with-http_stub_status_module
如果命令回显为 with-http_stub_status_module
,则说明 nginx 已启用 stub_status 模块。
2. 修改 nginx.conf 配置文件,指定 stub_status 页面的访问端口号和 URL 地址。
server { listen 8080; location /stub_status { stub_status on; access_log off; } }
nginx -t nginx -s load
curl http://127.0.0.1:8080/stub_status
预期返回结果如下所示。
Active connections: 45 server accepts handled requests 1056958 1156958 4491319 Reading: 0 Writing: 25 Waiting : 7
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-exporter # 配置 exporter 的名称 namespace: volcano-metrics # 配置 exporter 的命名空间 labels: app-name: nginx-exporter # 配置 exporter 的标签 spec: replicas: 1 # 配置 exporter 副本数 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter spec: containers: - args: - "-nginx.scrape-uri=http://<nginx-ip>:8080/stub_status" # 配置 exporter 抓取指标的页面路径,该路径需要与 nginx 的 stub_status 页面路径一致。 name: nginx-exporter # 配置容器名称 image: nginx/nginx-prometheus-exporter:latest # 拉取 Docker Hub 中的 exporter 镜像 ports: - containerPort: 9113 # 配置容器端口号 app-name: metric-port # 配置容器端口名称
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: nginx-exporter # 配置 PodMonitor 的名称 namespace: volcano-metrics # 配置 PodMonitor 的命名空间 labels: volcengine.vmp: "true" # 配置 PodMonitor 的标签,允许被 Prometheus-agent 发现 spec: podMetricsEndpoints: - interval: 30s port: metric-port # 填写 exporter 的容器端口名称 path: /metrics # 填写指标暴露的 URI 路径,不填默认为 /metrics namespaceSelector: matchNames: - volcano-metrics # 配置为 exporter 所在的命名空间 selector: matchLabels: app-name: nginx-exporter # 配置 exporter 的 Label 值,以定位和选择目标 Pod
kubectl port-forward service/grafana 3000:3000 -n volcano-metrics
admin
密码admin
登录。说明
nginx-exporter 的详细参数,请参见 nginx-exporter。