12 正则表达式

概述

Zabbix 支持 Perl Compatible Regular Expressions(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$

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[] 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 参数
监控项值预处理 Yes No No pattern 参数
触发器/计算监控项函数
count() Yes Yes Yes 当 operator 参数为 regexp 或 iregexp 时使用 pattern 参数
countunique() Yes Yes
find() Yes Yes
logeventid() Yes Yes No pattern 参数
logsource()
低级别发现
Filters Yes Yes No Regular expression 字段
Overrides Yes No 在 Operation 条件的 matches、does not match 选项中
动作条件 Yes No No 在 Host name 和 Host metadata 自动注册条件的 matches、does not match 选项中
脚本 Yes Yes No Input validation rule 字段
Web 监控 Yes No Yes 带有 regex: 前缀的 Variables
Required string 字段
用户宏上下文 Yes No No 带有 regex: 前缀的宏上下文
宏函数
regsub() Yes No No pattern 参数
iregsub()
地图中的链接指示器 Yes No No Pattern 字段(用于文本项)
图标映射 Yes Yes No Expression 字段
值映射 Yes No No 如果映射类型为 regexp,则使用 Value 字段