zabbix自动发现、主被动监控、脚本自定义监控、拓扑图和聚合图形
注:续上一篇博客《zabbix监控部署》
一、 自动发现
— 当Zabbix需要监控的设备越来越多,手动添加监控设备越来越有挑战,此时,可以考虑使用自动发现功能
— 需要批量一次性添加一组监控主机,也可以使用自动发现功能
- 自动发现可以实现:
— 自动发现、添加主机,自动添加主机到组
— 自动连接模板到主机,自动创建项目与图形等 - 自动发现流程:
— 创建自动发现规则
— 创建Action动作,说明发现主机后自动执行什么动作
— 通过动作,执行添加主机,连接模板到主机等操作
1、配置自动发现规则:
配置—>自动发现—>创建发现规则—>规则名称,ip范围(192.168.2.100-254),更新间隔(设为1m)—>新的:检查类型—http,80端口—>添加
2、配置自动发现后触发的动作:
配置—>事件源:自动发现,创建动作—>动作:动作名称,ip范围(192.168.2.100-254),添加—>操作:新的,操作类型—添加主机到群组(webgrp),添加;新的,操作类型—与模板关联(Template App HTTP Service,Template OS Linux),添加,点击最下面的添加,完成动作创建
测试自动发现
开启两台虚拟机192.168.2.101和192.168.2.102,均开启httpd服务,安装并开启zabbix_agentd服务
一段时间后,zabbix监测到以上两台虚拟机的httpd和os系统服务,如下图所示:

二、主被动监控
-
主动和被动都是对被监控端主机而言的
-
zabbix默认采用的是被动监控
— 被动监控:Server向Agent发起连接,发送监控项(key),Agent接受请求,响应监控数据
— 主动监控:Agent向Server发起连接,Agent请求需要监测的监控项目列表,Server响应Agent发送一个items列表,Agent确认收到监控列表,tcp连接完成,绘画关闭,Agent开始周期性地收集数据 -
主动被动监控区别:
— Server不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可 -
当监控主机达到一定量级后,zabbix服务器会越来越慢,此时可以ikaolv使用主动监控,释放服务器压力
-
另外,zabbix也支持分布式监控,也是可以考虑的方案
1、配置主动监控(web102主机为例演示)
[root@web102 ~]# netstat -ntulp |grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10947/zabbix_agentd
[root@web102 ~]#
[root@web102 ~]# killall -p zabbix_agentd //关闭zabbix_agent服务
[root@web102 ~]# killall -p zabbix_agentd
zabbix_agentd: no process found
[root@web102 ~]# netstat -ntulp |grep 10050
[root@web102 ~]# vim /usr/local/etc/zabbix_agentd.conf //修改配置文件
93 # Server=127.0.0.1, 192.168.2.55 //主动模式下,注释该行
118 StartAgents=0 //只启动agent进程,没有端口号
134 ServerActive=192.168.2.55 //允许监控本机的监控服务器ip,默认端口10051
145 Hostname=web102 //向Server发送连接时标示本机身份的主机名
183 RefreshActiveChecks=120 //主动连接Server的时间间隔(s)
280 # UnsafeUserParameters=1 //不启用自定义监控
[root@web102 ~]# zabbix_agentd //启动进程
[root@web102 ~]# netstat -ntulp |grep 10050 //主动模式下没有端口号
[root@web102 ~]# ps -C zabbix_agentd //主动模式下,仅有zabbix_agentd进程
PID TTY TIME CMD
9070 ? 00:00:00 zabbix_agentd
9071 ? 00:00:00 zabbix_agentd
9072 ? 00:00:00 zabbix_agentd
2、克隆模板,修改监控项模式
配置—>模板—>过滤器:linux,应用,选择Template OS Linux—>全克隆—>模板名称:A_Template OS Linux,添加—>选择克隆出来的A_Template OS Linux模板下的监控项—>选中所有监控项,批量更新—>类型:Zabbix客户端(主动式),更新—>禁用类型中不支持主动式的监控项
3、添加监控主机
配置—>主机—>创建主机—>主机名称:web102,可见的名称:web102,群组:Linux servers,ip地址:0.0.0.0,端口:0—>模板,链接指示器:A_Template OS Linux,依次点击上下的添加按钮
4、查看监测数据
方式1:监测中—>最新数据:过滤web102主机
方式2:监测中—>图形:群组,主机,图形
三、拓扑图与聚合图形
1、拓扑图:绘制拓扑图可以快速了解服务器架构
监测中—>拓扑图,创建拓扑图—>名称:web,添加—>选择web—>编辑拓扑图—>图标:添加—>双击图标,修改图标样式:标签,图标—>ctrl+要连接的两台主机—>链接:添加
拓扑图效果如下:

