首页 > 代码库 > Zabbix 监控 Nginx(四)

Zabbix 监控 Nginx(四)

简介:

如何使用 Zabbix 监控 Nginx 状态 ?

1、获取 Nginx 状态( HTTP Stub Status )

[root@localhost ~]# /apps/product/nginx/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/apps/product/nginx --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-file-aio --with-pcre

#查看编译时有没有加入状态监控模块,如果没有需要单独加载

2、配置 nginx.conf

[root@localhost ~]# vim /apps/product/nginx/conf/nginx.conf

    location ~ /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow 10.10.100.147;
    deny all;
    }

# 在虚拟主机 server {} 段中加入上面配置,也可以单独定义一个专门用于监控的虚拟主机。
# deny all , 拒绝除 allow 中的主机之外所有主机访问此 URL ,实现过程中如果遇到 403 ,有可能是你把自己测试的机器拒绝了!

3、Nginx 监控项解释

[root@localhost ~]# curl http://127.0.0.1/nginx_status
Active connections: 1 
server accepts handled requests
 77671 77671 77666 
Reading: 0 Writing: 1 Waiting: 0 

# Active connections:  对后端发起的活动连接数
# Server accepts handled requests: Nginx 总共处理了 77671 个连接,成功创建了 77671 次握手(没有失败次数),总共处理了 77666 个请求
# Reading: Nginx 读取到客户端的 Header 信息数
# Writing: Nginx 返回给客户端的 Header 信息数
# Waiting: 开启 keep-alive 的情况下,这个值等于 active - ( reading + writing ), 意思是 Nginx已经处理完成,正在等待下一次请求指令的驻留连接
# 在访问效率很高,请求很快被处理完毕的情况下,Waiting 数比较多是正常的。如果 reading + writing 数较多,则说明并发访问量很大,正在处理过程中

4、编写脚本获取上面的 key 值

[root@localhost ~]# vim /script/nginx_status.sh

#!/bin/bash

case $1 in
    active)
        curl -s http://127.0.0.1/nginx_status | awk ‘/Active/ {print $3}‘ ;;
    accepts)
        curl -s http://127.0.0.1/nginx_status | awk ‘NR==3 {print $1}‘ ;;
    handled)
        curl -s http://127.0.0.1/nginx_status | awk ‘NR==3 {print $2}‘ ;;
    requests)
        curl -s http://127.0.0.1/nginx_status | awk ‘NR==3 {print $3}‘ ;;
    reading)
        curl -s http://127.0.0.1/nginx_status | awk ‘/Reading/ {print $2}‘ ;;
    writing)
        curl -s http://127.0.0.1/nginx_status | awk ‘/Writing/ {print $4}‘ ;;
    waiting)
        curl -s http://127.0.0.1/nginx_status | awk ‘/Waiting/ {print $6}‘ ;;
    *)
        echo "Usage: $0 { active | accepts | handled | requests | reading | writing | waiting }" ;;
esac

# 脚本使用 curl 结合 awk 来获取 key 的值。
# -s 静默模式,如果不加 -s 参数,则获取到的结果是不正确的。

[root@localhost ~]# chmod a+x /script/nginx_status.sh 

5、添加自定义 key 配置文件

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf

## Nginx_status
UserParameter=nginx.active,/script/nginx_status.sh active
UserParameter=nginx.accepts,/script/nginx_status.sh accepts
UserParameter=nginx.handled,/script/nginx_status.sh handled
UserParameter=nginx.requests,/script/nginx_status.sh requests
UserParameter=nginx.reading,/script/nginx_status.sh reading
UserParameter=nginx.writing,/script/nginx_status.sh writing
UserParameter=nginx.waiting,/script/nginx_status.sh waiting

# 也可以直接加到 /etc/zabbix/zabbix_agentd.conf末尾

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf

UnsafeUserParameters=1 # 允许自定义 Key

# 添加上面配置

5、重启 Zabbix_agentd

[root@localhost ~]# /etc/init.d/zabbix-agent restart

## 注意,上面全部操作都是在被监控端

6、Zabbix 服务端测试能否拿到 Key

[root@localhost ~]# /usr/local/zabbix/bin/zabbix_get -s 10.10.100.24 -k nginx.active   
1
[root@localhost ~]# /usr/local/zabbix/bin/zabbix_get -s 10.10.100.24 -k nginx.requests        
78182

# 可以获取到 key 的值,说明配置没有问题了
# 被监控端记得要开启 10050 端口

 

Zabbix 监控 Nginx(四)