1 宏函数

宏函数提供自定义 macro 值的功能(例如,缩短或提取特定的子字符串)使它们更容易处理。

所有在这里列出的函数都支持所有类型的宏:

这些宏函数可以在支持上述宏的所有位置使用。 除非明确指定只能使用宏(例如,在配置 主机宏 或低级别自动发现规则 过滤器时),否则适用此规则。

这些函数列出时未提供额外信息。点击函数以查看完整详情。

函数描述
fmtnum数字格式化,用于控制小数点后打印的位数。
fmttime时间格式化。
iregsub使用不区分大小写的正则表达式匹配提取子字符串。
regsub使用区分大小写的正则表达式匹配提取子字符串。

函数详情

宏函数的语法如下:

  1. {macro.func(params)}
  • macro - 要定义的宏,例如 {ITEM.VALUE} 或者 {#LLDMACRO};
  • func - 要应用的函数;
  • params - 以逗号分隔的函数参数列表, 如果满足以下情况必须用引号引起来:
    • 参数以空格或双引号开头;
    • 包含闭合括号 “``“ 或逗号。

可选的函数参数用 < > 表示。

fmtnum(digits)

用于控制小数点后打印的数字位数。

参数:

  • digits - t小数点后的位数。有效范围为:0-20。不会产生最后一位是零。

示例:

宏函数输入值输出值
{{ITEM.VALUE}.fmtnum(2)}24.341352324.34
{{ITEM.VALUE}.fmtnum(0)}24.341352324

fmttime(format,<time_shift>)

时间格式化函数。
注意,此函数可用于解析以下时间格式之一的宏:

  • hh:mm:ss
  • yyyy-mm-ddThh:mm:ss[tz] (ISO8601 标准)
  • unix 时间戳

参数:

  • format - 必需的格式字符串, 与 strftime 函数格式兼容;

  • time_shift (可选)- 在格式化之前应用于时间的时间偏移量;应以 -<N><time_unit>+<N><time_unit>开头,其中:

    • N - 要添加或减去的时间单位数量;
    • time_unit - h (小时), d (天), w (周), M (月) or 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:01October
{{TIME}.fmttime(%d %B,-1M/M)}12:36:011 September

iregsub(pattern,output)

正则表达式匹配提取子字符串(不区分大小写)。

参数:

  • pattern - 要匹配的正则表达式;
  • output - 输出选项。支持 \1 - \9 占位符用于捕获组。 使用\0 返回匹配的文本。

注释:

  • 如果函数中的 pattern 是一个不正确的正则表达式,则宏的计算结果将为 ‘UNKNOWN’ (除了低级别发现宏,此时函数将被忽略,宏保持未解析状态)。

regsub(pattern,output)

通过正则表达式匹配进行子字符串提取(区分大小写)。

参数:

  • pattern - 要匹配的正则表达式;
  • output - 输出选项。支持使用\1 - \9 占位符来捕获分组。使用 \0 返回匹配的文本。

注释:

  • 如果函数的 pattern 参数是不正确的正则表达式,则宏将评估为 ‘UNKNOWN’ (除了低级别发现宏,在这种情况下,函数将被忽略,宏仍将保持未解析状态)。

示例:

宏函数输入值输出值
{{ITEM.VALUE}.regsub(^[0-9]+, Problem)}123Log lineProblem
{{ITEM.VALUE}.regsub(“^([0-9]+)”, “Problem”)}123 Log lineProblem
{{ITEM.VALUE}.regsub(“^([0-9]+)”, Problem ID: \1)}123 Log lineProblem ID: 123
{{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 lineUNKNOWN (invalid regular expression)
{{#IFALIAS}.regsub(“(.*)([0-9]+)”, \1)}customername1customername
{{#IFALIAS}.regsub(“(.*)([0-9]+)”, \2)}customername11
{{#IFALIAS}.regsub(“(.*)([0-9]+”, \1)}customername1{{#IFALIAS}.regsub(“(.*)([0-9]+”, \1)} (invalid regular expression)
{$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)}”}customername1{$MACRO:”{{#M}.regsub(\”(.*)([0-9]+\”, \1)}”} (invalid regular expression)
“{$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)}\”}”customername1“{$MACRO:\”{{#IFALIAS}.regsub(\“(.*)([0-9]+\“, \1)}\”}”) (invalid regular expression)