0x01 Create Host
安装完zabbix后从哪里入手?无非就是要添加监控目标,那本文就从添加监控一个主机入手,了解zabbix的各个基本功能
添加主机在“Configuration”选项卡上的“Hosts”,可以看到下图默认已经有一个监控目标了,接下来就从这里展开,描述item,trigger,graphs等使用
首先,要先了解item是监控目标主机上的各个小项目(比如内存、cpu的使用率),多个item可以分组归类成application。当item超出设定的阈值就要做出某种行动(告警通知),trigger(触发器)定义当item超出范围时,要采取什么行动。
1、新增一台被监控主机。
configuration—>Hosts—>Create host(右上角)
完成添加后,可以发现新增的host各个指标(application/items/triggers/graphs)都显示为0
2、Items
点击“items”进入新的界面中右上角可以创建新的item,item定义了单个主机中具体的监控对象。
补充:key可以接受一个或多个参数,zabbix有很多内置预设的key
上述页面可以创建新的Application(作为item的分组归类)
出现如下问题检查Hostname是否一致,当不是监控本机时IP地址,agent配置文件是否为默认的127.0.0.1
3、Graphs
针对刚刚添加的item设置图像属性,描述如何展示数据。可以将多个item显示在同一张图上
如果有一个场景,我们将CPU相关的几个item显示在一张图上,将Memory相关的显示在另一张图上,如何才能同时查看两张图片呢。
这时候Configuration—>Screens新建即可。先定义好几行几列的一个布局。
插入要显示的图片(Graph name),并调整相关的属性,如高度宽度、对齐等
0x02 触发器
当完成一个主机的某项监控之后,可以对这个监控功能进行扩展,定义一个范围,当超过这个范围的时候视为异常,给予警示。触发器能产生事件,每一个触发器仅能关联一个监控对象,但一个监控对象可以使用多个触发器(定义不同阈值,实现不同级别的报警)
触发器表达式形式如下:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
{主机:key.函数(参数)}<表达式>常数
zabbix仅支持触发器间的依赖关系。比如一个网络设备下接许多主机,如果这个网络设备故障,会导致所有主机都视为异常而报警,但真实情况可能仅仅是这个父节点的问题。
触发器产生事件(触发器可以产生事件,也可以产生发现事件),产生了事件通常要做出响应,一般是在满足特定条件下通过各种途径(媒介)进行发送消息或者执行远程命令的操作。
触发器使用示例(假设场景:对内存的使用率监控,当到达一定阈值的时候触发)
1、新增item
2、新增graph
3、新增触发器
按照上面的描述,先写一个触发器的表达式,其实就是将key获取到的数据,再用function处理一下,然后经过操作符的比较,看看是否能够达到。触发器仅仅是引起一个事件,没有进行任何动作。新建动作在configuration->action。
4、新增Action
前面说到,通知首先要满足条件,然后再进行操作。在Action的页面上可以看到Conditions(条件)和Operations(操作)
条件里面可以定义多个条件ABC……,然后通过逻辑运算,比如:条件A或(与)条件B,满足条件之后再执行操作。默认的是当不在维修状态并且触发器的事件为“PROBLEM”时作为可执行操作的条件。
这里对三个选项卡的相关属性进行定义
1、Action 只需要填写名称
2、Conditions 保持默认
3、Operations定义远程执行命令
除了所执行命令是否有权限外,在zabbix客户配置文件需要开启对远程命令的支持,编辑 zabbix_agentd.conf 修改 EnableRemoteCommands = 1
5、模拟触发条件
正常情况下所绘制的统计图如下:
只要内存使用率高于1.5G就满足触发条件了,这里用到一个简单易用的内存压力测试工具memtester。
[root@localhost ~]# memtester 400M #给内存增加400M,可以看到效果,Monitoring里面的Triggers和Events都有警告提示,图像上的实时显示也已经到达了触发阈值。在Events的状态里面还可以看到Action是否执行OK。
最后检验下命令是否执行成功,我们是输出执行命令的当前时间(请忽略那个warning错别字)
[root@localhost ~]# cat /tmp/zabbixtestmem
Thu Sep 15 00:45:09 CST 2016 : warming
Thu Sep 15 00:46:09 CST 2016 : warming
Thu Sep 15 00:47:09 CST 2016 : warming
Thu Sep 15 00:48:09 CST 2016 : warming
Thu Sep 15 00:49:09 CST 2016 : warming
[root@localhost ~]# date
Thu Sep 15 00:53:34 CST 2016
可以看到,上述的命令只执行了五次,每60s一次,五次过后不再执行操作。
既然命令都能够正常执行了,那还有什么触发操作是不能完成的。