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$

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[] 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()
低级别发现
过滤器 Regular expression 字段
覆盖 Operation 条件的 matchesdoes not match 选项中
动作条件 Host nameHost metadata 自动注册条件的 matchesdoes not match 选项中
脚本 Input validation rule 字段
Web 监测 带有 regex: 前缀的 Variables
Required string 字段
用户宏上下文 在带有 regex: 前缀的宏上下文中
宏函数
regsub() pattern 参数
iregsub()
地图中的链接指示器 Pattern 字段(用于文本监控项)
图标映射 Expression 字段
值映射 如果映射类型为 regexp,则为 Value 字段