2、聚合图形:在一个页面显示多个数据图标,方便了解多组数据
监测中—>聚合图形—>名称:juhetu1,设置列数和行数,添加—>聚合图形后面的构造函数—>更改—>图形:选择,监控主机,监控项—>设置图形宽度和高度,对齐位置—>添加
添加完4张监控图的效果如下:

四、利用脚本自定义监控命令
监控案例一:利用监控脚本自定义监控nginx状态
1、准备虚拟机(192.168.2.200)环境
[root@web200 ~]# ls
anaconda-ks.cfg
nginx-1.12.2.tar.gz
mount_zabbix.sh
initial-setup-ks.cfg
zabbix-3.4.4.tar.gz
[root@web200 ~]# ./mount_zabbix.sh //利用脚本安装zabbix
[root@web200 ~]# tar -xf nginx-1.12.2.tar.gz
[root@web200 ~]# cd nginx-1.12.2/
[root@web200 nginx-1.12.2]# yum -y install zlib-devel //安装依赖包
[root@web200 nginx-1.12.2]# ./configure --with-http_stub_status_module //配置nginx,加载状态模块
[root@web200 nginx-1.12.2]# make && make install
[root@web200 nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
...
35 server {
36 location /status {
37 stub_status on; //启用状态模块
38 }
39 listen 80;
40 server_name localhost;
...
[root@web200 nginx-1.12.2]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@web200 nginx-1.12.2]# /usr/local/nginx/sbin/nginx
[root@web200 nginx-1.12.2]# netstat -ntulp |grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14937/nginx: master
[root@web200 nginx-1.12.2]# curl http://192.168.2.200/status //查看nginx状态
Active connections: 1 //实时连接数量
server accepts handled requests
1 1 1 //三个数字分别表示接受的客户端连接数量、处理的客户端连接数量、处理的客户端请求数量
Reading: 0 Writing: 1 Waiting: 0 //依次为读处理数量、写处理数量、等待处理数量
2、编写监控脚本
[root@web200 nginx-1.12.2]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
active)
curl -s http://127.0.0.1/status |awk '/Active/{print $NF}';; //NF为awk内置变量,记录当前处理行的字段个数(列数)
waiting)
curl -s http://127.0.0.1/status |awk '/Waiting/{print $NF}';;
accepts)
curl -s http://127.0.0.1/status |awk 'NR==3{print $2}';; //NR为awk内置变量,记录当前已读入行的数量(行数)
esac
[root@web200 nginx-1.12.2]# chmod +x /usr/local/bin/nginx_status.sh
[root@web200 nginx-1.12.2]# /usr/local/bin/nginx_status.sh active //测试脚本执行情况
1
[root@web200 nginx-1.12.2]# /usr/local/bin/nginx_status.sh waiting
0
[root@web200 nginx-1.12.2]# /usr/local/bin/nginx_status.sh accepts
14
3、利用监控脚本自定义监控命令
[root@web200 nginx-1.12.2]# vim /usr/local/etc/zabbix_agentd.conf
93 Server=127.0.0.1, 192.168.2.55
134 ServerActive=192.168.2.55:10051
145 Hostname=web33
265 Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
280 UnsafeUserParameters=1
[root@web200 nginx-1.12.2]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx_status.conf //创建自定义监控命令
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1 //监控命令nginx.status[*]匹配脚本传递的参数
[root@web200 nginx-1.12.2]# zabbix_agentd //启动zabbix_agent服务
[root@web200 nginx-1.12.2]# netstat -ntulp |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 16827/zabbix_agentd
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx.status[active] //本机测试自定义监控命令
1
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx.status[waiting]
0
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx.status[accepts]
16
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k nginx.status[accepts] //监控服务器测试200主机的自定义监控命令
18
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k nginx.status[active]
1
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k nginx.status[waiting]
0
4、登陆zabbix监控页面配置自定义监控
配置—>模板—>模板名称和可见的名称:B_nginx,群组:webgrp—>添加—>选择B_nginx模板下的应用集—>创建应用集—>名称:nginx,添加—>选择应用集nginx后面的监控项—>创建监控项(键值绑定自定义监控命令)—>名称:active,键值:nginx.status[active],应用集:nginx,选择底部添加,继续创建另外两个监控项nginx.status[waiting]和nginx.status[accepts]
5、调用自定义监控模板监控web200主机
配置—>主机—>创建主机,主机名称和可见的名称:web200,群组:webgrp,ip地址:192.168.2.200,端口:10050—>模板,链接指示器:B_nginx,依次点击上下的添加按钮
6、查看web200主机监控情况
监测中—>最新数据—>过滤选择web200主机,应用—>获取最新数据
监控案例二:利用脚本自定义监控web200主机TCP网络连接状态


