首先要检查Nginx是否安装了 http_stub_status_module
模块,通过下面的命令可以看到编译参数。yum安装的默认会带有这个模块。
[root@kafka60 ~]# /data/nginx/sbin/nginx -V nginx version: nginx/1.10.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/data/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
zabbix客户端
1、启用nginx status配置
Nginx 的server配置增加如下的片段
...... server { listen 80; server_name www.blog.com; location /nginx_status { stub_status on; access_log off; allow 10.0.0.60; deny all; } .....
[root@kafka60 share]# /data/nginx/sbin/nginx -t
nginx: the configuration file /data/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx-1.10.2/conf/nginx.conf test is successful
[root@kafka60 share]# /data/nginx/sbin/nginx -s reload
## 在虚拟主机 server {} 中加入上面配置,也可以单独定义一个专门用于监控的虚拟主机。
## deny all , 拒绝除 allow 中的主机之外所有主机访问此 URL ,实现过程中如果遇到 403 ,有可能是你把自己测试的机器拒绝了!
2、查看nginx状态信息
[root@kafka60 share]# curl 10.0.0.60/nginx_status Active connections: 1 server accepts handled requests 1 1 1 Reading: 0 Writing: 1 Waiting: 0
## Active connections: 对后端发起的活动连接数
## Server accepts handled requests: Nginx 总共处理了 1 个连接,成功创建了 1 次握手(没有失败次数),总共处理了 1 个请求
## Reading: Nginx 读取到客户端的 Header 信息数
## Writing: Nginx 返回给客户端的 Header 信息数
## Waiting: 开启 keep-alive 的情况下,这个值等于 active - ( reading + writing ), 意思是 Nginx 已经处理完成,正在等待下一次请求指令的驻留连接
## 在访问效率很高,请求很快被处理完毕的情况下,Waiting 数比较多是正常的。如果 reading + writing 数较多,则说明并发访问量很大,正在处理过程中
3、开启自定义KEY功能
vim /etc/zabbix/zabbix_agentd.conf ...... UnsafeUserParameters=1 UserParameter=nginx.accepts,/usr/local/zabbix/scripts/nginx_status.sh accepts UserParameter=nginx.handled,/usr/local/zabbix/scripts/nginx_status.sh handled UserParameter=nginx.requests,/usr/local/zabbix/scripts/nginx_status.sh requests UserParameter=nginx.connections.active,/usr/local/zabbix/scripts/nginx_status.sh active UserParameter=nginx.connections.reading,/usr/local/zabbix/scripts/nginx_status.sh reading UserParameter=nginx.connections.writing,/usr/local/zabbix/scripts/nginx_status.sh writing UserParameter=nginx.connections.waiting,/usr/local/zabbix/scripts/nginx_status.sh waiting ....... [root@iZms9dbzZ ~]# /etc/init.d/zabbix-agent restart ##重启zabbix客户端 Shutting down Zabbix agent: [ OK ] Starting Zabbix agent: [ OK ]
4、创建检测脚本
[root@kafka60 share]# cat /data/shell/nginx_status.sh #!/bin/bash #Author:dadong #Blog:http://www.cnblogs.com/dadonggg/ #Time:2018-03-01 14:27:40 #Name:nginx_status.sh #Version:V1.0 #Description:This is a test script. HOST=`/sbin/ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` PORT="80" # Functions to return nginx stats function active { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { /usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $3}' } # Run the requested function $1
##给脚本赋予执行权限
[root@kafka60 share]# chmod +x /data/shell/nginx_status.sh [root@kafka60 share]# /data/shell/nginx_status.sh writing 1