注:续上一篇博客《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协议监控)

更多推荐