Promethues基于Nginxmodulevts模块监控Nginx流量

2023年 7月 14日 62.8k 0

模块项目地址https://github.com/vozlt/nginx-module-vts

nginx-module-vts介绍

Nginx虚拟主机流量状态模块

提供对虚拟主机状态信息的访问。它包含当前状态,例如服务器、上游、缓存。这类似于nginx plus的实时活动监控。内置的html也取自旧版本的演示页面。

首先,vhost_traffic_status_zone是添加,添加vhost_traffic_status_display设置,则可以通过如下方式访问:

  • 支持json/status/format/json
    如果您请求/status/format/json,将返回一个 JSON 文档,其中包含当前活动数据,以便在实时仪表板和第三方监控工具中使用。

  • 支持html/status/format/html
    如果您提出请求/status/format/html,将使用 HTML 格式的内置实时仪表板进行响应,该仪表板在内部向 发出请求/status/format/json。

  • 支持jsonp/status/format/jsonp
    如果您请求/status/format/jsonp,将使用 JSONP 回调函数进行响应,其中包含当前活动数据,以便在实时仪表板和第三方监控工具中使用。

  • 支持Prometheus/status/format/prometheus
    如果您请求/status/format/prometheus,将使用包含当前活动数据的prometheus文档进行响应。

  • 支持control/status/format/control
    如果您请求/status/control,将在通过查询字符串重置或删除区域后以 JSON 文档进行响应。请参阅控制。

nginx-module-vts兼容

  • 1.22.x(上次测试:1.22.0)
  • 1.19.x(上次测试:1.19.6)
  • 1.18.x(上次测试:1.18.0)
  • 1.16.x(上次测试:1.15.1)
  • 1.15.x(上次测试:1.15.0)
  • 1.14.x(上次测试:1.14.0)
  • 1.13.x(上次测试:12.13)
  • 1.12.x(上次测试:1.12.2)
  • 1.11.x(上次测试:10.11)
  • 1.10.x(上次测试:1.10.3)
  • 1.8.x(上次测试:1.8.0)
  • 1.6.x(上次测试:1.6.3)
  • 1.4.x(上次测试:1.4.7)

nginx-module-vts安装

首先需要先下载依赖模块

https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.zip

我这里已经有一台nginx了,我们直接将这模块添加进去

root@frps:/www/server/nginx/src# nginx -V
nginx version: nginx/1.22.1
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1q  5 Jul 2022
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module
root@frps:/www/server/nginx/src#

新增模块

wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.zip

#代理下载
wget https://d.frps.cn/file/tools/nginx/model/nginx-module-vts_v0.2.2.zip

解压

 unzip nginx-module-vts_v0.2.2.zip

上面我们执行nginx -v看到了之前的编译参数,这次添加vts模块即可

./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module  --add-module=/www/server/nginx/src/nginx-module-vts-0.2.2

--add-module=/www/server/nginx/src/nginx-module-vts-0.2.2 为新增vts模块

我们只需要执行make就可以

root@frps:/www/server/nginx/src# make

拷贝二进制命令到nginx启动目录

root@frps:/www/server/nginx/src# cp objs/nginx /www/server/nginx/sbin/nginx  #拷贝文件

root@frps:/www/server/nginx/src# ls /www/server/nginx/sbin/nginx
/www/server/nginx/sbin/nginx

root@frps:/www/server/nginx/src# /www/server/nginx/sbin/nginx -V #检查最后一行
nginx version: nginx/1.22.1
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1q  5 Jul 2022
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/www/server/nginx/src/nginx-module-vts-0.2.2

添加配置文件,编辑nginx配置文件

http {

    #---隐藏其他配置

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on;

    server {

        #---隐藏其他的路由

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }     

    }
}

配置完成后,我们就可以访问页面测试一下

Promethues基于Nginx-module-vts模块监控Nginx流量-1

参数含义:

vhost_traffic_status_filter_by_host on;
开启此功能,在 nginx 配置有多个 server_name 的情况下,会根据不同的 server_name 进行流量的统计,否则默认会把流量全部计算到第一个server_name

当然如果有不想统计流量的server区域, 那么就可以禁用vhost_traffic_status,比如:

server {
... vhost_traffic_status off; ...
}

当我们服务配置完成后,可以访问下面的地址来获取Prometheus数据

https://localhost/status/format/prometheus

Promethues基于Nginx-module-vts模块监控Nginx流量-2

Alertmanager规则

Prometheus规则如下

  - job_name: 'abcdocker nginx'
    metrics_path: '/status/format/prometheus'
    static_configs:
      - targets: ['kubesphere.frps.cn']
        labels:
          env: 'abcdocker nginx'
  • job_name job名称
  • metrics_path Prometheus请求路径 (我nginx配置的固定路径为/status 所以路径是这个,需要根据实际情况修改)
  • targets nginx status地址

Promethues基于Nginx-module-vts模块监控Nginx流量-3

Grafana添加视图

https://grafana.com/grafana/dashboards/15205-nginx-stats/

效果图如下Promethues基于Nginx-module-vts模块监控Nginx流量-4

https://grafana.com/grafana/dashboards/14824-nginx-vts-stats/Promethues基于Nginx-module-vts模块监控Nginx流量-5

相关文章

对接alertmanager创建钉钉卡片(1)
手把手教你搭建OpenFalcon监控系统
无需任何魔法即可使用 Ansible 的神奇变量“hostvars”
openobseve HA本地单集群模式
基于k8s上loggie/vector/openobserve日志收集
openobseve单节点和查询语法

发布评论