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将尝试先匹配简单的上下文宏,然后非顺序地匹配具有正则表达式的上下文宏。
请勿创建不同的上下文宏来匹配相同的字符串,以避免未定义的行为
如果在主机、关联模板及全局上找不到带有上下文的宏,那么将会搜索不带有上下文的宏。
上下文只支持低级别发现的宏。任何其他宏都将被忽略并视其为纯文本。
从技术上来说,宏上下文指定使用的规则类似于 监控项键值 的参数。除非如果有个,
字符,宏上下文不是被解析为几个参数:
如果上下文中包含
}
字符或者以"
字符开头的,宏上下文必须用"
引起来。引号内的引号必须用\
字符进行转义。\
字符本身是不转义, 这就意味着在引用的上下文中是不可能出现以\
字符结尾的 —— {$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”]‘ 在语义上相同,但在独特性用途上是不同的。