nginx-集成prometheus监控(k8s)

发布于:2025-08-16 ⋅ 阅读:(23) ⋅ 点赞:(0)

一. 方案选型: 

   对于nginx 的监控 ,是可以和prometheus 集成的。 实现的方案有两种,分别是基于第三封模块的nginx-vts-exporter 和官方维护的 nginx-exporter。 其中官方维护的分为社区版本和plus版本。社区版本的指标比较少,而plus版是收费的,故: 如果是生产环境而非plus版本,建议采用nginx-vts-exporter方式。 如只是需要监控基础指标(存活,活跃数量等),采用nginx-exporter即可。 

二.部署方式:

 1. 采用nginx-exporter:

  配置nginx指标暴露接口:

server {
        listen 80 default_server;
        server_name _;
	location /nginx_status {
		stub_status on;
		access_log off;
		allow 172.0.0.0/8;
	}
        location / {
                deny all;
        }
}

验证:

部署exporter:

  可以选择docker 方式,也可以选择独立程序,这里选择采用docker 部署在k8s。 

# Source: prometheus-nginx-exporter/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-exporter
  namespace: monitoring
  labels:
    app.kubernetes.io/name: nginx-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: nginx-exporter
  template:
    metadata:
      labels:
        app.kubernetes.io/name: nginx-exporter
    spec:
      serviceAccountName: default
      securityContext:
        {}
      containers:
        - name: nginx-exporter
          securityContext:
            {}
          image: "nginx/nginx-prometheus-exporter:1.4.2"
          imagePullPolicy: IfNotPresent
          args:
            - "--nginx.scrape-uri=http://172.31.40.117/nginx_status"
          env:
          ports:
            - containerPort: 9113
          livenessProbe:
            httpGet:
              path: /
              port: 9113
          readinessProbe:
            httpGet:
              path: /
              port: 9113

---svc
apiVersion: v1
kind: Service
metadata:
  name: nginx-exporter
  namespace: monitoring
  labels:
    app.kubernetes.io/name: nginx-exporter
spec:
  type: ClusterIP
  ports:
    - port: 9113
      targetPort: 9113
      protocol: TCP
      name: nginx-exporter
  selector:
    app.kubernetes.io/name: nginx-exporter

配置采集器:

可查看指标:

2. 采用nginx-vts-exporter方式部署: 

 需要先确定nginx 支持vts 模块。如果没有需要编译安装: 

nginx -V 2>&1 | grep -o 'vhost_traffic_status'

编译安装方式:

#下载模块源码(https://github.com/vozlt/nginx-module-vts),重新编译 Nginx 并添加模块

./configure --add-module=/path/to/nginx-module-vts 

配置nginx启用vts模块:

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on; 

    server {
        listen 80;
        server_name localhost;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format json;
        }
    }

    server {
        listen 80;
        server_name example.com;
    }
}

部署nginx-vts-exporter:

wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.8/nginx-vts-exporter-0.10.8.linux-amd64.tar.gz
tar -zxvf nginx-vts-exporter-0.10.8.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.8.linux-amd64 /usr/local/nginx-vts-exporter



#启动exporter
/usr/local/nginx-vts-exporter/nginx-vts-exporter \
  -nginx.scrape_uri=http://127.0.0.1/status/format/json \
  -web.listen-address=:9913

配置prometheus , 参考nginx-exporter

三. 和grafana 集成:

可通过开源dashbaord 配置导入:

--------------------------------------------------------------------------------------------

                        深耕运维行业多年,擅长运维体系建设,方案落地。欢迎交流!

                                                    V: ywjw996

                                                    《 运维经纬 》
 


网站公告

今日签到

点亮在社区的每一天
去签到