在user macros中可以使用可选的上下文,允许使用特定于上下文的值来覆盖默认值。
上下文附加在宏名称之后;其语法取决于上下文是否为静态文本值:
或正则表达式:
请注意,带有正则表达式上下文的宏只能在用户宏配置中定义。如果在其他位置(如触发器表达式)中将 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/ 开头的字符串。 |
可以定义带有上下文的用户宏,以便在触发器表达式中实现更加灵活的阈值(基于低级别自动发现检索到的值)。例如,您可以定义以下宏:
然后,可以在触发器原型中使用低级别自动发现宏作为宏上下文,用于已挂载的file系统发现:
在自动发现完成后,不同的低磁盘空间阈值将根据发现的挂载点或file系统类型应用于触发器。如果以下情况发生,则会生成问题事件:
::: notewarning 不要将不同的上下文宏与以下内容匹配:create 相同的 string 以避免未定义的行为。 仅返回OutputFormat格式要求结果
从技术上讲,宏上下文是使用类似于 item key 参数的规则指定的,只是宏上下文为 如果存在 ,
字符,则不会被解析为多个参数:
"
引起来,如果上下文包含 }
字符或以 "
字符开头。引号内的引号 上下文必须使用 \
字符进行转义。\
字符本身未被转义,这意味着这是不可能的 使用引号括起的上下文,并以 \
字符结尾 —— 该宏 {$MACRO:"a:\\b\\c\\"}
无效。以下宏全部等效,因为它们具有相同的 上下文:{$MACRO:A}、{$MACRO: A} 和 {$MACRO:"A"}。这形成了对比 使用 监控项 键,其中 'key[a]'、'key[ a]' 和 'key["a"]' 是示例 在语义上相同,但为了唯一性而有所不同。