Zabbix 触发器不适用于计数函数

Zabbix 触发器不适用于计数函数

如果服务器的可用内存在一天内下降到阈值以下的次数达到 x 次,我会尝试发出警报。

{my_template:vm.memory.size[free].count(1m,5G,lt,1d)}>5
{my_template:vm.memory.size[free].count(1m,5368709120,lt,1d)}>5

当可用内存为 9G 时我也尝试过此操作...但是失败了。

{my_template:vm.memory.size[free].count(1m,5G,gt,1d)}>5

答案1

Zabbix 文档对于 count 函数指定选项如下:

计数(秒|#num,,,)

关于time_shift,这更详细地解释了它的作用。

多个函数支持额外的第二个 time_shift 参数。此参数允许引用过去一段时间的数据。例如,avg(1h,1d) 将返回一天前一小时的平均值。

您的示例在第一个参数中使用了 1m,这意味着它们只查看一分钟的时间段,而通过将其时间移位 1d,您查看的是 1 分钟的时间段,恰好是 24 小时前。这似乎不是您想要查看的内容。

您似乎正确使用了第二和第三个参数,以及函数外部的运算符。

为了获得您所描述的触发器,我将放弃 time_shift 并将第一个参数设置为 1d。

这可能更接近你所描述的:

{my_template:vm.memory.size[free].count(1d,5368709120,lt)}>5

但值得注意的是,计数函数很大程度上依赖于在指定时间段内收集了多少个数据点,这取决于项目监控间隔。

在下面的例子中,Zabbix 列出了过去 24 小时内收集到的内存数据。由于间隔设置为 30 秒,因此有 2880 个数据点。

zabbix 截图

当您说您希望触发器在计数函数返回 >5 后触发时,这意味着当超过 5/2880 个数据点满足条件时它将触发。

这可以是全天分布的 5 个点以上,也可以是连续 5 个点以上,这意味着它发生过一次,持续 2.5 分钟。

更好的办法可能是创建一个新的计算项。我们将其称为“5 分钟内存下降”。我将为其指定键“foo.bar.free.memory.low”。它可以使用以下公式:

max(vm.memory.size[free], 5m)<5368709120

当过去 5 分钟内可用内存的最高值低于 5G 时,它将存储 1,否则存储 0。

然后,根据该新项目创建一个触发器:

{my_template:foo.bar.free.memory.low.count(1d,0,gt)}>5

当过去一天出现 5 次以上此类下降时,此触发器将触发。

这种方法确实可以减少误报,并且更可靠地计算真实的记忆力下降。

相关内容