Zabbix 2.0:正则表达式从字符串中提取触发器的值?

Zabbix 2.0:正则表达式从字符串中提取触发器的值?

我正在使用 Zabbix 2.0.4 来监控几个 Java 应用程序。大多数值都是通过 JMX 导出的。其中一个导出的属性是一个字符串,其构造如下:[IP_1],[port_1],[ms_time_1];[IP_2],[port_2],[ms_time_2]; 例如:

192.168.105.20,5060,15638;192.168.105.30,5060,9753;

我想根据给定 IP 地址的 ms_time 值构建触发器。我的第一个问题是:如何从字符串中获取此值?我有这个正则表达式,当我在几个正则表达式测试工具中测试它时,它会捕获正确的数字:

192\.168\.105\.20,[\d]+,([\d]+)

但不知何故,这在 Zabbix 中似乎不起作用。我尝试了不同版本的正则表达式,例如使用 [0-9] 或 [:digit:] 代替 [\d],但无济于事。

当 ms_time 值超过 15000 时,我的触发器应该被激活,所以我的整个触发器定义目前如下所示:

{MY_HOST:jmx["com.example:type=Attributes",StringValue].regexp("192\.168\.105\.20,[\d]+,([\d]+)")}>15000

我找不到任何使用正则表达式从字符串中提取值并使用该值进行进一步处理的例子。

答案1

regexp如果项目的值与作为参数提供的正则表达式匹配,则函数返回 1,否则返回 0。它不返回提取的值。

一般来说,您尝试做的事情目前是不可能的,但有两个功能请求可能会在将来使其成为可能:ZBXNEXT-1638(存储整个值,但稍后提取一条信息)和ZBXNEXT-1427(收到后提取一条信息)。

作为一种解决方法,如果阈值ms_time是一个整数(例如,10000),则可以根据ms_time长度触发:

192\.168\.105\.20,[\d]+,([\d]{5,})

答案2

在 Asaveljevs 的回答的帮助下,我终于设法创建了一个有效的触发器表达式。检查 ms_time 的长度对我来说不起作用,但检查每个数字的值是可能的。使用前导零,如下所示:

{MY_HOST:jmx["com.example:type=Attributes",StringValue].regexp("192.168.105.20,
[[:digit:]]+,((0[0-9])|(1[0-4]))[[:digit:]][[:digit:]][[:digit:]];")}=0

这应该匹配任何小于 15000 的数字。当然,另一个解决方案是反转整个过程并寻找任何大于或等于 15000 的匹配项...

再次感谢,希望这些功能请求能够尽快实现!;-)

相关内容