web 服务器 nginx 以其高性能与抗并发能力越来越多的被用户使用。 作为一款服务器产品,其运行状态是我们密切关注的,因此,对 nginx 的实时监控就成为必须要关注的了。 nginx 提供了 ngx_http_stub_status_module 模块,这个模块提供了基本的监控功能。 作为官方企业版的 nginx plus 通过 ngx_http_status_module 提供了更加完善的监控功能: http://demo.nginx.com/status.html。
一般来说,我们需要对三个主要的指标进行监控: 1. 基本活跃指标 2. 错误指标 3. 性能指标
下图显示了 nginx 收集的基本指标。
名称 | 描述 | 是否累加历史数据 |
---|---|---|
Accepts(接受) | NGINX 接受的客户端连接数(包括 Handled + Dropped + Waiting) | 是 |
Handled(已处理) | 成功处理的客户端连接数(包含 Waiting 状态连接) | 是 |
Active(活跃) | 当前活跃的客户端连接数 | 否 |
Dropped(已丢弃) | 已丢弃连接数(出错) | 是 |
Requests(请求数) | 客户端请求数 | 是 |
Waiting(等待) | 正在等待的连接数 | 否 |
Reading(读) | 正在执行读操作的连接数 | 否 |
Writing(写) | 正在执行写操作的连接数 | 否 |
按照固定时间间隔采样请求数据,计算出单位时间的请求量可以看到你的 web 服务器的请求情况。 通过持续的 QPS 监控,可以立刻发现是否被恶意攻击或对服务的可用性进行评估。 虽然当问题发生时,通过 QPS 不能定位到确切问题的位置,但是他却可以在第一时间提醒你环境可能出问题了。
通过监控固定时间间隔内的错误代码(4XX代码表示客户端错误,5XX代码表示服务器端错误),可以了解到客户端收到的结果是否是正确的。 错误率突然的飙升很可能是你的网站漏洞发出的信号。
如果你希望通过 access log 分析错误率,那么你需要配置 nginx 的日志模块,让 nginx 将响应码写入访问日志。
请求处理时间也可以被记录在 access log 中,通过分析 access log,统计请求的平均响应时间,通过持续观察,可以发现上游服务器的问题。
介绍了这么多的监控指标,事实上,上面介绍的仅仅是基本的监控指标,针对实际的情况,还有很多指标十分具有监控的必要。 那么,怎么去收集这些指标进行监控呢?
通过在编译时加入 nginx 的 ngx_http_stub_status_module 我们可以实时监控以下基本的指标: 1. Active connections — 活动连接数 2. accepts — 接收请求数 3. handled — 成功处理请求数 4. requests — 总请求数 5. reding — 正在进行读操作的请求数 6. writing — 正在进行写操作的请求数 7. waiting — 正在等待的请求数
具体的使用方法是在执行 ./configure 时,指定 —with-http_stub_status_module,然后通过配置:
server {
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
然后通过访问 http://localhost/nginx_status 就可以看到简单的统计页面。
商业版的 nginx plus 通过他的 ngx_http_status_module 提供了比 nginx 更多的监控指标,可以参看 http://demo.nginx.com/status.html。
nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标。 python 编写的 linux 工具 ngxtop 就实现了对 access log 的分析功能: