一、背景
Nginx有一个stub_status模块,可以获取到Nginx的一些相关指标。stub_status
模块用于提供基本的 Nginx 性能统计数据。这个模块不是默认编译进 Nginx 的,所以如果需要使用它,确保 Nginx 是带有 --with-http_stub_status_module
选项编译的。
stub_status
模块可以用来监控 Nginx 的活动连接数、接受和处理的请求数以及读取、写入或保持的请求数等信息。
Active connections
是当前活跃的连接数量。accepts
是已经接受的连接总数。handled
是已经处理的连接总数。requests
是接收到的客户端请求数。Reading
表示Nginx正在从客户端读取请求头的连接数。Writing
表示Nginx正在向客户端返回响应的连接数。Waiting
表示处于 keep-alive 状态等待请求的连接数。
Nginx 的 stub_status
模块和 Nginx VTS (Virtual Host Traffic Status) 模块都提供了关于 Nginx 性能的监控信息,但它们的功能有所不同。以下是 stub_status
相对于 VTS 缺少的一些功能:
-
详细的虚拟主机统计:
- VTS 提供了每个虚拟主机(server block)的详细流量统计数据,包括响应时间、请求数、状态码分布等。
stub_status
只提供整个服务器级别的基础连接和请求统计数据。
-
缓存统计:
- VTS 能够展示有关 FastCGI、uWSGI 和代理缓存的使用情况和命中率等信息。
stub_status
不包含这些高级缓存统计信息。
-
上游服务器群集统计:
- VTS 可以显示与 upstream 群集相关的统计数据,比如每个后端服务器的健康状况、响应时间和失败次数等。
stub_status
并不提供对 upstream 服务器的任何监控信息。
-
HTTP 方法和状态代码统计:
- VTS 支持按 HTTP 方法(GET, POST, PUT 等)和 HTTP 状态代码(200, 404, 500 等)进行分类统计。
stub_status
没有如此细粒度的统计能力。
-
自定义指标:
- VTS 允许通过配置文件添加自定义的监控指标。
stub_status
则是一个更为静态的模块,提供的指标是固定的。
-
图形界面支持:
- VTS 通常会配合一个前端界面来可视化收集到的数据,便于理解和分析。
stub_status
输出的是纯文本格式的数据,需要额外的工作才能将这些数据转化为易于理解的形式。
-
扩展性:
- VTS 是一个更加灵活和可扩展的解决方案,它可以通过 JSON 格式输出监控数据,方便与其他监控系统集成。
stub_status
提供的数据格式较为简单,主要用于基本的性能监测。
要更深入和全面的 Nginx 流量及性能监控,VTS 是一个更加强大且适合的选择。并且VTS支持的数据格式很多,如JSON、HTML、以及我们熟悉的Promethues数据格式。
将Nginx指标纳管到Prometheus正好能够符合我们的监控和告警体系,与我们要建设的可观测平台不谋而合!
二、配置过程
1、nginx编译vts模块
vts模块地址: https://github.com/vozlt/nginx-module-vts
需要注意的是,下载的vts版本和Nginx的版本号最好保持一致.否则可能出现兼容性问题,和es搭配kibana一样,也是要一一对应肯定最好的.
解压nginx源码包
解压vts模块压缩包
./configure --prefix=/usr/local/nginx --without-http_rewrite_module --without-http_gzip_module --a
dd-module=/root/nginx/nginx-module-vts-0.1.18/
2、配置nginx
location /status {vhost_traffic_status_display;vhost_traffic_status_display_format prometheus; # html、json、prometheus
}
3、配置promethues
访问nginx的/status页面,例如配置html则显示html页面,也可以显示json:
配置prometheus响应的数据格式后,显示prometheus数据:
4、配置grafana面板
官方的Grafana面板: https://grafana.com/grafana/dashboards/9785-nginx-vts/
面板ID: 9785
三、总结
VTS模块能够获取比stub_status更详细、更丰富的指标,可以有助于我们对nginx有更全面的监控和配置更加合理的告警信息,便于问题的及时发现以及相关优化!