当前位置: 首页 > news >正文

Nginx 实战系列(五)—— Nginx流量监控:从stub_status到nginx-module-vts的进阶指南

文章目录

  • 前言
  • 一、Nginx监控概述
    • 1.1 为什么需要监控Nginx
    • 1.2 常见监控方案简介
  • 二、stub_status模块的使用与局限
    • 2.1 stub_status模块简介
    • 2.2 配置和使用stub_status
    • 2.3 stub_status的局限性
  • 三、nginx-module-vts模块的安装与配置
    • 3.1 nginx-module-vts模块简介
    • 3.2 安装nginx-module-vts
      • 3.2.1 下载模块
      • 3.2.2 编译Nginx并添加模块
      • 3.2.3 配置Nginx
      • 3.2.4 重启Nginx并测试
    • 3.4 nginx-module-vts的高级配置
      • 3.4.1 多种输出格式支持
      • 3.4.2 禁用特定server的统计
      • 3.4.3 共享内存大小调整
  • 四、stub_status与nginx-module-vts的全面对比
    • 4.1 功能对比
    • 4.2 性能影响
    • 4.3 使用场景建议
  • 总结

前言

作为一名使用Nginx的运维工程师或开发者,监控Nginx的运行状态和流量情况是保证服务稳定性和性能优化的重要环节。你可能已经使用过Nginx内置的http_stub_status_module来获取基本监控指标,但或许也感受到了它在功能上的局限。

本文将带你深入了解如何安装更强大的nginx-module-vts模块,并全面对比这两个监控方案的差异,帮助你做出更合适的选择。


一、Nginx监控概述

1.1 为什么需要监控Nginx

Nginx作为高性能的Web服务器和反向代理服务器,承载着业务的关键流量。通过监控Nginx,我们可以:

  • 实时了解服务器健康状况
  • 及时发现性能瓶颈和异常情况
  • 为容量规划和性能优化提供数据支撑
  • 分析流量 patterns 和用户行为

1.2 常见监控方案简介

Nginx监控主要有两种方式:使用内置的stub_status模块或第三方模块如nginx-module-vts

二、stub_status模块的使用与局限

2.1 stub_status模块简介

ngx_http_stub_status_module是Nginx的一个内置模块,提供基本的Nginx性能统计数据。 但这个模块默认不会编译进Nginx,需要在编译时通过指定--with-http_stub_status_module参数来启用。

2.2 配置和使用stub_status

stub_status配置方式可以参考Nginx 实战系列(二)—— Nginx 配置文件与虚拟主机搭建

2.3 stub_status的局限性

虽然stub_status模块提供了一些基本指标,但它存在以下局限:

  • 只有整个服务器级别的基础连接和请求统计数据,缺乏虚拟主机(server block)级别的详细统计
  • 没有缓存统计信息,如FastCGI、uWSGI和代理缓存的使用情况和命中率
  • 缺乏上游服务器(upstream)群集统计,无法了解后端服务器的健康状况、响应时间和失败次数
  • 分类统计缺失,不支持按HTTP方法或状态码进行数据分类统计
  • 数据格式简单,只提供纯文本格式,难以与监控系统集成

三、nginx-module-vts模块的安装与配置

3.1 nginx-module-vts模块简介

nginx-module-vts(Virtual Host Traffic Status Module)是一个第三方开发的Nginx模块,提供更详细和全面的监控数据。 它能够采集包括虚拟主机级别统计、缓存统计、上游服务器统计等在内的多维数据。

3.2 安装nginx-module-vts

3.2.1 下载模块

首先下载nginx-module-vts模块:

wget https://github.com/vozlt/nginx-module-vts/archive/refs/heads/master.zip -O nginx-module-vts-master.zip
unzip nginx-module-vts-master.zip
mv nginx-module-vts-master /usr/local/

在这里插入图片描述

3.2.2 编译Nginx并添加模块

