博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何监控 Nginx?
阅读量:4028 次
发布时间:2019-05-24

本文共 3151 字,大约阅读时间需要 10 分钟。

http://blog.oneapm.com/apm-tech/412.html

什么是 ?

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

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

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

监控 Nginx 的参数

Nginx 提供哪些监控参数

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

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

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

如何监控 Nginx? 技术分享 第1张

当用户请求连接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? 技术分享 第2张

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

怎么利用这些参数

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

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

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

如何获取 参数

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

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

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

./configure \… \--with-http_stub_status_modulemake  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 38Reading: 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? 技术分享 第4张

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

转载地址:http://udlbi.baihongyu.com/

你可能感兴趣的文章
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
flutter-实现一个下拉刷新上拉加载的列表
查看>>
android 代码实现圆角
查看>>
postman调试webservice接口
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
Android DataBinding使用2-Recycleview
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
关于activity保存页面状态的两个方法
查看>>