Zabbix 3.4触发器配置求助:结合用户宏与内存阈值
解决Zabbix 3.4触发器表达式问题
你遇到的问题主要来自两个关键点:用户宏的比较语法和内存单位的解析逻辑,再加上逻辑条件的优先级处理,我来帮你一步步修正:
问题分析
- 用户宏比较的语法错误:Zabbix触发器中,用户宏需要用双引号包裹后再和字符串比较,否则宏可能被解析为非字符串类型,导致匹配失败。
- 内存单位的解析问题:
vm.memory.size[available]这个监控项返回的是字节数(纯数值),直接写<5G的话,Zabbix 3.4可能无法正确识别这个单位(部分版本对单位大小写或格式有要求),更稳妥的方式是转换成对应的字节数值。 - 逻辑运算优先级:虽然AND的优先级高于比较运算符,但用括号明确包裹两个条件能避免潜在的解析歧义。
修正后的触发器表达式
推荐使用以下两种写法之一:
写法1:使用字节数值(最稳妥)
("{$CLASS_A}" = "HUGE") AND ({my_test_server.vm.memory.size[available].last()} < 5368709120)
5368709120是5GB对应的字节数(计算方式:5 * 1024 * 1024 * 1024)- 双引号包裹
{$CLASS_A}确保它被当作字符串和"HUGE"做严格匹配
写法2:使用Zabbix单位(如果你的环境支持)
如果Zabbix 3.4能正确解析单位(部分环境下大写G可以被识别),也可以写成:
("{$CLASS_A}" = "HUGE") AND ({my_test_server.vm.memory.size[available].last()} < 5G)
注意:如果这个写法不生效,优先用写法1,因为单位解析可能受监控项返回格式影响。
额外验证步骤
- 检查用户宏的值:确认
{$CLASS_A}的实际值是HUGE(无多余空格、大小写完全匹配,Zabbix字符串比较是区分大小写的)。 - 测试单个条件:在Zabbix的「触发器表达式测试」工具中,分别测试
"{$CLASS_A}" = "HUGE"和内存条件,看是否返回预期的TRUE/FALSE。 - 确认监控项数据:检查
vm.memory.size[available]是否正常采集到数据,返回的是纯数字(比如8589934592代表8GB)。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