进入Nginx源码目录,重新编译并添加vts模块:

# 安装依赖环境
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel# 配置编译参数,添加vts模块
cd cd /opt/nginx-1.20.2  # 你的nginx解压的目录(不是安装目录)
./configure --add-module=/usr/local/nginx-module-vts-master/ # 在原参数基础上添加# 编译并安装
make && make install

在这里插入图片描述

3.2.3 配置Nginx

在nginx.conf配置文件中添加以下配置:

vim /usr/local/nginx/conf/nginx.conf
http {# 添加共享内存区域配置vhost_traffic_status_zone;# 启用按主机名统计(当有多个server_name时很重要)vhost_traffic_status_filter_by_host on;server {listen 80;server_name localhost;# 状态监控端点location /status {vhost_traffic_status_display;vhost_traffic_status_display_format html;# 访问控制设置allow 192.168.10.110;deny all;}}
}

3.2.4 重启Nginx并测试

重启Nginx服务后,访问http://your-server/status即可看到监控页面。

在这里插入图片描述

3.4 nginx-module-vts的高级配置

3.4.1 多种输出格式支持

vts模块支持多种输出格式,便于集成到不同监控系统:

location /status {vhost_traffic_status_display;vhost_traffic_status_display_format html; # 支持html、json、prometheus格式
}

3.4.2 禁用特定server的统计

如果不想统计某些server区块,可以禁用统计:

server {server_name example.com;vhost_traffic_status off;# 其他配置...
}

3.4.3 共享内存大小调整

对于高流量网站,可能需要增加共享内存大小:

http {vhost_traffic_status_zone shared:vhost_traffic_status:10m;# 其他配置...
}

注意:共享内存配置过小会导致统计丢失,建议每1万QPS预留1MB内存。

四、stub_status与nginx-module-vts的全面对比

4.1 功能对比

功能特性stub_statusnginx-module-vts
安装方式内置模块,需编译时启用第三方模块,需重新编译Nginx
统计粒度全局统计支持虚拟主机、上游服务器等多维度统计
缓存统计不支持支持FastCGI、uWSGI和代理缓存统计
上游服务器监控不支持支持上游服务器群集健康状况、响应时间
HTTP状态码统计不支持支持按HTTP状态码分类统计
数据输出格式纯文本HTML、JSON、Prometheus多种格式
集成便利性需要自行解析文本轻松集成Prometheus、Grafana等监控系统
社区活跃度官方维护,稳定社区维护,更新较慢

4.2 性能影响

nginx-module-vts采用共享内存技术实现零性能损耗,每秒可处理百万级请求统计,相比传统日志分析,延迟降低90%,内存占用减少70%。 但在高并发场景下,仍需根据QPS适当调整共享内存大小。

4.3 使用场景建议

  • stub_status适用场景

    • 简单监控需求,只需要基本连接数和请求数统计
    • 资源有限,不想重新编译Nginx
    • 快速查看Nginx基本状态
  • nginx-module-vts适用场景

    • 需要详细的虚拟主机级别统计
    • 需要监控上游服务器健康状况和性能
    • 需要集成Prometheus+Grafana监控栈
    • 需要分析HTTP状态码分布和请求方法分布
    • 需要监控缓存命中率和效果

总结

从简单的stub_status模块到功能强大的nginx-module-vts,Nginx监控方案的选择应根据实际需求和环境复杂程度来决定。

  • 如果你只需要基本的状态监控,并且不想重新编译Nginx,那么stub_status模块足以满足需求。
  • 如果你需要详细的监控数据,并且计划构建完整的监控体系(如集成Prometheus+Grafana),那么nginx-module-vts模块是更好的选择,尽管它需要重新编译Nginx。

无论选择哪种方案,定期监控Nginx性能指标都是保证服务稳定性和性能优化的重要环节。通过合理的监控策略,可以及时发现潜在问题,确保服务器高效稳定运行。

