宏函数提供自定义[Macro](/manual/config/macros)值的功能。
有时宏可能解析为一个不一定容易使用的值。它可能很长,或者包含您想要提取的特定感兴趣的子字符串。这就是宏函数可以发挥作用的地方。
宏函数的语法是:
其中:
例如:
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
函数 | ||||
---|---|---|---|---|
说明 | 参数 | 支持 | ||
fmtnum(<digits>) | ||||
数字格式,用于控制小数点后打印的位数 | 位数-小数点后的位数。不会产生尾随零 | {ITEM.VALUE} {ITEM.LASTVALUE} 表达式宏 |
||
fmttime(<format>,<time\u shift>) | ||||
时间格式 | 格式-强制格式字符串,与strftime函数格式化兼容 time\u shift-应用于格式化前时间的时间移位;应以 -<N><time\u unit> 或+<N><time\u unit> 开头,其中N——要加或减的时间单位数 时间_单位-小时、天、周、月或年 自Zabbix 5.4以来,time\u shift参数支持多步时间操作,可能包括“/<time>”以切换到时间单位的开头(“/d”-午夜,“/w”-一周的第一天(周一),“/M”-一个月的第一天,等等)。示例: “-1w”-正好7天前 “-1w/w”-前一周的星期一 “-1w/w+1d”-前一周的星期二 注意,时间运算是从左到右计算的,没有优先级。例如,“-1M/d+1h/w”将被解析为“(-1M/d)+1h)/w” |
{TIME} | ||
iregsub(<pattern>,<output>) | ||||
通过正则表达式匹配提取子字符串(不区分大小写) | 模式匹配的正则表达式 输出输出选项\1-\9支持占位符来捕获组\0返回匹配的文本 |
{ITEM.VALUE} {ITEM.LASTVALUE} 底层自动发现宏(底层自动发现规则筛选器中除外) |
||
regsub(<pattern>,<output>) | ||||
通过正则表达式匹配提取子字符串(区分大小写) | 模式匹配的正则表达式 输出输出选项\1-\9支持占位符来捕获组\0返回匹配的文本 |
{ITEM.VALUE} {ITEM.LASTVALUE} 底层自动发现宏(底层自动发现规则筛选器中除外) |
如果函数在支持的位置中使用,但应用于不支持宏函数的宏,则宏的计算结果为“未知”。
如果模式不是正确的正则表达式,则宏的计算结果为“未知”(不包括底层自动发现宏,在这种情况下,函数将被忽略,宏将保持未展开)
如果在不支持宏函数的位置将宏函数应用于宏,则该函数将被忽略。
以下示例说明了使用宏函数自定义宏值的方法:
收到的值 | 宏变量 | 输出 |
---|---|---|
24.3413523 |
{{ITEM.VALUE}.fmtnum(2)} |
24.34 |
24.3413523 |
{{ITEM.VALUE}.fmtnum(0)} |
24 |
12:36:01 |
{{TIME}.fmttime(%B)} |
October |
12:36:01 |
{{TIME}.fmttime(%d %B,-1M/M)} |
1 September |
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* (invalid regular expression) |
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)} (invalid regular expression) |
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)}"} (invalid regular expression) |
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)}\"}") (invalid regular expression) |
已解析的文本/日志监控项的 {ITEM.VALUE} 和 {ITEM.LASTVALUE} 宏的长值在某些前端位置被截断为 20 个字符。 要查看这些宏的完整值,您可以使用宏函数,例如:
{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}
另请参阅:{ITEM.VALUE} 和 {ITEM.LASTVALUE} 宏详细信息。