每当 cisco 交换机接口使用超过 80 mbps(80% 的带宽)时如何创建 zabbix 问题

How to create a zabbix problem whenever a cisco switch interface utilizes more than 80 mbps (80% of it's bandwidth)

我正在尝试在 zabbix 中创建一个触发器,它会向我显示问题并在 cisco 交换机(使用 snmpv2)中的接口超过其带宽的 80%(100 mbps 或 1000 mbps)时通过电子邮件提醒我) 没有硬编码任何东西,我尝试使用这个触发表达式:

{/switch name:net.if.out[ifHCOutOctets./switch interface].min(10)}>80000000

我想知道如何编写这个可以正常工作的触发器表达式,而无需将其应用于每个开关中的每个界面项。我认为宏在这些情况下可能会有所帮助,但没有找到关于如何使用它们或如何使用低级别发现的解释或任何指南,这可能在满足我需要的解决方案中发挥了作用。 提前致谢。

你是对的,你想使用低级发现来做这个,以及发现你所有的接口。高层的低层发现包括两件事。 1) 你必须告诉 zabbix 如何去发现一堆动态的东西并为它们分配一个 LLD 宏,这是在 Discovery 规则的高层完成的。 2) 每次发现规则运行时,您必须告诉 zabbix 哪些项目原型、触发器原型等动态创建为实际项目和触发器。

以zabbix附带的Arista SNMPv2模板为例。该模板中包含许多发现规则,其中之一是网络接口发现规则。在网络接口发现规则中,zabbix 基本上执行 snmp 遍历并获取所有接口的列表并为每个接口分配 LLD(低级发现宏),例如 #IFINDEX、#IFSTATUS 等。发现规则,与所有 LLD 一样规则,获取 "Network Interfaces" 发现规则的输出,并使用它们在应用模板的每个主机上动态创建实际项目。

接下来要了解的部分是原型。一旦 zabbbix 找到所有网络接口,您的问题应该是,我如何让它在我的主机中为它找到的每个接口创建新的项目,以及我如何让它为它找到的每个接口创建触发器动态,自动和没有用户干预。答案是原型。原型是低级发现的子元素。它们实际上是为它发现的每件事创建新项目和触发器的。

在此处查看有关低级别发现规则的一些示例和文档。 https://www.zabbix.com/documentation/4.2/manual/discovery/low_level_discovery#trigger_prototypes

Zabbix 可以通过包括 SNMPv# 在内的多种发现方法创建 LLD 规则,这些方法都可以在 UI 或 api 中进行配置,以及其他未包含在使用中的客户发现规则用户参数、外部检查等

如果 zabbix 已经知道您的 switch 品牌和型号,"Templates/Network Devices" 中的模板,至少我认为这是路径,就像 arista 和 juniper 一样存在。

您也可以为非 snmp 内容创建自定义低级别发现规则。基本上你写了一个脚本,它会找到你想要动态添加到 zabbix 的东西,你的脚本需要 return 一个有效的 json 输出,带有你想要添加的#macronames 和值。例如,不需要自定义文件系统发现规则,因为如果您使用代理,它已经包含在内,会产生与官方文档中本示例中所示的行一样的行。 https://www.zabbix.com/documentation/4.2/manual/discovery/low_level_discovery#creating_custom_lld_rules

简而言之,检查是否已经存在适用于您的开关的模板以及带有项目原型的发现规则,以按照您想要的方式发现事物。 LLD 基本上允许 zabbix 也遍历任何源的动态数据结构,只要该数据结构具有 zabbix 已知的定义,并且您告诉它 JSON 中的哪些键和值要创建为项目、触发器等

您应该利用 Zabbix 的 low level discovery 功能。

在标准设置之后,您应该有一个 "Template Module Interfaces SNMPv2",它被一些其他模板用作接口发现的标准。

在模板中,您会发现 "Network Interfaces Discovery" 每小时运行一次的发现规则:

  • 向目标设备查询接口列表
  • 为每个接口创建 N 个项目(位输入、位输出、速度、类型等),定义为项目原型
  • 创建一些触发器,定义为触发器原型

速度项是协商的接口速度(即:千兆交换机端口为 1000),这是您的 100% 限制。

您可以向此模板添加一些定义以获得您需要的警报:

  • 创建一个 calculated 项原型并将其公式设置为 100*(currentOutputBits/speed)

  • 创建一个模板宏来定义您的警报阈值,即 {$INTERFACE_OUTPUT_THRESHOLD},并将其设置为 80

  • 创建一个匹配计算项时的触发器原型 大于 {$INTERFACE_OUTPUT_THRESHOLD} N 分钟

  • 可选地,对 currentInputBits 项目执行相同的操作

此设置将为在目标设备上找到的每个物理或逻辑接口创建 1 个额外的项目和 1 个额外的触发器:取消标记触发器原型上的 "create enable" 选项并仅在特定设备上启用它是有意义的特定设备的端口。

阈值宏可以在模板级别更改,影响与其链接的任何设备,或在主机级别更改自定义阈值。

感谢您的回复,我实际上再次检查了模板模块接口 SNMPv2,发现有一个原型触发器可以解决我的问题。

对于任何想用开关做同样事情的人:

  1. 将 "Template Module Interfaces SNMPv2" 模板添加到您的交换机(主机)。

  2. 将IF_UTIL_MAX宏更改为您想要的任何值,默认值为90(这是负责触发问题的带宽百分比的宏,比如改成60,当某主机带宽利用率在任意接口平均超过60%,持续15分钟,就会在problems选项卡或dashboard中添加一个问题。

  3. 如果 15 分钟的时间不适合您,您可以通过以下方式更改它:配置 -> 模板 -> 模板模块接口 SNMPv2 -> 发现规则 -> 网络接口发现-> 触发器原型 -> 搜索包含高带宽使用率的触发器名称 -> 在问题表达式和恢复表达式中找到 .avg() 函数并将其中的值更改为适合您的任何值,例如: 15m = 15 分钟, 1s = 1 秒等等...

我实际上建议克隆触发器原型,更改它然后禁用内置触发器,而不是仅仅更改其中的时间以便轻松调试长 运行 中的错误。因此,您可以更改触发器原型的名称,然后通过按屏幕左下角的克隆来克隆它,然后更改它的名称和设置以最适合您。

  1. 按屏幕左下角的添加,如果你接受了我的建议,你还需要点击触发器原型中内置触发器的绿色 "Yes" link table 禁用它。

您也可以继续尝试此线程上的其他答案,我非常感谢他们,但我没有足够的时间检查这些是否有效,因为我在阅读 Simone Zabberoni 和helllordkb 的回答和检查 "Template Module Interfaces SNMPv2" 模板中内置的低级发现。