架构师的成长之路初片~zabbix-自定义监控
四:自定义监控案例
沿用前面的练习,使用自定义key监控常用监控项目,实现以下目标:
- 监控Nginx状态
- 监控网络连接状态
步骤一:监控Nginx服务状态
1)准备环境,部署nginx软件
安装nginx软件,开启status模块
先把web1主机的之前的httpd服务停掉,以免一会儿在启动nginx服务时有影响。 [root@web1 ~]# systemctl stop httpd [root@web1 ~]# systemctl disable httpd
[root@web1 ~]# tar -xf nginx-1.12.2.tar.gz [root@web1 ~]# cd nginx-1.12.2 [root@web1 nginx-1.12.2]# yum -y install gcc pcre-devel openssl-devel [root@web1 nginx-1.12.2]# ./configure \ > --with-http_stub_status_module [root@web1 nginx-1.12.2]# make && make install [root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf #参考前面的课程内容 location /status { stub_status on; } [root@web1 ~]# /usr/local/nginx/sbin/nginx #启动服务 [root@web1 ~]# curl http://192.168.2.100/status Active connections: 1 server accepts handled requests 10 10 3 Reading: 0 Writing: 1 Waiting: 0
2)自定义监控key
编写自定义监控脚本(仅供参考,未检测完整状态)
#!/bin/bash case $1 in active) curl -s http://192.168.2.100/status |awk '/Active/{print $NF}' ;; accepts) curl -s http://192.168.2.100/status |awk 'NR==3{print $1}' ;; waiting) curl -s http://192.168.2.100/status |awk '/Waiting/{print $6}' ;; esac
测试:如果参数正确会输出正确的内容。 [root@web1 ~]# /usr/local/bin/nginx_status.sh waiting 0 [root@web1 ~]# /usr/local/bin/nginx_status.sh active 1 [root@web1 ~]# /usr/local/bin/nginx_status.sh [root@web1 ~]# /usr/local/bin/nginx_status.sh haha
解释: UserParameter=nginx.status,/usr/local/bin/nginx_status.sh 2.5远程连接2.100,说我要你的监控数据(nginx.status) 2.100触发 执行后面的命令或脚本 /usr/local/bin/nginx_status.sh。 UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1 2.5远程连接2.100,说我要你的监控数据(nginx.status[active]) 2.100触发 执行后面的命令或脚本。/usr/local/bin/nginx_status.sh active UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1 2.5远程连接2.100,说我要你的监控数据(nginx.status[waiting]) 2.100触发 执行后面的命令或脚本。/usr/local/bin/nginx_status.sh waiting UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1 2.5远程连接2.100,说我要你的监控数据(nginx.status[xxx]) 2.100触发 执行后面的命令或脚本。/usr/local/bin/nginx_status.sh xxx
创建自定义key
语法格式:
UserParameter=key,command
UserParameter=key[*], $1
key里的所有参数,都会传递给后面命令的位置变量
注意:被监控端修改配置文件,注意要允许自定义key并设置Include!
root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1 [root@web1 ~]# systemctl restart Zabbix_agentd #重启服务
测试 [root@web1 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'nginx.status[waiting]' 0 [root@web1 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k 'nginx.status[active]' 1
3)登陆Zabbix监控Web,创建监控项目item,点击Configuration(配置)-->Hosts(主机),点击主机后面的items(监控项),点击Create item(创建监控项。
查看监控数据
步骤二:监控网络连接状态
1)了解TCP协议
熟悉TCP三次握手,参考图-38。
四次断开
2)查看网络连接状态
模拟多人并发连接(如果没有ab命令,则安装httpd-tools软件包
[root@web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/ 查看网络连接状态,仔细观察、分析第二列的数据
3)创建自定义key
编写自定义监控脚本(仅供参考,未检测完整状态)
[root@web1 ~]# vim /usr/local/bin/net_status.sh #!/bin/bash case $1 in estab) ss -antp | awk '/^ESTAB/{x++}END{print x}' ;; close_wait) ss -antp | awk 'BEGIN{x=0}/^CLOSE-WAIT/{x++}END{print x}' ;; time_wait) ss -antp | awk '/^TIME-WAIT/{x++}END{print x}' ;; esac
测试: (因主机连接在不断的变化,所以状态的连接数会发生变化。 每台主机的连接数也各不相同。) [root@web1 ~]# /usr/local/bin/net_status.sh estab 56 [root@web1 ~]# /usr/local/bin/net_status.sh close_wait 0 [root@web1 ~]# /usr/local/bin/net_status.sh time_wait 44
创建自定义key
[root@web1 ~]# cat /usr/local/etc/zabbix_agentd.conf.d/net.status UserParameter=net.status[*],/usr/local/bin/net_status.sh $1 [root@web1 ~]# systemctl restart zabbix_agentd
测试
[root@web1 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k net.status[estab] 61 [root@web1 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k net.status[time_wait] 45 [root@web1 zabbix_agentd.conf.d]# zabbix_get -s 127.0.0.1 -k net.status[close_wait] 0
3)登陆Zabbix监控Web,创建监控项目item,点击Configuration(配置)-->Hosts(主机),点击主机后面的items(监控项),点击Create item(创建监控项。