zabbix-触发器
1、基础知识
1.1、简介
zabbix中的item监控项仅负责收集数据,对收集到的数据一般需要进行简单的分析,然后根据特定的指标进行评判,如果对应的数据超出合理范围时则进行相关的处理,比如发出警告或者执行某些特定的动作。
所以就需要有一种资源能够对获取监控数据的数据与特定指标进行评判后的并设定后续执行动作,这个资源就叫触发器(triger)。
每一个triger仅能管理一个item,而同一个item可以同时使用多个triger这样就可以实现不同级别的后续动作处理,一般就是分级告警机制。
每个触发器由一个表达式构成,它定义了监控项所采集的数据的一个阈值,一旦某次采集的数据超出了触发器定义的阈值,触发器状态将会转为"PROBLEM";而当采取的数据再次回归至合理的范围内时,其状态将重新返回到"OK"。
官网地址:https://www.zabbix.com/documentation/current/zh/manual/config/triggers
1.2、触发效果
注意:触发器是基于主机数据得来的,所以我们对于触发器的操作,需要进入到主机界面才可以管理。
1.2.1、效果图
1.2.2、点击一个具体的Problems就可以看到Events详情
1.2.3、Zabbix支持下列触发器的严重程度
触发器严重性定义了触发器的重要程度
1.2.4、触发器严重性用途
触发器的直观表示,不同的颜色代表不同的严重程度。 全局报警音频。不同的音频代表不同的严重程度。 用户媒介,不同的用户媒介(通知渠道)代表不同的严重程度。例如,SMS - 高严重性,email - 其他。 通过触发器严重程度的条件来限制动作。
2、语法解析
2.1、基础语法
触发器表达式的格式为 function(/host/key,parameter) <operator> <constant>
语法解析: host:主机名称 key:主机上相应监控项的key function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行 operator:操作符号,+、-、*、/、<、>、#(不等于)、=、&(逻辑与)、|(逻辑或) constant:评判数据的阈值
2.2、功能函数
名称 作用 avg # 求平均值 count # 数值统计 change # 差值统计 date # 当前日期 dayofweek # 周第n天 delta # 最大最小差值 diff # 文件异常 regexp # 内容正则匹配 iregexp # 不敏感正则 last # 最新采样数据 max # 最大值 min # 最小值 nodata # 无数据 now # 当前时间 prev # 倒数第二采样 str # 查找字符串 strlen # 字符长度 sum # 求和 logseverity # 日志等级
2.3、语句示例
2.3.1、示例解析
Zabbix server主机上,最近1分钟的CPU负载大于5就触发"Problem"告警 last(/Zabbix server/system.cpu.load[all,avg1])>5 语句解析: Zabbix server 主机名 cpu.load[all,avg1] 是监控项item last()是获取最新数据 > 是操作符号, 5是用户指定用于评判的阈值
2.3.2、其它示例
# www.zabbix.com主机上,最近1分钟的CPU负载大于5或者10分钟之内最小值大于2就触发"Problem"告警 last(/www.zabbix.com/system.cpu.load[all,avg1])>5 or min(/www.zabbix.com/system.cpu.load[all,avg1],10m)>2 # www.zabbix.com主机上,指定的/path/to/file 文件发生变化就触发"Problem"告警 (last(/www.zabbix.com/vfs.file.cksum[/etc/passwd],#1) <> last(/www.zabbix.com/vfs.file.cksum[/etc/passwd],#2))=1 # www.zabbix.com主机上的ens33网卡之间的数据流量在5分钟内的值大于100k的时候,触发"Problem"告警 min(/www.zabbix.com/net.if.in[eth0,bytes],5m)>100K # zabbix.zabbix.com主机上,如果30分钟内,超过5次无法正常的ping,那么触发"Problem"告警 count(/zabbix.zabbix.com/icmpping,30m,"0")>5
表达式 描述 sum(/host/key,10m) 最近 10 分钟的数值总和. sum(/host/key,#10) 最后十个值的总和.
2.3.3、宏-进阶示例
这里的 {TRIGGER.VALUE} 指的是 zabbix在创建的时候,定制的变量名 -- 宏,我们可以直接拿过来使用, 自动获取该属性的值,当然了,这个变量名,我们也可以自己定义。 # 剩余空间小于10G自动触发异常,剩余空间大于40G才自动解除异常 ({TRIGGER.VALUE}=0 & min(/server/vfs.fs.size[/,free],10m)>40G ({TRIGGER.VALUE}=1 & min(/server/vfs.fs.size[/,free],10m)>40G 语法解析: {TRIGGER.VALUE} 自动获取触发异常时候的数据值 () 代表里面的多个表达式是一个整体,多个(),第一个表示触发异常,第二个表示恢复正常。
2.4、总结
基础知识 定位 - 根据实际业务数据和标准值进行状态评判 状态 - PROBLEM、OK、RECOVERY、UNKNOWN、等 级别 - 未知、消息、警告、一般严重、严重、灾难等
语法解析 格式 - {<server>:<item_key>.<function>(<parameter>)}<operator><constant> 函数 - avg、count、last、diff、str、等
3、触发器配置解析
3.1、从Configure进入到host的界面
3.2、点击主机右侧的 Trigger 进入到触发器的控制界面
3.3、包含多个触发器
3.5、点击一个简单的触发器,查看效果
3.5.1、效果图
3.5.2、属性解析
在Trigger的配置中,比较重要的就是以下三个属性:
Name 用于设定触发器的名称,如果需要携带特定主机唯一标识的话,可以借助于宏变量
Serverity 用于设定触发器的安全等级,可以随机选择
Expression 触发器的核心配置,表达式需要按照规矩来来写
表达式是需要根据实际情况来进行定制的,所以你的逻辑有多复杂,设计的表达式就有多复杂
3.5.3、复杂表达式示例
名字:/: Disk space is critically low 表达式:last(/192.168.10.25/vfs.fs.dependent.size[/,pused])>{$VFS.FS.PUSED.MAX.CRIT:"/"} and ((last(/192.168.10.25/vfs.fs.dependent.size[/,total])-last(/192.168.10.25/vfs.fs.dependent.size[/,used]))<{$VFS.FS.FREE.MIN.CRIT:"/"}
or timeleft(/192.168.10.25/vfs.fs.dependent.size[/,pused],1h,100)<1d) 注意: 这里的表达式,一般不是手写的,都是通过各种各样的 表达式构造器 自动生成的
4、创建单个触发器实战
4.1、点击"Configuration" - "Host" - 点击node后面的"Trigger",查看效果
4.2、点击右上角的"Create trigger",然后按照如下内容进行编辑,查看效果
4.2.1、效果图
4.2.2、配置解析
Name # 采用zabbix宏变量的效果自动获取部分数据值 Serverity # 选择Warning Expression # 采用我们上一节的简单示例,1分钟之内负载值超过0.8就报警 Allow manual # close 勾选,表示允许人为关闭该告警信息
4.2.3、表达式的定制
时间间隔不写的话,使用默认的时间间隔
4.3、点击Add保存该触发器,查看效果
4.4、点击主机的item信息,可以看到添加了load5的触发器功能
4.5、点击graph,可以看到一条触发器的标识
4.6、模拟触发告警
4.6.1、我们在node主机上创建一个文件,检查触发器效果。
dd if=/dev/zero of=/dev/null bs=1M count=1000000
4.6.2、查看首页dashboard效果
4.6.3、点击到Problems 左侧的 时间,查看具体效果
4.6.4、查看最新数据Graph
4.6.5、停止后的Graph
4.6.6、告警也随便之恢复
5、创建多个触发器实战
5.1、需求
我们需要根据实际的数据做多个告警处理,比如CPU 1分钟的负载超过0.65 就触发Warning,当负载数据超过0.85 触发High,当负载数据超过1.1 就触发Disaster告警。 所以我们需要在一个监控项上面做多个触发器 -- 告警升级。
5.2、多级触发器配置
5.2.1、配置【告警】类型
5.2.2、配置【一般严重】问题类型
5.2.3、配置【严重】问题类型
5.3、同样的方式来进行CPU的压力测试效果
dd if=/dev/zero of=/dev/null bs=1M count=1000000
5.4、查看告警页面
6、总结
配置解析 - 基本定位:Trigger 是 建立在某一个指定的item之上的。 - 三大属性:Name、Serverity、Expression 简单实践 - 找到指定node的item,创建Trigger即可,配置好三大属性即可 进阶实践 - 同一item之上的Trigger需要各自配置Name和Trigger