Zabbix提供强大的触发器(Trigger)函数以方便进行更为灵活的报警及后续动作,具体触发器函数可以访问https://www.zabbix.com/documentation/2.0/manual/appendix/triggers/functions, 之前也有翻译本文章,地址为: http://pengyao.org/zabbix-triggers-functions.html

今天用实例来说明常见的监控需求,应该如何来编写Trigger表达式. 主人公就暂且叫做"绿肥"吧.

前奏

"绿肥,别整天就知道聊QQ,也关注下服务器运行情况吧." 老大颇不满意的说.

"哦",绿肥只好先应承下来

“关注服务器? 咋关注?” 绞尽脑汁,听说有个监控神器叫zabbix, 按照手册里边说的部署上了zabbix、将"test-01"服务器也安装了agent, 添加了"agent.ping" item用来测试agent是否可以连通; "system.uptime" item用来收集主机运行时间; “system.cpu.util[,idle]” item用来收集CPU空闲百分比.

收集完这些值,通过simple graph能看到运行状况,老大似乎很满意. 但接下来的一天, 主机不知道什么时候重启了,老大劈头盖脸的说“机器重启了都不知道?要这个监控有什么用?”

看来是时候学习下zabbix trigger了,看下什么情况下触发报警.

Zabbix Trigger实例

"得,还是先学习下怎么判断机器是否重启了吧",绿肥喃喃的说

system.uptime映入眼帘,这个item是采集主机运行时间的,一直累加的计数器,如果当前采集值小于上一次的采集值,那就意味着机器重启了

怎么判断当前值小于上一次哪? 查询手册发现change函数, 看来对应的Trigger表达式是:

{test-01:system.uptime.change(0)}<0

表达式加上后,配合上默认的Action规则,手动重启了下服务器,真的告警的耶,绿肥愉快的笑了起来.

直到又一天的到来......

这天机器重启了,因为硬盘故障, 结果系统没起来, 直到老大发现......

"哎,又挨了一通训", 不过的确是工作不到位,系统没启动都不知道,这工作做得真叫一个差

"怎么搞",agent.ping映入了眼帘,看来得拿它"出出气"了,ping不通都不告诉我,哼,不整治你整治谁

"系统没起来,也就意味着zabbix agent没启动起来,没启动起来,那就是说我大zabbix server根本取不到agent的数据,那么该用哪个函数那?", "nodata",对,就是它,写出来的表达式是这样的:

{test-01:agent.ping.nodata(3m)}=1

三分钟取不到agent.ping的值,那也就是说agent宕了或者服务器挂了,不错,不错.

直到又一天的到来......

"什么情况,怎么网站打开这么慢?" 老大在那里嘟囔着

趁机看了下CPU使用率,我擦,已经持续一小时CPU 100%满负荷运行了,看来隔壁研发小妹又写了个死循环,不过我是不是得增加个CPU的报警?

说干就干,既然是CPU有问题,那就从CPU下手,之前增加过"system.cpu.util[,idle]"的item,这次就写个trigger, 写出来的trigger是这个样子:

{test-01:system.cpu.util[,idle].last(0)}<20

也就是说如果cpu空闲小于20%即CPU占用超过80%立即触发报警,嘿嘿,看来不错

一天过去了,邮箱里增加了几百封关于"CPU使用率超过80%的邮件",查询一看,CPU使用率总是冒个尖就马上就下来了,看来它把这里当城门了,这里用last(0)有点不靠谱,那么该用哪个函数哪? 还得好好翻翻手册.

"最近几分钟,最近几分钟,最近几分钟",绿肥若有所思的自言自语着......

{test-01:system.cpu.util[,idle].avg(3m)}<20

连续三分钟CPU使用率平均值超过80%触发报警, 有没有更狠一点的,三分钟CPU使用率持续在80%以上触发报警

{test-01:system.cpu.util[,idle].max(3m)}<20

连续三分钟CPU空闲率中的最大值小于20%即每一个值都小于20%,对应的是就是CPU使用率全部都在80%以上,看来这个的确更狠一点.

似乎还有点不妥,发现CPU占用率在79.9%左右竟然也给我报OK,不爽,不爽, 看来需求得调整为"连续三分钟CPU使用率超过80%触发报警,如果连续三分钟CPU使用率低于50%才认为恢复正常"

手册里边有个"TRIGGER.VALUE"宏,看来得从这里下下手.

