这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

1 宏函数

概述

宏函数提供了能自定义 值的功能。

有时宏可能会解析为一个不一定易于处理的值。它可能很长,或包含你想提取的感兴趣的特定子字符串。那么此时宏函数就发挥了作用。

宏函数的语法为:

{<macro>.<func>(<params>)}

其中:

  • <macro> - 为要自定义的宏(例如 {ITEM.VALUE} 或 {#LLDMACRO})
  • <func> - 要应用的函数
  • <params> - 以逗号分隔的函数参数列表。如果他们以'' '' (空格), " 或者包含 ), ,这些符号开头,则必须用引号括起来。

例如:

{{ITEM.VALUE}.regsub(pattern, output)}
       {{#LLDMACRO}.regsub(pattern, output)}

可支持的宏函数

函数
描述 * 参数** **可 持于**
regsub (<pattern>,<output>)
通过正则表达式匹配提取的子字符串(区分大小写)。 pattern - 匹配的正则表达式
{ITEM.VALUE}
output - 输出的选项。支持 \1 - \9 占位符来匹配组。 \0 返回匹配的文本。 {ITEM.LASTVALUE}
<低级别发现宏 (除了在低级别发现规则过滤器中)
iregsub (<pattern>,<output>)
通过正则表达式匹配提取的子字符串(不区分大小写)。 pattern - 匹配的正则表达式
{ITEM.VALUE}
output - 输出的选项。支持 \1 - \9 占位符来匹配组。 \0 返回匹配的文本。 {ITEM.LASTVALUE}
<低级别发现宏 (除了在低级别发现规则过滤器中)

如果在 受支持的位置 使用函数,但是应用于不支持宏函数的宏,那么宏的计算结果为'未知'。

如果pattern不是一个正确的正则表达式,那么宏的计算结果为'未知'(低级别发现宏除外,在这种情况下,函数将被忽略,宏将保持未展开)

如果宏函数应用于不支持宏函数的位置的宏,那么该函数将被忽略。

示例

下面的例子说明了宏函数用于自定义宏值的方法,这些宏值包含“日志行”作为接收值:

接收值 宏 输出
123Log line {{ITEM.VALUE}.regsub(^[0-9]+, Problem)} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} Problem ID: 123
Log line {{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} ''Problem ID: ''
MySQL crashed errno 123 {{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} '' Problem ID: MySQL_123 ''
123 Log line {{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} *UNKNOWN* (无效的正则表达式)
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} customername
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} 1
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (无效的正则表达式)
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} {$MACRO:"customername"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} {$MACRO:"1"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} {$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"} (无效的正则表达式)
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}" "{$MACRO:\"customername\"}"
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}" "{$MACRO:\"1\"}")
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}") (无效的正则表达式)