Nginx 监控

2016-04-30 linux web software

Nginx 服务器在生产环境中运行时,可以通过类似 Nagios、Zabbix、Munin 之类的网络监控软件。然而,很多时候处理问题时,只需要快速简单的查看当前 Nginx 服务器的状态请求。

可以使用一个 Python 编写的工具 ngxtop,可以直接从 www.github.com 上下载相应的源码。

接下来介绍一下该工具的使用方法。

ngxtop

ngxtop 会实时解析 nginx 的访问日志 (access log),并且会将处理结果输出到终端,其功能类似于系统命令 top,通过 ngxtop 再也不需要 tail 日志看屏幕刷新了。

安装

ngxtop 是 Python 源码编写的程序,可以直接通过源码安装,也可以通过 pip 安装。

$ wget https://github.com/lebinh/ngxtop/archive/master.zip -O ngxtop-master.zip
$ unzip ngxtop-master.zip
$ cd ngxtop-master
# python setup.py install
... ...
Finished processing dependencies for ngxtop==0.0.1

或者通过 pip 安装。

# pip install ngxtop

其中详细的使用方法可以参考 https://github.com/lebinh/ngxtop 中的帮助文档。

使用

ngxtop 默认会从其配置文件 /etc/nginx/nginx.conf 中查找 Nginx 日志的地址,如果使用的是该文件,那么可以直接运行 ngxtop 命令,这将会列出 10 个 Nginx 服务,按请求数量排序。

首先会解析配置文件的内容,解析后的结果可以通过 info 子命令查看。

----- 查看解析配置文件的基本信息
$ ngxtop info

----- 显示前 20 个最频繁的请求,按照顺序排列
$ ngxtop -n 20

----- 显示自定义的请求变量
$ ngxtop print request http_user_agent remote_addr

----- 显示请求最多的客户端IP地址
$ ngxtop top remote_addr

----- 显示状态码是404的请求
$ ngxtop -i 'status == 404' print request status

----- 404前十的请求
$ ngxtop top request_path --filter 'status == 404'

----- 总流量前十的请求
$ ngxtop --order-by 'avg(bytes_sent) * count'

----- 输出400以上状态吗的请求以及请求来源
$ ngxtop -i 'status >= 400' print request status http_referer

----- 返回为200的请求,且请求地址为foo,打印消息体的平均长度
$ ngxtop avg bytes_sent --filter 'status == 200 and request_path.startswith("foo")'

http_stub_status_module

另外,可以通过 Nginx 模块监控其状态,不过需要在编译时添加 --with-http_stub_status_module 选项,默认该选项不会包含在内。

然后在配置文件中添加如下内容。

http {
    ... ...
    server {
        ... ...
        location /status {
            stub_status on;
            access_log off;
            allow 127.0.0.1;
            deny all;
        }
    }
}

修改完之后重新加载配置即可,然后可以通过 http://localhost/status 查看,此时会显示如下信息。

Active connections: 557             # 对后端发起的活动连接数
server accepts handled requests     # 总共处理的链接数;成功握手次数;总共处理的请求
35 35 65
Reading: 3 Writing: 16 Waiting: 8   # 读取到客户端Header信息数;返回给客户端的Header信息数;等待下次请求的驻留连接

注意,对于最后一行 Waiting 在开启 keep-alive 时,该值等于 active-(reading+writing),意思就是说已经处理完正在等候下一次请求指令的驻留连接。