如果服务器的可用内存在一天内下降到阈值以下的次数达到 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 个数据点。
当您说您希望触发器在计数函数返回 >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 次以上此类下降时,此触发器将触发。
这种方法确实可以减少误报,并且更可靠地计算真实的记忆力下降。