1、编写监控脚本
[root@web200 nginx-1.12.2]# vim /usr/local/bin/net_status.sh
#!/bin/bash
case $i in
estab)
ss -antp | awk '/^ESTAB/{x++} END{print x}';;
close_wait)
ss -antp | awk '/^CLOSE-WAIT/{x++} END{print x}';;
time_wait)
ss -antp | awk '/^TIME-WAIT/{x++} END{print x}';;
esac
[root@web200 nginx-1.12.2]# chmod +x /usr/local/bin/net_status.sh
[root@web200 nginx-1.12.2]# /usr/local/bin/net_status.sh estab //测试监控脚本运行情况
1
[root@web200 nginx-1.12.2]# /usr/local/bin/net_status.sh close_wait
[root@web200 nginx-1.12.2]# /usr/local/bin/net_status.sh time_wait
12
2、自定义监控命令,重启服务
[root@web200 nginx-1.12.2]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx_status.conf //在案例一自定义监控配置文件基础上添加监控命令
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
[root@web200 nginx-1.12.2]# killall -9 zabbix_agentd
[root@web200 nginx-1.12.2]# killall -9 zabbix_agentd
zabbix_agentd: no process found
[root@web200 nginx-1.12.2]# zabbix_agentd
[root@web200 nginx-1.12.2]# netstat -ntulp | grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 24029/zabbix_agentd
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k net.status[close_wait] //zabbix_agent测试自定义监控命令
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k net.status[time_wait]
13
[root@web200 nginx-1.12.2]# zabbix_get -s 127.0.0.1 -p 10050 -k net.status[estab]
3
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k net.status[estab] //监控服务器测试脚本自定义监控命令
2
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k net.status[close_wait] //无数据输出,监控页面该监控项会显示灰色
[root@zabbix ~]# zabbix_get -s 192.168.2.200 -p 10050 -k net.status[time_wait]
14
3、在已有模板基础上创建应用集和监控项
配置—>模板—>B_nginx,应用集—>创建应用集—>名称:net—>监控项—>创建监控项—>名称:net_estab,键值(绑定自定义监控命令):net.status[estab],应用集:net,点击底部添加,继续创建另外两个监控项net_close_wait和net_time_wait
五、常见监控需求
1、mysql
- 并发连接数
- 慢查询数量
- 增、删、改、查数量等
2、NoSQL数据库(数据库状态)
3、php-fpm:并发、队列、进程数量等
4、tomcat服务器状态
5、硬件设备(交换机、路由等,一般通过snmp协议监控)
更多推荐


所有评论(0)