12 正则表达式

概述

Zabbix 支持 Perl 兼容正则表达式(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 中的自定义正则表达式名称可以包含逗号、空格等字符。 在某些情况下,这可能会在引用时导致误解(例如,item key 参数中的逗号),此时可以将整个引用放在引号中,如:"\@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 man page。 有关 PCRE 语法的更多信息,请参阅 PCRE HTML documentation

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

位置 正则表达式 全局正则表达式 多行匹配 备注
Agent items
eventlog[] Yes Yes Yes regexpseveritysourceeventid 参数
eventlog.count[] regexpseveritysourceeventid 参数
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 上的 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[] 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 参数为 regexpiregexp 时使用 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 条件的 matchesdoes not match 选项中
Action conditions Yes No No Host nameHost metadata 自动注册条件的 matchesdoes 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()
Icon mapping Yes Yes No Expression 字段
Value mapping Yes No No 如果映射类型为 regexp,则使用 Value 字段