2022 Zabbix中国峰会
2022 Zabbix中国峰会

3 上下文用户宏

概述

可选的上下文可以在 用户宏 中使用, 允许用上下文特定的值覆盖默认值。

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

{$MACRO:"static text"}

或正则表达式(支持zabbix 5.0.2及以上版本)

{$MACRO:regex:"regular expression"} 

要注意的是:具有正则表达式上下文的宏只能在用户宏配置中定义。若regex:前缀在其他地方用作用户宏上下文,比如在触发器表达式中,它将被视为静态上下文。

上下文引用是可选的(请参考 注意事项)。

宏上下文使用示例:

示例 描
{$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:regex:"^\/[a-z]+$"} = 30

那么,在用于发现已挂载文件系统的触发器原型中,低级别发现的宏将会被用作宏上下文:

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

当发现不同的低空间阈值后,根据已发现的挂载点或文件系统类型,宏上下文将应用到触发器中。那么以下情况,将会触发问题事件:

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

注意事项

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

<note warning>请勿创建不同的上下文宏来匹配相同的字符串,以避免未定义的行为 :::

  • 如果在主机、关联模板及全局上找不到带有上下文的宏,那么将会搜索不带有上下文的宏。
  • 上下文只支持低级别发现的宏。任何其他宏都将被忽略并视其为纯文本。

从技术上来说,宏上下文指定使用的规则类似于 监控项键值 的参数。除非如果有个,字符,宏上下文不是被解析为几个参数:

  • 如果上下文中包含}字符或者以"字符开头的,宏上下文必须用"引起来。引号内的引号必须用\字符进行转义。
  • \ 字符本身是不转义, 这就意味着在引用的上下文中是不可能出现以 \ 字符结尾的 —— {$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"]' 在语义上相同,但在独特性用途上是不同的。