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

保姆级教程:给Nginx 1.25.4装上VTS模块,再用Prometheus和Grafana实现监控大屏

从零构建Nginx性能监控体系:VTS模块+Prometheus+Grafana实战指南

在当今的互联网服务架构中,Nginx作为高性能的Web服务器和反向代理,承载着关键的业务流量。但很多团队在部署Nginx后,往往只关注其基本功能是否正常运行,而忽视了对其性能指标的持续监控。本文将带你从模块编译开始,逐步搭建完整的Nginx监控体系,让你不仅能实时掌握服务器状态,还能通过可视化大屏快速定位潜在问题。

1. 环境准备与VTS模块编译

在开始之前,我们需要确保系统环境满足编译要求。对于CentOS/RHEL系统,基础依赖包可以通过以下命令安装:

yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

关键版本选择直接影响兼容性,建议采用以下组合:

  • Nginx 1.25.4(稳定版)
  • nginx-module-vts 0.2.2(匹配当前Nginx版本)

下载并解压源代码:

wget http://nginx.org/download/nginx-1.25.4.tar.gz wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.tar.gz -O vts-0.2.2.tar.gz tar -zxvf nginx-1.25.4.tar.gz tar -zxvf vts-0.2.2.tar.gz

编译时最常见的坑是直接运行make install导致原有配置被覆盖。正确做法是仅编译新模块:

cd nginx-1.25.4 ./configure --prefix=/usr/local/nginx \ --add-module=../nginx-module-vts-0.2.2 \ --with-http_ssl_module \ --with-http_stub_status_module make

重要提示:如果已有Nginx在运行,只需替换objs目录下的nginx二进制文件,无需重新安装

2. Nginx配置与VTS模块激活

编译完成后,需要在nginx.conf中添加VTS模块的配置。建议在http块中加入以下内容:

vhost_traffic_status_zone; vhost_traffic_status_filter_by_host on; server { listen 8080; server_name status.local; location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format prometheus; } }

配置完成后,验证并重启Nginx:

/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload

此时访问http://服务器IP:8080/metrics应该能看到Prometheus格式的监控数据。常见问题排查:

问题现象可能原因解决方案
404错误location路径配置错误检查metrics路径是否匹配
无数据输出模块未加载确认nginx -V输出包含vts模块
连接拒绝防火墙限制开放8080端口或调整监听端口

3. 部署nginx-vts-exporter

虽然VTS模块已经提供数据,但通过专门的exporter可以获取更丰富的指标。下载并安装最新版exporter:

wget https://github.com/sysulq/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz -C /opt/

创建systemd服务文件/etc/systemd/system/nginx-exporter.service

[Unit] Description=Nginx VTS Exporter After=network.target [Service] ExecStart=/opt/nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter \ -nginx.scrape_uri=http://localhost:8080/metrics Restart=always [Install] WantedBy=multi-user.target

启动服务并设置开机自启:

systemctl daemon-reload systemctl start nginx-exporter systemctl enable nginx-exporter

验证exporter是否正常工作:

curl http://localhost:9913/metrics

4. Prometheus集成配置

在prometheus.yml中添加新的job配置:

scrape_configs: - job_name: 'nginx' static_configs: - targets: ['exporter_ip:9913'] metrics_path: /metrics relabel_configs: - source_labels: [__address__] target_label: instance regex: '(.*):\d+' replacement: '$1'

重启Prometheus后,可以在Expression Browser中查询nginx相关指标,例如:

nginx_server_requests_total nginx_server_bytes_in nginx_upstream_requests_total

5. Grafana可视化大屏搭建

在Grafana中导入官方模板2949,或自定义关键面板:

核心监控指标推荐

  1. 请求吞吐量:QPS、请求延迟分布
  2. 流量监控:入站/出站带宽
  3. 上游服务健康状态:响应时间、错误率
  4. 缓存命中率:proxy_cache性能
  5. 连接状态:活跃连接数、排队请求数

