我正在使用 Zabbix 监控应用程序,并定义了一个返回字符串值的自定义项。由于我的项目的值实际上是校验和,它们将只包含字符[0-9a-f]
。为了冗余,我的应用程序的两个镜像副本在两台服务器上运行。我想创建一个触发器,该触发器将从两台机器中获取项目值并在它们不相同时触发。
暂时让我们忘记值改变的那一刻(它不是原子操作,因此系统可能会在短时间内看到不一致的状态,这不是真正的错误),因为我可以通过查看几个来解决它以前的值。
关键是:如何编写一个 Zabbix 触发器表达式,它可以比较两个项目的字符串值是否相等(实际上是两个镜像主机上的相同项目)?
根据精美手册和我在实践中确认的那样,标准运算符=
只#
处理数值,所以我不能只写自然的{host1:myitem[param].last(0)} # {host2:myitem[param].last(0)}
. change()
or等函数diff()
只能比较同一项目在不同时间点的值。诸如此类的函数regexp()
只能将项目的值与常量字符串/正则表达式进行比较,而不能与另一个项目的值进行比较。这是非常有限的。
我可以将比较逻辑移动到我的自定义项执行的脚本中,但它有点凌乱且不优雅,所以如果可能的话,我希望在我的 Zabbix 触发器中包含这个逻辑。
也许尽管有上面列出的限制,有人可以想出一个解决方法吗?