10 正则表达式

概述

Zabbix支持 Perl兼容正则表达式(PCRE, PCRE2)。

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

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

正则表达式

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

使用正则表达式时,可能会导致栈空间耗尽。更多 信息请参见 pcrestack 手册页

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

另请参见不同上下文中正确转义的示例。

全局正则表达式

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 在其默认数据集中附带了几个全局正则表达式。

Name Expression Matches
用于发现的文件系统 ^(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

选择的 Expression type(表达式类型):“Result is 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 手册页。有关 PCRE 语法的更多信息,请参阅 PCRE HTML文档

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

位置 正则表达式 全局正则表达式 多行匹配 注释
Agent 监控项
eventlog[] regexpseveritysourceeventid 参数
eventlog.count[] regexpseveritysourceeventid 参数
log[] regexp 参数
log.count[]
logrt[] 是/否 regexp 参数同时支持两者,file_regexp 参数仅支持非全局表达式
logrt.count[]
proc.cpu.util[] cmdline 参数
proc.get[]
proc.mem[]
proc.num[]
sensor[] Linux 2.4 中的 devicesensor 参数
system.hw.macaddr[] interface 参数
system.sw.packages[] regexp 参数
system.sw.packages.get[] regexp 参数
vfs.dir.count[] regex_inclregex_exclregex_excl_dir 参数
vfs.dir.get[] regex_inclregex_exclregex_excl_dir 参数
vfs.dir.size[] regex_inclregex_exclregex_excl_dir 参数
vfs.file.regexp[] regexp 参数
vfs.file.regmatch[]
web.page.regexp[]
SNMP traps
snmptrap[] regexp 参数
监控项值预处理 pattern 参数
用于触发器/计算型监控项的函数
count() operator 参数为 regexpiregexp 时的 pattern 参数
countunique()
find()
logeventid() pattern 参数
logsource()
低级别发现
过滤器 正则表达式 字段
覆盖 操作 条件的 匹配不匹配 选项中
动作条件 主机名主机元数据 自动注册条件的 匹配不匹配 选项中
脚本 输入验证规则 字段
Web 监测 带有 regex: 前缀的 变量
必需字符串 字段
用户宏上下文 在带有 regex: 前缀的宏上下文中
宏函数
regsub() pattern 参数
iregsub()
地图中的链接指示器 模式 字段(用于文本监控项)
图标映射 表达式 字段
值映射 如果映射类型为 regexp,则为 字段