对于生产环境,建议设置以下告警规则:

  • 5xx错误率超过1%持续5分钟
  • 平均响应时间超过500ms
  • 上游服务不可用

6. 高级配置与优化技巧

VTS模块采样控制:对于高流量场景,可以调整采样频率减少性能影响:

vhost_traffic_status_sample_time 1s; vhost_traffic_status_sample_interval 10s;

指标过滤:只监控特定server或location:

vhost_traffic_status_filter_by_set_key $host host::$server_name;

安全防护:为metrics端点添加基础认证:

location /metrics { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd; vhost_traffic_status_display; }

在实际使用中,我发现VTS模块对Nginx性能的影响通常在3-5%之间,对于大多数场景来说,这个代价换取详细的监控数据是非常值得的。特别是在排查突发的性能问题时,历史指标数据往往能快速定位到问题根源。

http://www.rkmt.cn/news/1458311.html

相关文章:

  • 信号与系统期末救急:单边拉普拉斯变换这6个性质,背会就能拿分
  • GPT-5.5 Ultra工程化落地:从芯片编译到电力协同的端到端部署指南
  • AI与BI系统割裂之痛,深度解构3层融合架构与实时决策闭环构建法
  • Grok在AI女友应用中的真实技术定位与工程实践
  • ASP.NET Core 中的重定向(Redirect)深度解析
  • GPT-5.5是假消息?揭秘当前真实大模型演进路线与性能优化实践
  • 从对抗性流量到负载均衡:手把手解析Dragonfly拓扑中UGAL路由算法的实战配置与调优
  • 056、位置环与速度环的串级PID实现
  • 后端使用 AI 开发前端速成:第五期:Cursor 深度工作流与 Prompt 工程
  • Java Web 公寓报修管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 告别裸机延时!在STM32CUBE MX环境下为TM1640编写更高效的DMA+定时器驱动
  • 华为系UI风格安卓天气应用完整工程源码,Java编写,适配Android 8.0+,含模拟定位与图标资源
  • 保姆级教程:QGC地面站二次开发中,TCP、串口、UDP三种通讯方式到底怎么选?
  • 鸿蒙开发选型指南:从手机到手表,你的第一个App该用Java、JS还是C++?
  • 自适应系统调度与计算图优化技术解析
  • 别再搞混了!C语言里sin、asin、sinh到底怎么用?一个例子讲清楚
  • S26 Ultra防窥屏原理:硬件级定向发光技术解析
  • TurboQuant原理与实战:llama.cpp轻量级LLM量化精度提升指南
  • 从一次数据泄露事件复盘:为什么我们的SM4 CBC加密没起作用?
  • 保姆级教程:为PX4飞控添加纳雷NRA12激光雷达驱动(基于PX4 1.14.0稳定版)
  • 树莓派3B轻量人脸检测方案:带接线图、流程图和即跑Python脚本
  • 别再傻傻分不清!电源纹波和噪声的实战测量与滤波方案(附示波器实测图)
  • 别再傻傻分不清了!用大白话讲明白电脑/手机里的RAM、ROM、Cache和内存条
  • 告别记事本!用Qt的QTextEdit和QTextDocument打造你的第一个富文本编辑器(附完整源码)
  • 避坑指南:HSPICE仿真不收敛?别急着改电路,先检查这5个设置和常见网表错误
  • 别再死记硬背了!用Python+Matplotlib动态可视化理解ASK、FSK、PSK和QAM
  • 从‘私钥碰撞’到‘多签钱包’:我的波场链(TRC20)资产安全升级实战记录
  • 小微企业AI落地秘籍:1-3个月见效,无需技术团队,告别踩坑!
  • 告别手动备份!用WinCC全局VBS脚本,让OnlineTableControl每小时自动导出CSV文件
  • AI辅助开发新体验:让快马平台智能分析代码并生成pytest测试用例