Zabbix中“处理器负载过高”触发器的优化配置

Zabbix中“处理器负载过高”触发器的优化配置

我使用 Zabbix 监控大约 10 台 Linux 服务器,每台服务器有 4 个 CPU 核心。
最近,我收到了太多来自“处理器负载过高”触发器的错误警报。
“处理器负载过高”触发器表达式为:

{Template OS Linux:system.cpu.load[percpu,avg1].avg(5m)}>5 

这是默认的。

然后我将 5 提高到 12,以减少警报数量,但不知何故,我认为这不是处理它的最佳方法。因此,我进行了一些 Google 搜索并构建了一个新的触发器。

{Template OS Linux:system.cpu.util[,user].max(5m)}>75

我想问一下社区:

  1. 新的表达式是否比原来的表达式更好地反映实际的 CPU 过载?
  2. 你会以某种不同/更好/更优化的方式去做吗?
  3. 您将如何编写一个表达式来实现这一点:
    如果出现以下情况,则触发器将触发:

    • 每 CPU 队列中等待的进程数平均 5 分钟将超过 3,
      并且
    • 最后 5 分钟内的最大 CPU 利用率将高于 75%

我按照一些文章并尝试过

({Template OS Linux:system.cpu.load[percpu,avg1].avg(5m)}>3
&
{Template OS Linux:system.cpu.util[,user].max(5m)}>75)

但我失败了。Zabbix
服务器返回错误:
触发器表达式不正确。请检查从“& {Template OS Linux:system.cpu.util[,user].max(5m)}>75)”开始的表达式部分。
由于我还不是 Zabbix 方面的专家,因此非常欢迎大家提出意见。谢谢。

答案1

为什么“处理器负载过高”是误报?对我来说这是真实症状 - CPU 饱和。

恕我直言:仅使用

{Template OS Linux:system.cpu.load[percpu,avg1].avg(5m)}>5 

但阈值取决于您的服务器 - 它在做什么以及如何做。但 >5 的值对我来说是可疑的。示例:CPU 使用率可能很低,但 CPU 负载很高 - 在这种情况下,它可能是“缓慢”IO 磁盘操作的症状(您需要检查指标 CPU iowait 使用率、磁盘队列长度等)。您的新组合触发器表达式无法捕捉这种情况。

我推荐 Netflix 高级性能架构师撰写的有关利用率/饱和度的文章:http://www.brendangregg.com/usemethod.html

答案2

我建议这样的事情:

{Template OS Linux:system.cpu.load[percpu,avg15].avg(15m)}>1.8

目的是你想要一个警报响应时间变慢而不是提高到更高的阈值。通常,5 分钟或 10 分钟后消失的活动爆发并不是真正的问题,根据您在那里执行的操作,这可能是完全正常的。但是,如果重负载持续了相当长的时间,那么您需要了解它。根据您的典型工作负载情况,将阈值 1.8 稍微调高或调低一点。

就你这里的表达而言:

{Template OS Linux:system.cpu.util[,user].max(5m)}>75

我不建议在这种情况下使用 max() 函数,因为它对瞬间的高活动爆发也很敏感……除非这是你真正想要的,但不要抱怨收到很多警报。

最后,是的,您可以使用布尔表达式,并且有一个文档页面可以帮助您。看看这个:

https://www.zabbix.com/documentation/3.2/manual/config/triggers/expression#operators

答案3

负载指标之所以重要,是因为它能告诉你 CPU 何时成为吞吐量的瓶颈。在正常运行中,任务将被分配给 CPU,并通常进行处理,直到需要内核为其执行某些功能 - 此时任务离开 CPU 并进入睡眠状态。内核任务完成后,任务将重新加入等待 CPU 的队列。

如果队列中有多个条目,则操作系统不会等待任务放弃。任务将在 CPU 上获得固定的时间片,然后操作系统将其踢出并重新加入队列。它是抢占式的。

负载指标报告队列中的平均任务数。因此,当负载指标接近或超过主机上的 CPU 数量时,应发出警告。

在 Zabbix 中,percpu 标志会预先计算您的负载/cpu 比率,当此值接近或超过 1 时,您的吞吐量会受到影响

相关内容