资讯专栏INFORMATION COLUMN

如何监控 Nginx?

lixiang / 3272人阅读

摘要:监控的参数提供哪些监控参数下表是提供的监控参数及其简单释义。用户连接请求被处理,就会进入状态。如何获取性能监控参数开源的会提供一个子网页显示前文提到的监控参数。免费注册免费使用,还能设置报警策略。

什么是 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服务器时,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 提供的原始参数中,实时性的会比较有用,如 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 会提供一个子网页显示前文提到的监控参数。该网页默认时不开启的,需要开放 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)看到大概这个样子:

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39230.html

相关文章

  • 基于Nginx日志的异常监控策略

    摘要:我会写一些是后端技术前端工程相关的文章,偶尔会有一些大数据相关,也会推荐一些好玩的东西。 showImg(https://segmentfault.com/img/remote/1460000006767498); Nginx作为所有HTTP请求的入口,是非常重要的一层。本文主要介绍如何利用 Nginx日志实时监控每个业务的请求异常。​ 这篇文章基于我之前的的一篇 《基于Lua+Kaf...

    meislzhua 评论0 收藏0
  • 如何自建一个k8s ingress 思路

    摘要:如何自建一个思路接入方案我们都知道访问集群的服务需要接入。据我所知,接入的方案有种云厂商提供比如官方的实现第三方实现方案自建,比如使用这里重点记录一下,如何自建一个的思路。控制中心是一个叫的程序,监控对应的,数据代理是有组成。 如何自建一个k8s ingress 思路 ingress 接入方案 我们都知道访问k8s 集群的服务需要ingress 接入。 据我所知,ingress 接入的...

    JiaXinYi 评论0 收藏0
  • 如何在局域网内部署服务器监控 ?

    摘要:用户实例以下是用户局域网内采用代理已征得用户同意,配置探针和探针监控自己服务器组件和应用的文章,参考局域网无外网的机器使用的办法,用户的主要操作是首先配置文件,集成配置代理,通过监控端口,的数据发送到,的数据发送到。 背景 随着互联网的发展,各种网络攻击手段也层出不穷,不管是大型企业还是中小企业,随时都有被攻击的危险,因此很多公司都会采取各种手段来维护自己服务器安全,其中比较常见的是采...

    darkbug 评论0 收藏0
  • 深度解析Tengine的调试与资源监控方法论

    摘要:是由淘宝网发起的服务器项目。回源监控是内容分发网络的简称,其分发的内容来自用户源站,负责回源的模块是最重要组成部分之一,使跨越单机的限制,完成网络数据的接收处理和转发。这部分主要介绍的一些调试技巧和回源资源监控的内容,以及相应的实例分享。 摘要: Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,提供更强大的流量负载均衡能力、全站HTTPS...

    everfight 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<