kube-Prometheus监控Nginx

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

image-20250703221941276

Grafana中展示

在 Grafana 中导入 12708 模板 grafana模板大全参考

image-20250703220802495

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