zabbix 监控nginx状态
目的:通过自己写的脚本和自定义的监控项,,实现主动监控nginx 的状态(各种连接数)
一、 主要思路
依靠zabbix_agent.conf 的 关键项配置
UserParameter=<key>,<shell command>
其中key 就是制作模板时用到的关键项, 后一个参数是shell 命令
当 UserParameter 如下配置时:
UserParameter=nginx.status ,echo 66
在proxy 或server 上取值
root@z2:~# zabbix_get -s 192.168.1.104 -p 10050 -k nginx.status
66
所以把shell 命令换成脚本就可以了,通过在zabbix_agent 上面执行一个脚本抓取状态页的值即可。 为了监控更多的值 ,虽然UserParameter写多个 ,但是太费事了,多个相同类型的key 时,可以考虑用变量代替
如下:
UserParameter=nginx.status[*],echo "$1" "$2" "$3"
root@z2:~# zabbix_get -s 192.168.1.104 -p 10050 -k nginx.status[1,2,3]
1 2 3
对于不同监控业务,可以用include 实现
二、具体步骤
1. nginx 开启状态页
location /nginx_status {
stub_status;
}
root@Z4:~# curl 127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
10 10 123
Reading: 0 Writing: 1 Waiting: 0
2. 创建监控脚本
#!/bin/bash
nginx_status_fun(){ #函数内容
NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){ #获取nginx_reading状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main(){ #主函数内容
case $1 in #分支结构,用于判断用户的输入而进行响应的操作
nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
nginx_status_fun $2 $3;
;;
*) #其他的输入打印帮助信息
echo $"Usage: $0 {nginx_status key}"
esac #分支结束符
}
main $1 $2 $3
先在本机验证可以取到值
root@Z4:/etc/zabbix/zabbix_agentd.d# chmod +x nginx_status.sh
root@Z4:/etc/zabbix/zabbix_agentd.d# bash nginx_status.sh nginx_status 80 active
1
3. 修改agent.conf
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh "$1" "$2" "$3"
验证:
root@z2:~# zabbix_get -s 192.168.1.104 -p 10050 -k nginx.status[nginx_status,80,active]
1
4.创建模板
在配置—>模板---->创建模板
5. 添加监控项
6. 关联到主机
7.在最新数据中监测是否发现监控的数据
****
8.创建图形
9.验证:
在图形的选项中,可以看到添加的值