12. 正则表达式

    概述

    在Zabbix中有两种使用正则表达式的方法:

    • 使用在Zabbix中创建的全局正则表达式

    正则表达式

    可以在支持的位置手动输入正则表达式。请注意,表达式可能不以@开头,因为该符号在Zabbix中用于引用全局正则表达式。

    全局正则表达式

    在Zabbix前端,有一个高级的编辑器用于创建和测试复杂的正则表达式。

    一旦以这种方式创建了正则表达式,它就可以在前端的几个地方使用,方法是加个@前缀来引用它的名称,例如,@mycustomregexp

    要创建全局正则表达式:

    • 切换到: 管理(Administration) → 一般(General)

    • 从右上角的下拉列表中选择 正则表达式(Regular expressions)

    • 单击 新的正则表达式(New regular expression)

    正则表达式(Regular expressions)选项卡允许设置正则表达式名称并添加子表达式。

    所有必填输入字段都标有红色星号。

    从Zabbix 2.4.0开始,表达式中的正斜杠(/)按字面意思处理,而不是分隔符。这样就可以保存包含斜杠的表达式,而以前会产生错误。

    Zabbix里自定义的表达式名称可以包含逗号,空格等。在引用时可能导致误解的情况下(例如,监控项键的参数中的逗号),整个引用可以放在引号中,如下所示: “ @My custom regexp for purpose1, purpose2”
    不能在其他位置引用正则表达式名称(例如,在LLD规则属性中)。

    举例

    在LLD中使用以下正则表达式来发现不考虑具有特定名称的数据库的数据库:

    选择 表达式类型(Expression type): “结果为假(Result is FALSE)”。不匹配名称,包含字符串“TESTDATABASE”。

    内联正则表达式修饰符的示例

    使用如下带有内联修饰符(?i)的正则表达式匹配“error”字符:

    12. 正则表达式 - 图1

    选择 表达式类型(Expression type): “结果为真(Result is TRUE)”。“error”字符被匹配到。

    内联正则表达式修饰符的另一个示例

    使用以下正则表达式(包括多个内联修饰符)来匹配特定行之后的字符:

    (?x) 打开自由间隔模式。

    (?i) 使正则表达式不区分大小写。

    (?-i) 减号后的所有模式修饰符都将被关闭。也就是说,只有everything是不区分大小写的。

    (?⇐ 在正则表达式里,我们称之为Positive Lookbehind。它告诉正则表达式引擎在字符串中暂时向后退一步,以检查look behind内的文本是否可以在那里匹配。

    所以,上面这个例子告诉我们,匹配match everything after this line\n后面的字符串,且只有everything不区分大小写,而且开启了(?sx)模式。

    选择表达式类型: “结果为真(Result is TRUE)”。匹配特定行后的字符。

    g修饰符不能在行中指定。可用修饰符列表可以在 pcresyntax man page 里找到。如果想了解更多的PCRE正则表达式语法,请参考 。

    更复杂的例子

    自定义正则表达式可能包含多个子表达式,可以通过提供测试字符串在Test选项卡中进行测试。

    12. 正则表达式 - 图2

    结果显示每个子表达式的状态和整个自定义表达式的状态。

    总自定义表达式状态定义为 合并的结果(Combined result)。如果定义了几个子表达式,Zabbix使用AND逻辑运算符来计算 合并的结果(Combined result)。这意味着如果只要有一个结果为False,合并的结果(Combined result) 也为False状态。

    全局正则表达式的说明

    支持正则表达式的位置