模块项目地址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;
}
}
}
配置完成后,我们就可以访问页面测试一下
参数含义:
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
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地址
Grafana添加视图
https://grafana.com/grafana/dashboards/15205-nginx-stats/
效果图如下
https://grafana.com/grafana/dashboards/14824-nginx-vts-stats/