可选上下文可用于 [user宏](/manual/config/macros/user_macros),允许覆盖具有特定于上下文的默认值。
上下文附加到宏名称;语法取决于是否上下文是一个静态文本值:
或正则表达式:
请注意,具有正则表达式上下文的宏只能在用户宏配置。如果 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/ 为前缀的字符串。 |
可以定义具有上下文的用户宏以实现更灵活触发器表达式中的阈值(基于检索到的值低级发现)。例如,您可以定义以下宏:
然后一个低级发现宏可以用作宏上下文已挂载文件系统发现的触发器原型:
· last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}
发现后将应用不同的低空间阈值根据发现的挂载点或文件系统类型触发。如果出现以下情况,将生成问题事件:
不要创建不同的上下文宏匹配相同的字符串以避免未定义的行为。
从技术上讲,宏上下文是使用类似于 item key 参数,除了宏上下文是如果有 ,
字符,则不被解析为多个参数:
}
,则必须用 "
引用宏上下文字符或以 "
字符开头。引号内的引号context 必须用 \
字符转义。\
字符本身没有被转义,这意味着它是不可能的有一个以 \
字符结尾的引用上下文 - 宏 {$MACRO:"a:\b\c\"} 无效。以下宏都是等价的,因为它们具有相同的上下文:{$MACRO:A}、{$MACRO:A} 和 {$MACRO:"A"}。这是相反的带有项目键,其中 'key[a]'、'key[a]' 和 'key["a"]' 是语义上相同,但出于唯一性目的而不同。