3 个带上下文的用户宏

概述

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

上下文会附加到宏名称后;语法取决于上下文是静态文本值:

{$MACRO:"static text"}

或是正则表达式:

{$MACRO:regex:"regular expression"} 

注意带正则表达式上下文的宏只能在用户宏配置中定义。若在其他地方(如触发器表达式)使用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(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

发现完成后, 根据发现的挂载点或file系统类型, 触发器将应用不同的低空间阈值. 在以下情况下将生成问题事件:

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

重要说明

  • 如果存在多个带上下文的用户宏,Zabbix将尝试

    match the simple context macros first and then context macros with regular expressions in an undefined order.

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

  • 如果在主机、关联模板或全局范围内未找到带上下文的宏,则会继续查找不带上下文的宏。

  • 上下文中仅支持低级发现宏。任何

    other macros are ignored and treated as plain text.

从技术上讲,宏上下文使用类似于item key参数的规则进行指定,不同之处在于宏上下文不会因存在,字符而被解析为多个参数:

  • 若上下文包含}字符或以"字符开头,则必须用"对宏上下文进行引号包裹。引号内的引号必须使用\字符进行转义。

  • \字符本身不会被转义,这意味着无法创建以\字符结尾的带引号上下文——宏{$MACRO:"a:\b\c\"}是无效的。

  • 上下文开头的空格会被忽略,但结尾的空格不会:

    • 例如{$MACRO:A}与{$MACRO: A}相同,但与{$MACRO:A }不同。
  • 所有位于前导引号之前和尾随引号之后的空格

    ignored, but all spaces inside quotes are not:

    • Macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } and {$MACRO: "A" } are the same, but macros {$MACRO:"A"} and {$MACRO:" A "} are not.

以下宏都是等效的,因为它们具有相同的上下文:{$MACRO:A}、{$MACRO: A}和{$MACRO:"A"}。这与监控项键形成对比,其中'key[a]'、'key[ a]'和'key["a"]'在语义上相同,但在唯一性判定时被视为不同。