宏函数提供了自定义 macro 值的能力。
有时宏可能解析为一个不太便于使用的值。该值可能过长,或包含您希望提取的特定子字符串。这正是宏函数可以发挥作用的地方。
宏函数的语法为:
其中:
在以下情况下必须对参数加引号:
例如:
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
每个宏仅支持单个函数;不支持链式多重宏函数。
当宏函数用于其他上下文(函数、监控项 键、另一个宏等)时,请参阅 escaping examples。
可选函数参数由< >表示。
函数 | |||
---|---|---|---|
描述 | 参数 | 支持范围 | |
fmtnum (digits) | |||
控制小数点后显示位数的数字格式化功能。 | digits - 小数点后的位数。有效范围:0-20(自Zabbix 6.0.21起)。不会产生尾随零。 | {ITEM.VALUE} {ITEM.LASTVALUE} 表达式宏 |
|
fmttime (format,<time_shift>) | |||
时间格式化功能。 | format - 必填的格式string,兼容strftime函数格式 time_shift - 应用于格式化前的时间偏移量;应以 -<N><time_unit> 或+<N><time_unit> 开头,其中N - 要加减的时间单位数量; time_unit - h(小时)、d(天)、w(周)、M(月)或y(年)。 自Zabbix 5.4起,time_shift参数支持多步时间操作,可包含 /<time_unit> 用于偏移到时间单位的起始点(/d - 午夜,/w - 周的第一天(周一),/M - 月的第一天等)。示例:-1w - 精确回溯7天;-1w/w - 上周的周一;-1w/w+1d - 上周的周二。注意时间操作从左到右计算,无优先级。例如, -1M/d+1h/w 将被解析为((-1M/d)+1h)/w 。 |
{TIME} | |
iregsub (pattern,output) | |||
通过正则表达式匹配提取子字符串(不区分大小写)。 | pattern - 要匹配的正则表达式 output - 输出选项。支持\1 - \9占位符捕获分组。\0返回匹配的文本。 |
{ITEM.VALUE} {ITEM.LASTVALUE} Low-level discovery macros(低级发现规则过滤器除外) |
|
regsub (pattern,output) | |||
通过正则表达式匹配提取子字符串(区分大小写)。 | pattern - 要匹配的正则表达式 output - 输出选项。支持\1 - \9占位符捕获分组。\0返回匹配的文本。 |
{ITEM.VALUE} {ITEM.LASTVALUE} Low-level discovery macros(低级发现规则过滤器除外) |
如果在supported location中使用函数,但应用于不支持宏函数的宏,则该宏将评估为'未知'。
如果pattern不是正确的正则表达式,则宏将评估为'未知'(低级发现宏除外,在这种情况下函数将被忽略,宏将保持未展开状态)
以下示例展示了如何使用宏函数自定义接收值的宏值:
接收值 | 宏 | 输出 |
---|---|---|
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* (无效正则表达式) |
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)}\"}") (无效正则表达式) |
在某些前端位置,解析后的{ITEM.VALUE}和{ITEM.LASTVALUE}宏的文本/日志监控项长值会被截断为20个字符。 要查看这些宏的完整值,可以使用宏函数,例如:
{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}
另请参阅: {ITEM.VALUE}和{ITEM.LASTVALUE}macro details。