尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Nginx应用与运维——Nginx监控配置及管理(一)
Nginx监控配置及管理1、Nginx连接状态监控1.1、Nginx连接状态1.2、Nginx连接状态模块指令1.3、基于Zabbix的连接状态监控2、HTTP主机状态监控2.1、模块编译2.2、模块配置指令2.3、主机状态监控配置3、TCP/UDP主机状态监控3.1、模块编译3.2、模块配置指令3.3、TCP/UDP主机状态监控配置在Nginx的日常运维管理工作中Nginx的监控管理是一项重要工作。Nginx监控的内容主要包括Nginx的进程数、创建的TCP连接数、等待的连接数等。通过监控软件的实时数据采集功能工作人员可以及时发现及排查Nginx服务器在运行时发生的问题同时也能通过连接状态中各环节的监控数据了解客户端请求响应的性能情况。1、Nginx连接状态监控1.1、Nginx连接状态当客户端发送请求给Nginx服务器时每个连接会被Nginx按照执行情况标记为接受、处理和活跃3个状态。通过对这3个状态数据的监控可以清晰地了解当前Nginx服务器请求连接的处理状态。Nginx连接状态如图所示。接受(Accepts)状态建立并接受客户端的HTTP连接状态。处理(Handled)状态开始处理客户端的HTTP连接状态。活跃(Active)状态对客户端HTTP请求读取请求数据、处理请求数据以及当启用保持连接(keep-alive)机制时使当前HTTP连接处于保持连接机制的连接状态。请求(Requests)客户端发送的数据请求当启用保持连接(keep-alive)机制时客户端请求会在同一HTTP连接内多次使用。等待中(Waiting)状态当启用保持连接机制时等待下一次客户端请求的状态。读取中(Reading)状态正在被读取请求头的客户端连接状态。回写中(Writing)状态正在向客户端返回响应数据的连接状态。当有客户端与Nginx新建立连接时接受状态计数器会加1处理状态计数器通常与接受状态的计数器统计数值是相等的在HTTP并发连接数超过worker_connection的限制时处理状态计数器数值将因受worker_connection指令值的限制而小于接受状态计数器的数值。客户端连接被处理后将进入活跃状态Nginx会读取数据请求的请求头数据当前活动连接标记为读取中状态请求计数器会加1。当请求处理完毕向客户端返回响应数据时当前活动连接标记为回写中状态对启用保持连接的活动连接将标记为等待中状态直到超过Nginx保持连接相关指令限定值时关闭连接。1.2、Nginx连接状态模块指令Nginx提供了ngx_http_stub_status_module模块可用于获取Nginx运行时客户端连接各种状态的计数器数据。该模块需要在编译时添加–with-http_stub_status_module来启用。模块配置指令如表所示。连接状态信息指令连接状态数据1.3、基于Zabbix的连接状态监控Nginx连接状态模块仅提供了各种连接状态的数据统计和输出各状态数据可以通过Zabbix Agent脚本采集并通过Zabbix服务端配置为监控项实现Nginx连接状态的监控。首先在Nginx服务器上启用连接状态统计并配置统计数据输出接口。Nginx配置如下server{listen8080;access_log off;error_log off;location /status{stub_status;# 启用连接状态数据输出功能allow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}Zabbix Agent脚本可以通过Nginx本机8080端口的status路径获取Nginx连接状态的数据。因连接状态在不同状态下的数据都在一个页面中展示所以采集脚本需要通过不同的外部参数获取对应的数据。Zabbix Agent数据采集脚本如下mkdir-p/etc/zabbix/scriptscat/etc/zabbix/scripts/nginx_status.shEOF #!/bin/bash HOST127.0.0.1:8080/status function accepts { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($1)} echo$result} function handled { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($2)} echo$result} function drops { server/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print$1 $2} acceptsecho$server|awk {print int($1)} handledecho$server|awk {print int($2)} echo $[$accepts-$handled] } function requests { result/usr/bin/curl http://$HOST 2/dev/null| awk NR3 | awk {print int($3)} echo$result} function active { result/usr/bin/curl http://$HOST 2/dev/null| grep Active | awk {print$NF} echo$result} function reading { result/usr/bin/curl http://$HOST 2/dev/null| grep Reading | awk {print int($2)} echo$result} function writing { result/usr/bin/curl http://$HOST 2/dev/null| grep Writing | awk {print int($4)} echo$result} function waiting { result/usr/bin/curl http://$HOST 2/dev/null| grep Waiting | awk {print int($6)} echo$result}$1EOF在Zabbix Agent端添加监控项的脚本如下cat/etc/zabbix/zabbix_agentd.d/nginx_status.confEOF UserParameternginx.accepts,/etc/zabbix/scripts/nginx_status.sh accepts UserParameternginx.handled,/etc/zabbix/scripts/nginx_status.sh handled UserParameternginx.drops,/etc/zabbix/scripts/nginx_status.sh drops UserParameternginx.requests,/etc/zabbix/scripts/nginx_status.sh requests UserParameternginx.connections.active,/etc/zabbix/scripts/nginx_status.sh active UserParameternginx.connections.reading,/etc/zabbix/scripts/nginx_status.sh reading UserParameternginx.connections.writing,/etc/zabbix/scripts/nginx_status.sh writing UserParameternginx.connections.waiting,/etc/zabbix/scripts/nginx_status.sh waiting EOF2、HTTP主机状态监控Nginx连接状态是Nginx服务器整体连接数据的统计在实际使用中Nginx会配置很多虚拟主机每个虚拟主机的客户端连接的处理状况也各不相同。当Nginx作为缓存服务或代理服务时所需的统计项也有不同的需求在Nginx的商业版本中由ngx_http_status_module提供基于主机状态的细粒度监控。对于Nginx开源版本推荐用第三方开源模块nginx-module-vts来实现Nginx HTTP主机状态监控。该模块覆盖了对主机连接数、HTTP请求、缓存及upstream等状态数据的监控。2.1、模块编译nginx-module-vts模块可以通过GitHub获取并在Nginx编译时添加。gitclone https://github.com/vozlt/nginx-module-vts.git在Nginx代码目录中使用–add-module参数添加nginx-module-vts模块即可。./configure --add-module../nginx-module-vts2.2、模块配置指令nginx-module-vts模块为主机监控提供了多个配置指令可实现监控数据html、json等格式的输出并可以自定义关键字的方式进行连接数据统计甚至通过统计数据进行限制请求连接数或流量的配置。模块配置指令如表所示。指令vhost_traffic_status_zone、vhost_traffic_status_dump、vhost_traffic_status_filter_max_node仅可在http指令域中编写。其他指令均可在http及其所包含的server、location指令域中编写。vhost_traffic_status_display指令启用时将提供主机状态监控数据输出功能监控数据包括Nginx服务器连接状态(Server Main)、Nginx主机连接状态(ServerZones)、过滤关键字连接状态(Filters)和上游服务器组连接状态(Upstreams)4个部分的内容。Nginx服务器连接状态包括了Nginx连接状态模块自带的连接状态统计数据。Nginx主机连接状态由配置指令vhost_traffic_status_filter_by_host设置是否启用。启用该功能后会对当前Nginx服务器配置的每个主机名的请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。如果所在主机配置了缓存(Cache)还会对缓存的各种状态进行数据统计。过滤关键字连接状态模块会按照配置指令vhost_traffic_status_filter_by_set_key设置的关键字进行状态统计通常会把$uri配置为关键字这样就会将每条URL的请求数(Requests Total)、请求时间(RequestsTime)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)的数据统计出来。如果被配置了缓存则该URL在缓存中的当前状态也会被输出。当Nginx服务器是代理服务器时会按照每个上游服务器组的名称对上游服务器组连接状态包含的每个被代理服务器的IP、端口、状态(State)、响应时间ResponseTime仅被代理服务器返回响应的时间​、权重(Weight)、最大失败次数(Max Fails)、失败超过的时间(Fail Timeout)、请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。vhost_traffic_status_limit_traffic指令的member参数如表所示。vhost_traffic_status_limit_traffic_by_set_key的指令参数limitkey的语法格式如下group[subgroup]namelimitkey的group特定关键字分别为主机(NO)、独立上游服务器(UA)、上游服务器组(UG)、缓存(CC)、过滤器(FG)配置样例如下# 设置按照关键字$geoip_country_code进行访问统计vhost_traffic_status_filter_by_set_key$geoip_country_codecountry::$server_name;# 将过滤器(FG)中标识名称为US的访问请求的最大下载量设置为1024GBvhost_traffic_status_limit_traffic_by_set_key FGcountry::$server_nameUS out:1024G;# 将上游服务器组(UG)中上游服务器组(upstream)名称为backend的被代理服务器10.10.10.17:80最大请求数设置为1000 vhost_traffic_status_limit_traffic_by_set_key UGbackend10.10.10.17:80 request:1000;vhost_traffic_status_set_by_filter指令可以获取当前Nginx服务器在共享内存中的统计数据并赋值给指定的变量配置样例如下# 将主机名为example.org的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterserver/example.org/requestCounter# 将过滤区域country中访问主机example.org且被标识为KR的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterfilter/country::example.orgKR/requestCounter# 将上游服务器组名为backend的被代理服务器10.10.10.11:80的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterupstreamgroup/backend 10.10.10.11:80/requestCounter# 将独立上游服务器10.10.10.11:80的请求统计数据赋值给变量$requestCountervhost_traffic_status_set_by_filter$requestCounterupstreamalone/10.10.10.11:80/requestCounter# 将缓存名称为my_cache_name的命中统计数据赋值给变量$cacheHitvhost_traffic_status_set_by_filter$cacheHitcache/my_cache_name/cacheHit2.3、主机状态监控配置模块nginx-module-vts为Nginx提供了很多监控统计功能。根据nginx-module-vts模块的配置指令可以设计一个全局的配置。对于不同的主机站点可以按照具体的功能设置不同的状态统计配置。全局vts配置如下vhost_traffic_status_zone;# 主机状态监控共享内存vhost_traffic_status_filter_by_host on;# 启用以server_name的主机名为关键字# 进行过滤统计vhost_traffic_status_display_sum_key all_zone;# 将serverZones显示区域下总计条目的# 显示名称设置为all_zonevhost_traffic_status_dump /tmp/vts.db;# 主机状态监控数据存储在/tmp/vts.db中server{listen8080;# 用于查看监控页的监听端口access_log off;vhost_traffic_status off;# 关闭当前站点的监控统计location /vts{vhost_traffic_status_display;# 启用主机状态监控数据输出功能vhost_traffic_status_display_format html;# 主机状态监控数据输出格式为htmlallow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}按照uri关键字进行过滤统计可以显示对应主机每条URL的请求统计数据。server{listen8002;server_name locahost www.nginxbar.org;root /opt/nginx-web;default_type text/xml;# 按照URI进行过滤统计vhost_traffic_status_filter_by_set_key$uriuri;}3、TCP/UDP主机状态监控Nginx服务器支持TCP/UDP的代理但Nginx只在商业版中提供了TCP/UDP服务的状态监控功能对于开源版本可以使用第三方模块nginx-module-stream-sts实现TCP/UDP服务的状态监控。由于Nginx stream模块的特性TCP/UDP服务的状态数据仅在日志处理阶段才会被统计计算。3.1、模块编译模块nginx-module-stream-sts可以通过GitHub获取该模块依赖nginx-module-sts模块也需要被下载。gitclone https://github.com/vozlt/nginx-module-sts.gitgitclone https://github.com/vozlt/nginx-module-stream-sts.git在Nginx代码目录使用–add-module参数添加nginx-module-sts模块和nginx-module-stream-sts模块。./configure --add-module../nginx-module-sts --add-module../nginx-module-stream-sts3.2、模块配置指令模块nginx-module-sts与nginx-module-stream-sts共同组成了TCP/UDP监控的配置指令集。配置命令如表所示。http配置指令stream配置指令1)指令stream_server_traffic_status_zone仅可编写在http指令域中。2)其他指令均可编写在http及其所包含的server、location指令域中。3)指令server_traffic_status_zone及server_traffic_status_histogram_buckets仅可编写在stream指令域中。4)其他指令均可编写在stream及其所包含的server指令域中。5)stream_server_traffic_status_display指令启用后才会启用监控数据输出功能监控数据包括Nginx服务器连接状态(Server Main)、Nginx stream主机连接状态(Server Zones)、过滤关键字连接状态(Filters)和stream上游服务器组连接状态(Upstreams)4个部分的内容。Nginx服务器连接状态包括Nginx连接状态模块自带的连接状态统计数据。Nginx stream主机连接状态会对当前Nginx服务器配置的每个stream主机端口的请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)进行统计。过滤关键字连接状态模块会按照配置指令vhost_traffic_status_filter_by_set_key设置的关键字进行统计会对包含关键字连接的请求数(RequestsTotal)、请求时间(Requests Time)、请求频率(RequestsReq/s)、响应(Responses)状态码、响应总数(ResponsesTotal)、流量(Traffic)的数据进行统计并显示输出。stream上游服务器组连接状态包括每个上游服务器组的名称及其包含的每个被代理服务器的IP、端口、状态(State)、建立连接时间(Response Time Connect)、首字节时间(Response Time FirstByte)、响应时间 Response Time Response仅被代理服务器返回响应的时间​、权重(Weight)、最大失败次数(Max Fails)、失败超时时间(Fail Timeout)、请求数(Requests Total)、请求时间(Requests Time)、请求频率(Requests Req/s)、响应(Responses)状态码、响应总数(Responses Total)、流量(Traffic)数据的统计。6)server_traffic_status_limit_traffic指令的member参数值如表所示。3.3、TCP/UDP主机状态监控配置TCP/UDP主机监控状态页需要配置在http指令域中。http{stream_server_traffic_status_zone;# 启用stream主机状态监控并使用默认共享内存配置server{listen8080;# 用于查看监控页的监听端口access_log off;location /sts{stream_server_traffic_status_display;# 启用stream主机状态监控数据输出#stream主机状态监控数据输出格式为htmlstream_server_traffic_status_display_format html;allow127.0.0.0/8;allow10.0.0.0/8;allow192.168.0.0/16;deny all;}}}在stream指令域配置全局启用stream主机状态监控功能。stream{server_traffic_status_zone;# 启用stream主机状态监控并使用默认# 共享内存配置upstream redis{server192.168.2.100:6379;}server{listen6379;proxy_bind$remote_addrtransparent;proxy_pass redis;proxy_connect_timeout 5s;access_log logs/redis_access.log tcp;}}
RELATED

相关推荐

雷达辐射源识别从数据到模型:完整落地管线与避坑指南

雷达辐射源识别从数据到模型:完整落地管线与避坑指南

简介:面向雷达侦察、电子对抗与机器学习交叉领域的研究者及相关工程技术人员,这份PDF文献综述系统回顾了机器学习在雷达辐射源识别中的研究脉络与应用进展,原文刊载于《兵器装备工程学报》2016年第9期。全文从20世纪80年代的参数匹配与规则方…

📅 2026/10/5 10:34:01
Docker + vLLM 部署 BGE-M3:本地 Embedding 服务实战

Docker + vLLM 部署 BGE-M3:本地 Embedding 服务实战

简介:这是一份面向零基础开发者的实战教程,核心讲解如何借助Docker容器和vLLM推理框架,在本地环境部署北京智源人工智能研究院推出的BGE-M3多语言文本嵌入模型。BGE-M3支持稠密检索、稀疏检索与多向量检索三种模式,可广泛用于跨语…

📅 2026/10/5 10:34:01
网络监控系统拓扑图PPT画法:分层架构与SNMP告警链路避坑指南

网络监控系统拓扑图PPT画法:分层架构与SNMP告警链路避坑指南

简介:一份面向安防监控与网络工程人员的网络监控系统拓扑图PPT,内容聚焦视频监控系统的基础架构,适用于弱电项目设计、方案汇报或教学演示场景。资源包共1个文件,为pptx格式幻灯片,资源包大小约178KB,内容精…

📅 2026/10/5 10:34:01
MORE NEWS

更多资讯

📰

大模型上下文管理实战:context-mode四种模式与生产级实现

我印象最深的一次翻车,是给一个电商客户做的智能客服系统,上线第三天就被投诉"AI 有健忘症"。用户跟机器人来回确认了十几轮退换货政策,最后补了一句"那按我刚才说的那个特殊情况处理",机器人直接回了一段标准…

📰

自动驾驶数据集如何转换为YOLOv5目录格式?一文讲清验收与避坑

简介:面向目标检测学习者和自动驾驶开发者,一份按YOLOv5目录规范整理的大型自动驾驶道路信息检测数据集,覆盖卡车、行人、交通信号灯、车辆等11个常见类别,训练集与验证集划分完整,可直接用于YOLO系列模型训练与评估。…

📰

插件机制全解析:从加载原理到 failed to load plugins 排查

“plugins”大概是我这些年见过出场率最高、同时又最容易被误解的一个词。热搜里关于它的提问特别典型:有人问“IAR plugins 是干什么的”,有人贴出failed to load plugins web boot: 2 entries did not activate这种报错求助,还有人关心 Mus…

📰

从ScrollTrigger到GSAP:前端滚动动画插件核心配置与实战指南

我一直觉得,前端动画这条路上,有两类人:一类是打开别人做的网页,觉得“卧槽这交互真顺滑”然后止步于此;另一类是按下F12翻源码,非要把那几行JS琢磨明白不可。如果你属于后者,又恰好对滚动动效感…

📰

Hadoop+Spark+Django:图书自动分类系统的完整数据链路

先声明一下:纯从算法角度看,给图书自动分类真的不需要上Hadoop。我自己拿Python跑个朴素贝叶斯,几万条数据几分钟就能出结果。但如果你想要的不只是一个分类脚本,而是一条完整的数据链路——从分布式存储、分布式计算、模型训练&a…

📰

STM32H743驱动FM25CL64铁电存储器:SPI总线实战避坑指南

这板子是拿来做一台带屏工业设备的,主控用的STM32H743,屏幕逻辑、JPEG解码、LVGL界面都压在它身上。原来的方案里存参数用的是24C64 EEPROM,跑了一段时间发现两个问题:一个是写参数时要先擦后写,掉电瞬间如果正在写&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