正则表达式
概述
Zabbix 支持 Perl 兼容正则表达式(PCRE、PCRE2)。
在 Zabbix 中使用正则表达式有两种方式:
- 手动输入正则表达式
- 使用在 Zabbix 中创建的全局正则表达式
正则表达式
您可以在支持的位置手动输入正则表达式。
请注意,表达式不能以 @ 开头,因为该符号在 Zabbix 中用于引用全局正则表达式。
使用正则表达式时,可能会耗尽堆栈内存。 有关更多信息,请参见 PCRE PERFORMANCE。
请注意,在多行匹配中,^ 和 $ 锚点分别匹配每一行的开头/结尾,而不是整个字符串的开头/结尾。
另请参见各种上下文中关于正确转义的示例。
全局正则表达式
在 Zabbix 前端中,有一个高级编辑器用于创建和测试复杂的正则表达式。
通过这种方式创建正则表达式后,可以在前端的多个位置通过其名称来引用,名称前加 @,例如 @mycustomregexp。
要创建全局正则表达式:
- 转到 Administration > General。
- 从下拉菜单中选择 Regular expressions。
- 单击 New regular expression。
Expressions 选项卡可用于设置正则表达式名称并添加子表达式。

所有必填输入字段都用红色星号标记。
| Parameter | Description | |
|---|---|---|
| Name | 设置正则表达式名称。允许使用任何 Unicode 字符。 | |
| Expressions | 在 Expressions 区块中单击 Add 以添加新的子表达式。 | |
| Expression type | 选择表达式类型: Character string included - 匹配子字符串 Any character string included - 匹配分隔列表中的任意子字符串。分隔列表包括逗号 (,)、点号 (.) 或斜杠 (/)。 Character string not included - 匹配除该子字符串之外的任何字符串 Result is TRUE - 匹配正则表达式 Result is FALSE - 不匹配正则表达式 |
|
| Expression | 输入子字符串/正则表达式。 | |
| Delimiter | 用于在正则表达式中分隔文本字符串的逗号 (,)、点号 (.) 或斜杠 (/)。仅当选择 "Any character string included" 表达式类型时,此参数才可用。 | |
| Case sensitive | 用于指定正则表达式是否区分字母大小写的复选框。 | |
表达式中的斜杠 (/) 会按字面含义处理,而不是作为分隔符。 这样就可以无错误地保存包含斜杠的表达式。
Zabbix 中的自定义正则表达式名称可以包含逗号、空格等字符。
在某些情况下,这可能会导致引用时产生歧义(例如,监控项键参数中包含逗号),此时可以将整个引用放在引号中,例如:"\@My custom regexp for purpose1, purpose2"。
在其他位置(例如 LLD 规则属性中),正则表达式名称不得加引号。
在 Test 选项卡中,可以通过提供测试字符串来测试正则表达式及其子表达式。

结果会显示每个子表达式的状态以及自定义表达式的总状态。
自定义表达式的总状态定义为 Combined result。 如果定义了多个子表达式,Zabbix 会使用 AND 逻辑运算符来计算 Combined result。 这意味着,只要至少有一个 Result 为 False,Combined result 的状态也会为 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$

选择的 Expression type:"Result is 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

所选表达式类型:"结果为 TRUE"。 会匹配特定行之后的字符。
不能在行内指定 g 修饰符。 可用修饰符列表请参见 pcresyntax man page。 有关 PCRE 语法的更多信息,请参阅 PCRE HTML documentation。
按位置划分的正则表达式支持
| 位置 | 正则表达式 | 全局正则表达式 | 多行匹配 | 备注 | |
|---|---|---|---|---|---|
| Agent items | |||||
| 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 参数 |
|
| Item value preprocessing | Yes | No | No | pattern 参数 |
|
| Functions for triggers/calculated items | |||||
| count() | Yes | Yes | Yes | 当 operator 参数为 regexp 或 iregexp 时使用 pattern 参数 |
|
| countunique() | Yes | Yes | |||
| find() | Yes | Yes | |||
| logeventid() | Yes | Yes | No | pattern 参数 |
|
| logsource() | |||||
| Low-level discovery | |||||
| Filters | Yes | Yes | No | Regular expression 字段 | |
| Overrides | Yes | No | 在 Operation 条件的 matches、does not match 选项中 | ||
| Action conditions | Yes | No | No | 在 Host name 和 Host metadata 自动注册条件的 matches、does not match 选项中 | |
| Scripts | Yes | Yes | No | Input validation rule 字段 | |
| Web monitoring | Yes | No | Yes | 带有 regex: 前缀的 Variables Required string 字段 |
|
| User macro context | Yes | No | No | 带有 regex: 前缀的宏上下文 | |
| Macro functions | |||||
| regsub() | Yes | No | No | pattern 参数 |
|
| iregsub() | |||||
| Link indicators in maps | Yes | No | No | Pattern 字段(用于文本项) | |
| Icon mapping | Yes | Yes | No | Expression 字段 | |
| Value mapping | Yes | No | No | 当映射类型为 regexp 时使用 Value 字段 |
|
| Agent configuration parameters | |||||
| AllowKeyRegexp | Yes | No | No | Pattern | |
| DenyKeyRegexp | |||||