10 正则表达式
概述
Zabbix 支持 Perl Compatible Regular Expressions(PCRE、PCRE2)。
在 Zabbix 中使用正则表达式有两种方式:
- 手动输入正则表达式
- 使用在 Zabbix 中创建的全局正则表达式
正则表达式
您可以在受支持的位置手动输入正则表达式。 请注意,表达式不能以 @ 开头,因为该符号在 Zabbix 中用于引用全局正则表达式。
使用正则表达式时,可能会出现栈空间耗尽。 有关更多信息,请参见 pcrestack man page。
请注意,在多行匹配中,^ 和 $ 锚点分别匹配每一行的开头/结尾,而不是整个字符串的开头/结尾。
另请参见各种上下文中关于正确转义的示例。
全局正则表达式
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$

所选 表达式类型: "结果为 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[] | 是 | 是 | 是 | regexp、severity、source、eventid 参数 |
|
| eventlog.count[] | regexp、severity、source、eventid 参数 |
||||
| log[] | regexp 参数 |
||||
| log.count[] | |||||
| logrt[] | 是/否 | regexp 参数同时支持两者,file_regexp 参数仅支持非全局表达式 |
|||
| logrt.count[] | |||||
| proc.cpu.util[] | 否 | 否 | 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[] | 是 | regexp 参数 |
|||
| vfs.file.regmatch[] | |||||
| web.page.regexp[] | |||||
| SNMP traps | |||||
| snmptrap[] | 是 | 是 | 否 | regexp 参数 |
|
| 监控项值预处理 | 是 | 否 | 否 | pattern 参数 |
|
| 触发器/计算型监控项函数 | |||||
| count() | 是 | 是 | 是 | 当 operator 参数为 regexp 或 iregexp 时的 pattern 参数 |
|
| countunique() | 是 | 是 | |||
| find() | 是 | 是 | |||
| logeventid() | 是 | 是 | 否 | pattern 参数 |
|
| logsource() | |||||
| 低级别发现 | |||||
| 过滤器 | 是 | 是 | 否 | Regular expression 字段 | |
| 覆盖 | 是 | 否 | 在 Operation 条件的 matches、does not match 选项中 | ||
| 动作条件 | 是 | 否 | 否 | 在 Host name 和 Host metadata 自动注册条件的 matches、does not match 选项中 | |
| 脚本 | 是 | 是 | 否 | Input validation rule 字段 | |
| Web 监测 | 是 | 否 | 是 | 带有 regex: 前缀的 Variables Required string 字段 |
|
| 用户宏上下文 | 是 | 否 | 否 | 在带有 regex: 前缀的宏上下文中 | |
| 宏函数 | |||||
| regsub() | 是 | 否 | 否 | pattern 参数 |
|
| iregsub() | |||||
| 地图中的链接指示器 | 是 | 否 | 否 | Pattern 字段(用于文本监控项) | |
| 图标映射 | 是 | 是 | 否 | Expression 字段 | |
| 值映射 | 是 | 否 | 否 | 如果映射类型为 regexp,则为 Value 字段 |
|