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$

所选 表达式类型: "结果为 FALSE"。 不匹配名称,包含字符串 "TESTDATABASE"。
带有内联正则表达式修饰符的示例
使用以下正则表达式,包括内联修饰符 (?i),以匹配字符 "error":
(?i)error

所选 Expression type:"Result is TRUE"。 字符 "error" 被匹配。
带有内联正则表达式修饰符的另一个示例
使用以下正则表达式,其中包含多个内联修饰符,用于匹配特定行之后的字符:
(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow . match newline characters

所选表达式类型:"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 字段 |
|