12 正则表达式

概述

Zabbix 支持 Perl Compatible Regular Expressions(PCRE、PCRE2)。

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

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

正则表达式

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

使用正则表达式时,可能会耗尽栈内存。 有关更多信息,请参见 PCRE PERFORMANCE。

请注意,在多行匹配中,^ 和 $ 锚点分别匹配每一行的开头/结尾,而不是整个字符串的开头/结尾。

另请参见有关各种上下文中正确转义的示例。

全局正则表达式

Zabbix 前端提供了用于创建和测试复杂正则表达式的高级编辑器。

通过这种方式创建正则表达式后,可以在前端的多个位置通过引用其名称来使用它,名称前需加上 @,例如 @mycustomregexp。

要创建全局正则表达式:

  • 转到:管理 > 常规
  • 从下拉列表中选择正则表达式
  • 单击新建正则表达式

表达式选项卡允许您设置正则表达式名称并添加子表达式。

所有必填输入字段均以红色星号标记。

参数 描述
名称 设置正则表达式名称。允许使用任何 Unicode 字符。
表达式 在“表达式”区域中单击添加以添加新的子表达式。
表达式类型 选择表达式类型:
包含字符串 - 匹配子字符串
包含任意字符串 - 从分隔列表中匹配任意子字符串。分隔列表包括逗号 (,)、句点 (.) 或正斜杠 (/)。
不包含字符串 - 匹配除该子字符串之外的任意字符串
结果为 TRUE - 匹配正则表达式
结果为 FALSE - 不匹配正则表达式
表达式 输入子字符串/正则表达式。
分隔符 用于分隔正则表达式中文本字符串的逗号 (,)、句点 (.) 或正斜杠 (/)。仅在选择“包含任意字符串”表达式类型时,此参数才处于启用状态。
区分大小写 用于指定正则表达式是否区分字母大小写的复选框。

表达式中的正斜杠 (/) 将按字面意义处理,而不是作为分隔符。 这样可以保存包含斜杠的表达式,而不会产生错误。

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

在测试选项卡中,可以通过提供测试字符串来测试正则表达式及其子表达式。

结果显示每个子表达式的状态以及自定义表达式的总状态。

自定义表达式的总状态定义为组合结果。 如果定义了多个子表达式,Zabbix 将使用 AND 逻辑运算符计算组合结果。 这意味着,只要至少有一个结果为 False,组合结果也将为 False 状态。

默认全局正则表达式

Zabbix 在其默认数据集中提供了几个全局正则表达式。

名称 表达式 匹配项
用于发现的文件系统 ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$ "btrfs" 或 "ext2" 或 "ext3" 或 "ext4" 或 "jfs" 或 "reiser" 或 "xfs" 或 "ffs" 或 "ufs" 或 "jfs" 或 "jfs2" 或 "vxfs" 或 "hfs" 或 "refs" 或 "apfs" 或 "ntfs" 或 "fat32" 或 "zfs"
用于发现的网络接口 ^Software Loopback Interface 以 "Software Loopback Interface" 开头的字符串。
^lo$ "lo"
^(In)?[Ll]oop[Bb]ack[0-9._]*$ 可选以 "In" 开头,然后是 "L" 或 "l",接着是 "oop",然后是 "B" 或 "b",再接 "ack",其后可选跟任意数量的数字、点或下划线的字符串。
^NULL[0-9.]*$ 以 "NULL" 开头,后面可选跟任意数量的数字或点的字符串。
^[Ll]o[0-9.]*$ 以 "Lo" 或 "lo" 开头,后面可选跟任意数量的数字或点的字符串。
^[Ss]ystem$ "System" 或 "system"
^Nu[0-9.]*$ 以 "Nu" 开头,后面可选跟任意数量的数字或点的字符串。
用于 SNMP 发现的存储设备 ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" 或 "Virtual memory" 或 "Memory buffers" 或 "Cached memory" 或 "Swap space"
用于发现的 Windows 服务名称 ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ "MMCSS" 或 "gupdate" 或 "SysmonLog" 或类似 "clr_optimization_v2.0.50727_32" 和 "clr_optimization_v4.0.30319_32" 的字符串,其中点号可以替换为除换行符之外的任意字符。
用于发现的 Windows 服务启动状态 ^(automatic|automatic delayed)$ "automatic" 或 "automatic delayed"

示例

示例 1

在低级别发现中使用以下表达式来发现数据库,但排除具有特定名称的数据库:

^TESTDATABASE$

regexp\_expr\_2.png

所选 表达式类型: "结果为 FALSE"。 不匹配名称,包含字符串 "TESTDATABASE"。

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

使用以下正则表达式,包括内联修饰符 (?i),以匹配字符 "error":

(?i)error

regexp\_expr\_3a.png

所选 Expression type:"Result is TRUE"。 字符 "error" 被匹配。

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

使用以下正则表达式,其中包含多个内联修饰符,用于匹配特定行之后的字符:

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow . match newline characters

regexp\_expr\_4\_new.png

所选表达式类型:"Result is TRUE"。 匹配特定行之后的字符。

不能在行内指定 g 修饰符。 可用修饰符列表请参见 pcresyntax man page。 有关 PCRE 语法的更多信息,请参阅 PCRE HTML documentation。

按位置划分的正则表达式支持

位置 正则表达式 全局正则表达式 多行匹配 备注
Agent 监控项
eventlog[] Yes Yes Yes regexp、severity、source、eventid 参数
eventlog.count[] regexp、severity、source、eventid 参数
log[] regexp 参数
log.count[]
logrt[] Yes/No regexp 参数同时支持两者,file_regexp 参数仅支持非全局表达式
logrt.count[]
proc.cpu.util[] No No cmdline 参数
proc.get[]
proc.mem[]
proc.num[]
sensor[] Linux 2.4 上的 device 和 sensor 参数
system.hw.macaddr[] interface 参数
system.sw.packages[] regexp 参数
system.sw.packages.get[] regexp 参数
vfs.dir.count[] regex_incl、regex_excl、regex_excl_dir 参数
vfs.dir.get[] regex_incl、regex_excl、regex_excl_dir 参数
vfs.dir.size[] regex_incl、regex_excl、regex_excl_dir 参数
vfs.file.regexp[] Yes regexp 参数
vfs.file.regmatch[]
web.page.regexp[]
SNMP traps
snmptrap[] Yes Yes No regexp 参数
监控项值预处理 Yes No No pattern 参数
触发器/计算监控项函数
count() Yes Yes Yes 当 operator 参数为 regexp 或 iregexp 时使用 pattern 参数
countunique() Yes Yes
find() Yes Yes
logeventid() Yes Yes No pattern 参数
logsource()
低级别发现
Filters Yes Yes No Regular expression 字段
Overrides Yes No 在 Operation 条件的 matches、does not match 选项中
动作条件 Yes No No 在 Host name 和 Host metadata 自动注册条件的 matches、does not match 选项中
脚本 Yes Yes No Input validation rule 字段
Web 监控 Yes No Yes 带有 regex: 前缀的 Variables
Required string 字段
用户宏上下文 Yes No No 带有 regex: 前缀的宏上下文
宏函数
regsub() Yes No No pattern 参数
iregsub()
地图中的链接指示器 Yes No No Pattern 字段(用于文本项)
图标映射 Yes Yes No Expression 字段
值映射 Yes No No 如果映射类型为 regexp,则使用 Value 字段