如何监控 Nginx?

作者: OneAPM | 来源:发表于2016-01-20 11:22 被阅读180次

什么是 Nginx?

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

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

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

监控 Nginx 的参数

Nginx 提供哪些监控参数

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

<thead>
<tr>
<th>参数名称</th>
<th>参数描述</th>
</tr>
</thead>

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

</tbody>
</table>

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

nginx数据流

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

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

Nginx提供哪些监控参数

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

<table>

<thead>
<tr>
<th>参数名称</th>
<th>参数描述</th>
<th>与Nginx差异</th>
</tr>
</thead>

<tbody>
<tr>
<td>Active </td>
<td>当前活跃的用户连接(不包含 Idel 状态) </td>
<td>等同 Active connections </td>
</tr>
<tr>
<td>Accepted </td>
<td>接收到的用户连接总数 </td>
<td>等同 accepts </td>
</tr>
<tr>
<td>Dropped </td>
<td>Nginx 丢弃的用户连接总数 </td>
<td>accepts - handled </td>
</tr>
<tr>
<td>Idle </td>
<td>当前没有请求的活跃用户连接数 </td>
<td>等同 Waiting </td>
</tr>
<tr>
<td>Total </td>
<td>用户请求总数 </td>
<td>等同 requests </td>
</tr>
<tr>
<td>Current(Requests) </td>
<td>当前有请求的活跃用户连接数(等同 Active)</td>
<td>Reading + Writing </td>
</tr>
<tr>
<td>Current(Connections) </td>
<td>当前在线用户数(Active + Idle) </td>
<td>Reading + Writing + Waiting </td>
</tr>

</tbody>
</table>

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

nginx-plus数据流

具体运作和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-plus-example

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

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

相关文章

  • 用Nginx+Telegraf+Influxb+Grafana构

    日常生产环境搭建了Nginx集群后,就需要继续深入研究的就是日常Nginx监控。 Nginx如何监控?相信百度就可...

  • Zabbix 监控nginx

    Nginx监控项使用nginx的statut状态来监控nginx情况,主要包括如下监控项:Active conne...

  • Zabbix 监控Nginx_Status模块

    Zabbix 监控Nginx服务需要通过Nginx Status模块进行监控。 一、 打开Nginx配置文件...

  • 如何监控 Nginx?

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

  • elk监控nginx日志

    一:logstash配置监控Nginx的难点在于如何通过Logstash获取想要的值1、安装nginx并打开acc...

  • zabbix应用服务监控

    一.zabbix监控NGINX 环境规划与地址分配 监控nginx七种状态1.在nginx的server标签中添加...

  • Zabbix监控nginx性能(记录)

    zabbix配置监控nginx,nginx安装的时候必须编译安装zabbix模块 需要使用zabbix监控ngin...

  • nginx 健康检测

    前提注意事项: 1.此处的健康检测不是nginx服务的监控,如需监控nginx可使用脚本监控或者是zabbix服务...

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

    Nginx作为所有HTTP请求的入口,是非常重要的一层。本文主要介绍如何利用 Nginx日志实时监控每个业务的请求...

  • Linux下Zabbix监控之Nginx监控添加

    nginx_status配置 conf配置开启nginx status监控 重启nginx 测试status 数据...

网友评论

    本文标题:如何监控 Nginx?

    本文链接:https://www.haomeiwen.com/subject/iihlkttx.html