TRIGGER.VALUE对应的为Trigger状态,0代表OK, 1代表Problem,分解下需求:

  • 正常情况下连续三分钟CPU使用率超过80%,看起来表达式是:

    {TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20
    
  • 故障时连续三分钟CPU使用率低于50%恢复正常,即故障时刻CPU使用率持续三分钟高于50%依然为故障,表达式是这个样子的:

    {TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50
    

然后整合下表达式,就成了下边这个样子:

({TRIGGER.VALUE}=0&{test-01:system.cpu.util[,idle].max(3m)}<20) | ({TRIGGER.VALUE}=1&{test-01:system.cpu.util[,idle].min(3m)}<50)

不错,不错,看起来多高端,颇有成就感!

Zabbix Trigger表达式实例的更多相关文章

  1. zabbix触发器表达式

    zabbix触发器表达式 触发器使用逻辑表达式来评估通过item获取的数据是处于哪种状态, 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<serve ...

  2. 【协议分析】Wireshark 过滤表达式实例

    Wireshark 过滤表达式实例   1.wireshark基本的语法 字符 \d          0-9的数字 \D          \d的补集(以所以字符为全集,下同),即所有非数字的字符 ...

  3. [转]EL表达式和JSTL表达式实例

    /* **Title:EL表达式和JSTL表达式实例 **Author:Insun **Blog:http://yxmhero1989.blog.163.com/ */ 为了方便写JSP,我们引入了E ...

  4. SpringAOP的xml实例、注解形式实例、概念理解 以及execution表达式实例与概念说明

    (1)Spring AOP的简单应用: -->AOP:(Aspect Orinted Programming)面向切面编程,用于具有横切逻辑的场合,如:访问控制,事务管理,性能检测,由切入点和增 ...

  5. 19 Zabbix web监控实例

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 9 Zabbix web监控实例 通过前面的介绍你已经了解Web scenario的配置,下面我们 ...

  6. 自学Zabbix11.5 Zabbix SNMP监控实例

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix11.5 Zabbix SNMP监控实例-监控网络设备内存使用情况 1. zabb ...

  7. 第一个AngularJS表达式实例

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. zabbix触发器表达式详解

    Zabbix触发器的语法如下: {<server>:<key>.<function>(<parameter>)}<operator>< ...

  9. (24)zabbix触发器表达式详解

    概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:   1 {<server>:<key>.<function>(< ...

随机推荐

  1. [ Laravel 5.5 文档 ] 官方扩展包 —— 全文搜索解决方案:Laravel Scout

    简介 Laravel Scout 为 Eloquent 模型全文搜索实现提供了简单的.基于驱动的解决方案.通过使用模型观察者,Scout 会自动同步更新模型记录的索引. 目前,Scout 通过 Alg ...

  2. Android -- ViewPager切换动画,PageTransformer

    transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时 ...

  3. java根据图片路径下载到服务器方案 (转)

    http://www.cnblogs.com/thinkingandworkinghard/articles/5589484.html 平常做的工作中,有一部分是同步数据的.但是同步的过程中碰到个问题 ...

  4. How to duplicate the records in a MongoDB collection

      // Fill out a literal array of collections you want to duplicate the records in. // Iterate over e ...

  5. (转)Debug Assertion Failed! Expression: _pFirstBlock == pHead

      最近在VS上开发C++程序时遇到了这个错误: Debug Assertion Failed! Expression:_pFirstBlock == pHead 如图: 点击Abort之后,查看调用 ...

  6. 第八周(3) Word2007样式

    第八周(3) Word2007样式 教学时间 2013-4-19 教学课时 2 教案序号 23 教学目标 1.掌握样式的概念2.能够熟练地创建样式.修改样式的格式,使用样式3.熟练利用样式格式化文档 ...

  7. 【推荐】ImageProcessor.Web,再也不用自己生成缩略图了

    1.什么是ImageProcessor.Web ImageProcessor.Web是基于ImageProcessor的web图像处理模块,允许开发者使用URL查询字符串参数的方式作为指令执行图像处理 ...

  8. JAVA 数据库连接池(伪代码,简单易读)

    一.引言 近年来,随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,电子商务的冲击波又一次在世界范围内掀起巨浪,各类商务网站吸引着大量用户的青睐,商务网站的访问量也 ...

  9. J2EE用监听器实现同一用户只能有一个在线

    这里我们讨论的是已登陆或将要登陆的用户,游客不在讨论的范围之内.这一点大家应该很容易就能理解的吧.                那么我们应该怎样去实现同一用户只能有一个在线这样的一个小功能呢? 有人 ...

  10. 使用tar+pigz+ssh实现大数据的高效传输

    以前我们跨主机拷贝大数据的时候,比如要拷贝超过100GB的mysql原始数据,我们通常的做法如下: 在源端打包压缩为tar.gz文件 采用scp或者rsync等方式拷贝到目标主机 在目标主机解压文件 ...