宏函数提供了定制 宏 值的能力(例如,缩短或提取特定子字符串),使它们更易于处理。
宏函数的语法是:
其中
例如:
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
宏函数支持以下内容:
宏函数可以在支持上述宏的所有位置使用。 除非明确指出仅期望宏(例如,在配置 主机宏 或低级别发现规则 过滤器 时)。
另请参阅:已知问题
每个宏只支持单个函数;不支持宏函数的链式使用。
请参阅 转义示例,了解宏函数在其他上下文中使用时的情况(函数、监控项键、另一个宏等)。
以下是函数列表,未提供额外信息。点击函数以查看完整详情。
函数 | 描述 |
---|---|
btoa | 将宏值编码为Base64格式。 |
fmtnum | 数字格式化,用于控制小数点后打印的数字位数。 |
fmttime | 时间格式化。 |
htmldecode | 从HTML编码解码宏值。 |
htmlencode | 将宏值编码为HTML编码。 |
iregsub | 通过正则表达式匹配(不区分大小写)提取子字符串。 |
lowercase | 将宏值字符转换为小写。 |
regrepl | 在宏值中替换字符/子字符串。 |
regsub | 通过正则表达式匹配(区分大小写)提取子字符串。 |
tr | 宏值字符的转写。 |
uppercase | 将宏值字符转换为大写。 |
urldecode | 从URL编码解码宏值。 |
urlencode | 将宏值编码为URL编码。 |
可选的函数参数由 < > 表示。
将宏值编码为Base64编码。Base64编码是一种将二进制数据表示为文本的方法,对于通过基于文本的协议存储和安全传输二进制内容非常有用。
示例:
此函数自Zabbix 7.0.4版本起得到支持。
将数字格式化以控制小数点后打印的数字位数。
参数:
示例:
{{ITEM.VALUE}.fmtnum(2)} - 从接收到的值 "24.3483523" 返回 "24.35"
{{ITEM.VALUE}.fmtnum(0)} - 从接收到的值 "24.3483523" 返回 "24"
##### fmttime(format,<time_shift>) {#fmttime}
时间格式化。
请注意,此函数可以与解析为以下时间格式之一的值的宏一起使用:
hh:mm:ss
yyyy-mm-ddThh:mm:ss[tz]
(ISO8601标准)参数:
strftime
函数格式兼容;-<N><time_unit>
或+<N><time_unit>
开头,其中:N
- 要添加或减去的时间单位数量;time_unit
- h(小时),d(天),w(周),M(月)或y(年)。注释:
time_shift
参数支持多步时间操作,并可包含/<time_unit>
用于将时间移至时间单位的开始 (/d
- 午夜,/w
- 一周的第一天(星期一),/M
- 一个月的第一天,等等)。 示例:-1w
- 恰好7天前;-1w/w
- 上周的星期一;-1w/w+1d
- 上周的星期二。-1M/d+1h/w
将被解析为((-1M/d)+1h)/w
。示例:
{{TIME}.fmttime(%B)} - 从接收到的值"12:36:01"返回"十月"
{{TIME}.fmttime(%d %B,-1M/M)} - 从接收到的值"12:36:01"返回"1 九月"
##### htmldecode {#htmldecode}
从HTML编码中解码宏值。此函数自Zabbix 7.0.4版本起得到支持。
以下字符被支持:
Value | Decoded value |
---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
' |
' |
示例:
将宏值编码为HTML编码。此功能自Zabbix 7.0.4版本起得到支持。
以下字符被支持:
值 | 编码后的值 |
---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
示例:
通过正则表达式匹配进行子字符串提取(不区分大小写)。
参数:
注释:
示例:
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - 如果接收到 "fail","error","fault",或 "problem" 子字符串(不区分大小写),将解析为 "ERROR";如果没有匹配则返回空
将所有宏值字符转换为小写。适用于单字节字符集(如ASCII),不支持UTF-8。此函数自Zabbix 7.0.4版本起得到支持。
示例:
在宏值中替换字符/子字符串。注意,此函数仅在使用libpcre2库时受支持。如果Zabbix server/proxy使用libpcre
编译,此函数将返回UNKNOWN。此函数自Zabbix 7.0.4起受支持。
参数:
注释:
示例:
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - 将"oldParam"替换为"newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - 所有非字母字符将用反斜杠转义
{$THRESHOLD:"{{#FSNAME}.regrepl("\\\\$","")"} - 将移除尾部的反斜杠(例如,将"C:\"替换为"C:")
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - 将在item值中替换多个部分
通过正则表达式匹配进行子字符串提取(区分大小写)。
参数:
注释:
示例:
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - 如果接收到类似 "123 Log line" 的值,将解析为 "Problem ID: 123"
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - 如果接收到 "fail"、"error"、"fault" 或 "problem" 子字符串(区分大小写),将解析为 "ERROR";如果没有匹配,则为空
参见 更多示例。
宏值字符的转写。此功能自Zabbix 7.0.4版本起得到支持。
示例:
{{ITEM.VALUE}.tr(abc, xyz)} - 将所有"a"替换为"x","b"替换为"y","c"替换为"z"
{{ITEM.VALUE}.tr(abc, xyzq)} - 将所有"a"替换为"x","b"替换为"y","c"替换为"z"("q"被忽略)
{{ITEM.VALUE}.tr(abcde, xyz)} - 将所有"a"替换为"x","b"替换为"y","c"替换为"z","d"替换为"z","e"替换为"z"(即xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - 将所有反斜杠替换为正斜杠,单引号替换为双引号
{{ITEM.VALUE}.tr(A-Z,a-z)} - 将所有字母转换为小写
{{ITEM.VALUE}.tr(0-9a-z,*)} - 将所有数字和小写字母替换为"*"
{{ITEM.VALUE}.tr(0-9,ab)} - 将所有0替换为"a",将所有1, 2, 3, 4, 5, 6, 7, 8, 和 9替换为"b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - 将所有数字,"abc"字符,以及A-L范围替换为"*"
{{ITEM.VALUE}.tr("\n","*")} - 将所有行尾替换为"*"
{{ITEM.VALUE}.tr("e", "\n")} - 将所有"e"替换为行尾
要包含字面字符:
支持的反斜杠转义序列:
\\\\ => \\ - 双反斜杠转换为单反斜杠
\\a => \a - 警报
\\b => \b - 退格
\\f => \f - 换页
\\n => \n - 换行
\\r => \r - 回车
\\t => \t - 水平制表符
\\v => \v - 垂直制表符
将所有宏值字符转换为大写。适用于单字节字符集(如ASCII),不支持UTF-8。此函数自Zabbix 7.0.4版本起得到支持。
示例:
{{ITEM.VALUE}.uppercase()} - 将把类似"Zabbix Server"的值转换为"ZABBIX SERVER"(大写)
##### urldecode {#urldecode}
将宏值从URL编码解码。此功能自Zabbix 7.0.4版本起得到支持。
示例:
将宏值编码为URL编码。此功能自Zabbix 7.0.4版本起得到支持。
示例:
下表展示了使用宏函数的更多示例。
宏函数 | 接收的值 | 输出 |
---|---|---|
{{ITEM.VALUE}.regsub(^[0-9]+, Problem)} |
123Log line |
Problem |
{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} |
123 Log line |
Problem |
{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} |
Log line |
Problem ID: |
{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} |
MySQL crashed errno 123 |
Problem ID: MySQL\_123 |
{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} |
123 Log line |
UNKNOWN (无效的正则表达式) |
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} |
customername_1 |
customername |
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} |
customername_1 |
1 |
{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} |
customername_1 |
{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (无效的正则表达式) |
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} |
customername_1 |
{$MACRO:"customername"} |
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} |
customername_1 |
{$MACRO:"1"} |
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} |
customername_1 |
{$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"} (无效的正则表达式) |
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}" |
customername_1 |
"{$MACRO:\"customername\"}" |
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}" |
customername_1 |
"{$MACRO:\"1\"}" |
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" |
customername_1 |
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" (无效的正则表达式) |
文本/日志监控项的已解析{ITEM.VALUE}和{ITEM.LASTVALUE}宏的长值在前端某些位置被截断为20个字符。 要查看这些宏的完整值,您可以使用宏函数,例如:
另请参阅:{ITEM.VALUE}和{ITEM.LASTVALUE} 宏详情。