热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何监控Nginx?

什么是Nginx?Nginx("engine-x")是一个HTTP和反向代理服务器,同时也是一个邮件代理服务器和通用的TCP代理

什么是 Nginx?

Nginx("engine-x")是一个 HTTP 和反向代理服务器,同时也是一个邮件代理服务器和通用的 TCP 代理服务器。作为一个免费开源的服务器,Nginx 具有高性能、稳定和较低的资源占用的特点。它拥有丰富的特征集,同时配置也很简单。

Nginx 是少数几个可以解决 C10K 问题的服务器之一。不同于传统服务器,它使用可扩展的时间驱动(异步)架构替代线程来处理请求。尤为重要的是,该架构占用负载下的内存小,且可预测。即便不需要同时处理数千的网络请求,你仍然能从Nginx 的高性能和低内存占用中受益。从最小的VPS到大型集群服务器,Nginx 都能适用。

Nginx 还有一个商业版 Nginx Plus,功能更加丰富。

监控 Nginx 的参数

Nginx 提供哪些监控参数

下表是 Nginx 提供的监控参数及其简单释义。

参数名称 参数描述
Active connections 当前活跃的用户连接(包含Waiting状态)
accepts 接收到的用户连接总数
handled Nginx处理的用户连接总数
requests 用户请求总数
Reading 当前连接中Nginx读取请求首部的个数
Writing 当前连接中Nginx写返回给用户的个数
Waiting 当前没有请求的活跃用户连接数

通过下面的图,可以清晰的看到参数的具体意义和作用。

如何监控 Nginx?

当用户请求连接Nginx服务器时,accepts计数器会加一。且当服务器处理该连接请求时,handled计数器同样会加一。一般而言,两者的值是相等的,除非达到了某些资源极限(如worker_connection的限制)。

用户连接请求被处理,就会进入 active 状态。如果该连接没有其他 request,则进入 waiting 的子状态;如果有 request,nginx 会读取 request 的 header,计数器 request 加一,进入 reading 的子状态。 reading 状态持续时间非常短,header 被读取后就会进入 writing 状态。事实上,直到服务器将响应结果返回给用户之前,该连接会一直保持 writing 状态。所以说,writing 状态一般会被长时间占用。

Nginx提供哪些监控参数

下表是Nginx Plus提供的主要监控参数、说明以及和Nginx的差异。

参数名称 参数描述 与Nginx差异
Active 当前活跃的用户连接(不包含 Idel 状态) 等同 Active connections
Accepted 接收到的用户连接总数 等同 accepts
Dropped Nginx 丢弃的用户连接总数 accepts - handled
Idle 当前没有请求的活跃用户连接数 等同 Waiting
Total 用户请求总数 等同 requests
Current(Requests) 当前有请求的活跃用户连接数(等同 Active) Reading + Writing
Current(Connections) 当前在线用户数(Active + Idle) Reading + Writing + Waiting

主要参数和开源的Nginx相比较,区别不大。主要就是换了名字,以及通过加减法的参数整合。同样,通过下面的图也能看清这些参数的作用。

如何监控 Nginx?

具体运作和Nginx并无不同,故不赘述。当然,作为商业版,它提供的参数还有很多,可以在这里看。

怎么利用这些参数

开源的 Nginx 提供的原始参数中,实时性的会比较有用,如 Active connections、Reading、Writing 以及 Waiting。这些数据能够反映当前 Nginx 的负载情况,方便在服务器出现问题时及时发现问题。而另一些数据由于不是状态量,Nginx 无法计算当前的量值而改做其统计数,如 accepts、handled 和 requests。

对于维护网站人员,accepts、handled 和 requests 的统计值用处是不大的,值得参考的是短时间内这三者数值的增量。这个短时间可以是一秒,如 accepts_per_second、handled_per_second 和 requests_per_second。一个简单的做法就是每秒都去读取这些参数,返回一个和上一秒的差值就行。当然,handled_per_second 替换成 dropped_per_secOnd=accepts_per_second-handled_per_second 就更完美了。

通过这七个参数,就可以从连接到请求全方位的监控起 Nginx 的运行状态。为了方便检测,对每次获取的参数保留下来,然后按时间展现出来。下图展示了 Nginx 在运行时的参考数据。
如何监控 Nginx?

Nginx 性能监控参数

开源的 Nginx 会提供一个子网页显示前文提到的监控参数。该网页默认时不开启的,需要开放 ngx_http_stub_status_module 来解锁。默认该模块是开放的,通过以下命令,可以快速确定该模块是否已被开放。

nginx -V 2>&1 | grep -o with-http_stub_status_module

如过返回 with-http_stub_status_module,则说明该模块已被开放,而什么都不返回的话就是没有被开放。需要通过原码构建 Nginx 加上配置参数 --with-http_stub_status_module:

./configure \
… \
--with-http_stub_status_module
make
sudo make install

以上步骤搞定后,还有需要一个配置 URL 来开启 Nginx 状态页。打开你的网站对应 Nginx 的配置文件,添加以下修改:

server{
	listen your-website-port;
	location /basic_status {
		stub_status;
	}
}

如果 Nginx 版本低于1.7.5,则需要语法指令添加参数(任意参数):

server{
	listen your-website-port;
	location /basic_status {
		stub_status on;
	}
}

修改完成后,需要重新载入 Nginx,键入命令 nginx -s reload,然后就能在状态页(127.0.0.1:your-website-port/basic_status)看见你的监控参数了。大概是这个样子:

Active connections: 1
server accepts handled requests
 38 38 38
Reading: 0 Writing: 1 Waiting: 0

Nginx Plus 和 Nginx 在前面的设置差不多。配置状态页时,需要在配置文件中加上 server 模块:

server {
		listen your-website-port;

		location /status {
				status;
		}

		location = /status.html {
		}
}

重载一下Nginx,你会在状态页(127.0.0.1:your-website-port/status.html)看到大概这个样子:

如何监控 Nginx?

顺便安利一下,装一个 Ci,就能看到前面关于 Nginx 基于时间的运行状态的图了。免费注册免费使用,还能设置报警策略。具体,戳这里。

Cloud Insight 集监控、管理、计算、协作、可视化于一身,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。
本文系国内 ITOM 行业领军企业 OneAPM 工程师原创。想阅读更多技术文章,请访问 OneAPM 官方技术博客
本文转自 OneAPM 官方博客


推荐阅读
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • andr ... [详细]
  • 本文详细介绍了Java Web应用程序中的过滤器(Filter)功能,包括其作用、实现方式及配置方法。过滤器可以在请求到达目标资源之前对其进行预处理,并在响应返回给客户端之前进行后处理。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文介绍了ArcXML配置文件的分类及其在不同服务中的应用,详细解释了地图配置文件的结构和功能,包括其在Image Service、Feature Service以及ArcMap Server中的使用方法。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
author-avatar
珠珠VS胖胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有