3 个带上下文的用户宏

概述

user macros中可以使用可选的上下文,允许使用特定于上下文的值来覆盖默认值。

上下文附加在宏名称之后;其语法取决于上下文是否为静态文本值:

{$MACRO:"静态文本"}

或正则表达式:

{$MACRO:regex:"正则表达式"}

请注意,带有正则表达式上下文的宏只能在用户宏配置中定义。如果在其他位置(如触发器表达式)中将 regex: 前缀用作用户宏上下文,则会被视为静态上下文。

上下文的引号是可选的(另请参阅重要说明)。

宏上下文示例:

示例 说明
{$LOW_SPACE_LIMIT} 没有上下文的用户宏。
{$LOW_SPACE_LIMIT:/tmp} 带有上下文的用户宏(静态 string)。
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} 带有上下文的用户宏(正则表达式)。等同于 {$LOW_SPACE_LIMIT:/tmp}
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} 带有上下文的用户宏(正则表达式)。匹配所有以 /var/log/ 开头的字符串。

使用场景

可以定义带有上下文的用户宏,以便在触发器表达式中实现更加灵活的阈值(基于低级别自动发现检索到的值)。例如,您可以定义以下宏:

  • {$LOW_SPACE_LIMIT} = 10
  • {$LOW_SPACE_LIMIT:/home} = 20
  • {$LOW_SPACE_LIMIT:regex:"^/[a-z]+$"} = 30

然后,可以在触发器原型中使用低级别自动发现宏作为宏上下文,用于已挂载的file系统发现:

last(/主机/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

在自动发现完成后,不同的低磁盘空间阈值将根据发现的挂载点或file系统类型应用于触发器。如果以下情况发生,则会生成问题事件:

  • /home 文件夹的可用磁盘空间少于 20%
  • 匹配正则表达式的文件夹(例如 /etc、/tmp 或 /var)的可用磁盘空间少于 30%
  • 不匹配正则表达式且不是 /home 的文件夹的可用磁盘空间少于 10%

重要说明

  • 如果存在多个带上下文的用户宏,Zabbix会优先尝试匹配简单上下文宏,然后以未定义的顺序匹配包含正则表达式的上下文宏。

请勿create匹配相同string的不同上下文宏,以避免未定义行为。

  • 如果在主机、关联模板或全局范围内未找到带上下文的宏,则会继续查找不带上下文的宏。
  • 上下文中仅支持低级发现宏,其他宏将被忽略并视为纯文本。

从技术实现看,宏上下文的指定规则与item key参数类似,但存在以下差异:当出现,字符时,宏上下文不会被解析为多个参数:

  • 若上下文包含}字符或以"字符开头,必须使用"进行引用。被引用的上下文内部的引号需用\字符转义。
  • \字符本身不可转义,这意味着无法创建以\字符结尾的引用上下文——例如宏{$MACRO:"a:\b\c\"}是无效的。
  • 上下文开头的空格会被忽略,但尾部空格不会:
    • 例如{$MACRO:A}与{$MACRO: A}等价,但不同于{$MACRO:A }。
  • 引导引号前和结尾引号后的所有空格都会被忽略,但引号内的空格会保留:
    • 宏{$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" }与{$MACRO: "A" }等价,但{$MACRO:"A"}和{$MACRO:" A "}不等价。

以下宏因具有相同上下文而完全等效:{$MACRO:A}、{$MACRO: A}和{$MACRO:"A"}。这与监控项键的规则形成对比——对于键而言,'key[a]'、'key[ a]'和'key["a"]'语义相同,但在唯一性判定时被视为不同实体。