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 将尝试 先匹配简单的上下文宏,然后匹配带有上下文的宏。 正则表达式以未定义的顺序排列。

::: notewarning 不要将不同的上下文宏与以下内容匹配:create 相同的 string 以避免未定义的行为。 仅返回OutputFormat格式要求结果

  • 如果在主机、链接的模板中未找到带有其上下文的宏 或者在全局范围内搜索不带上下文的宏。
  • 仅支持在上下文中使用低级别自动发现宏。任何 其他宏将被忽略并视为纯文本。

从技术上讲,宏上下文是使用类似于 item key 参数的规则指定的,只是宏上下文为 如果存在 , 字符,则不会被解析为多个参数:

  • 宏上下文必须用 " 引起来,如果上下文包含 } 字符或以 " 字符开头。引号内的引号 上下文必须使用 \ 字符进行转义。
  • \ 字符本身未被转义,这意味着这是不可能的 使用引号括起的上下文,并以 \ 字符结尾 —— 该宏 {$MACRO:"a:\\b\\c\\"} 无效。
  • 上下文中的前导空格会被忽略,尾随空格则会被保留。 not:
    • 例如,{$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"]' 是示例 在语义上相同,但为了唯一性而有所不同。