这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.

3 带有上下文的用户宏

概述

可选上下文可用于 [user宏](/manual/config/macros/user_macros),允许覆盖具有特定于上下文的默认值。

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

{$MACRO:"静态文本"}

或正则表达式:

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

请注意,具有正则表达式上下文的宏只能在用户宏配置。如果 regex: 前缀在其他地方被用作用户宏上下文,就像在触发器表达式中一样,它将被视为静态上下文。

上下文引用是可选的(另见 [重要注释](#important_notes))。

宏上下文示例:

示例 说明
{$LOW_SPACE_LIMIT} 没有上下文的用户宏。
{$LOW_SPACE_LIMIT:/tmp} 带有上下文的用户宏(静态字符串)。
{$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:正则表达式:"^\/[a-z]+$"} = 30

然后一个低级发现宏可以用作宏上下文已挂载文件系统发现的触发器原型:

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

发现后将应用不同的低空间阈值根据发现的挂载点或文件系统类型触发。如果出现以下情况,将生成问题事件:

  • /home 文件夹的可用磁盘空间不足 20%
  • 匹配正则表达式模式的文件夹(如 /etc、/tmp 或 /var)具有不到 30% 的可用磁盘空间
  • 与正则表达式模式不匹配且不是 /home 的文件夹有不到 10% 的可用磁盘空间

重要笔记

  • 如果存在多个具有上下文的用户宏,Zabbix 将尝试首先匹配简单的上下文宏,然后匹配上下文宏未定义顺序的正则表达式。

不要创建不同的上下文宏匹配相同的字符串以避免未定义的行为。

  • 如果在主机上找不到带有上下文的宏,则链接模板或全局,然后搜索没有上下文的宏。
  • 上下文中仅支持低级发现宏。任何其他宏被忽略并被视为纯文本。

从技术上讲,宏上下文是使用类似于 item key 参数,除了宏上下文是如果有 , 字符,则不被解析为多个参数:

  • 如果上下文包含 },则必须用 " 引用宏上下文字符或以 " 字符开头。引号内的引号context 必须用 \ 字符转义。
  • \ 字符本身没有被转义,这意味着它是不可能的有一个以 \ 字符结尾的引用上下文 - 宏 {$MACRO:"a:\b\c\"} 无效。
  • 上下文中的前导空格被忽略,尾随空格是不是:
    • 例如 {$MACRO:A} 与 {$MACRO:A} 相同,但不同{$宏: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"]' 是语义上相同,但出于唯一性目的而不同。