注意事项

  1. 生产环境中编译安装新模块前,应在测试环境充分验证
  2. 注意访问控制,避免监控接口暴露给公网
  3. 根据业务流量合理配置共享内存大小,避免统计丢失
  4. 统一多节点时区设置,避免时间戳漂移问题

文章转载自:

http://fiAzM49h.zzhqs.cn
http://Fd4oCnee.zzhqs.cn
http://FYdFIDaH.zzhqs.cn
http://RipCJLS1.zzhqs.cn
http://5spAELqC.zzhqs.cn
http://dkP07mu3.zzhqs.cn
http://0e8irDWF.zzhqs.cn
http://R8KRMRUS.zzhqs.cn
http://iMMWlpDZ.zzhqs.cn
http://liVWl7Si.zzhqs.cn
http://5txRCo1m.zzhqs.cn
http://VD1krVpl.zzhqs.cn
http://OJY4lIy6.zzhqs.cn
http://ABjFCUHk.zzhqs.cn
http://frwJmv8N.zzhqs.cn
http://XD5ChKS3.zzhqs.cn
http://KoVMeGgO.zzhqs.cn
http://euBYAfPU.zzhqs.cn
http://ZJyPeeIR.zzhqs.cn
http://Gl4BXGuo.zzhqs.cn
http://59rRTbuA.zzhqs.cn
http://aLtToadT.zzhqs.cn
http://XePUdLlo.zzhqs.cn
http://9kKy7A0f.zzhqs.cn
http://c96BypuO.zzhqs.cn
http://DgdFXd3W.zzhqs.cn
http://iWLPeGgU.zzhqs.cn
http://V3FDxPq9.zzhqs.cn
http://A2Lopxe7.zzhqs.cn
http://PKtZXAwT.zzhqs.cn
http://www.dtcms.com/a/372717.html

相关文章:

  • 34. 什么是反射
  • YOLO11 改进、魔改|通道自注意力卷积块CSA-ConvBlock,实现 “轻量化特征增强”
  • 优先搜索(DFS)实战
  • 计算机视觉opencv----银行卡号码识别
  • 第六章、从transformer到nlp大模型:编码器-解码器模型 (Encoder-Decoder)
  • pymodbus启动一个简单的modbus tcp server
  • 【NowCoder】牛客周赛 Round 108 EF (背包问题 | SOSDP)
  • 【ARMday02】
  • OFDR设备开机到出图的5个关键操作步骤
  • ArcGIS学习-19 实战-表面分析
  • 【算法】双指针(二)复写零
  • 视频串行解串器(SerDes)介绍
  • PyTorch 动态图的灵活性与实用技巧
  • 【P01_AI测试开发课程-导论】
  • 从社交破冰到学习规划,鸿蒙5开启智慧校园新生活
  • 【Linux操作系统】简学深悟启示录:文件fd
  • Kata Container 部署与应用实践
  • 【CentOS7】docker安装成功后测试,报Unable to find image ‘hello-world:latest‘ locally
  • springboot配置请求日志
  • 2-ATSAMV71Q21-BOOT
  • 【Qt开发】显示类控件(一)-> QLabel
  • 把不确定变成确定性收益:电力交易未来场景的预测、优化与实操
  • 大数据毕业设计选题推荐-基于大数据的国家药品采集药品数据可视化分析系统-Spark-Hadoop-Bigdata
  • 如何在Linux上使用Docker在本地部署开源PDF工具Stirling PDF:StirlingPDF+cpolar让专业操作像在线文档一样简单
  • 7,000 星!AutoMQ 开源再创里程碑
  • 四大金刚之计算机操作系统
  • 深入剖析 MyBatis 核心原理模块一:快速入门
  • 【Ansible】的介绍
  • VMware共享文件夹设置
  • YOLO11实战 第009期-基于yolo11的咖啡叶病害目标检测实战文档(yolo格式数据免费获取)