正则表达式

概述

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

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

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

正则表达式

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

使用正则表达式时,可能会耗尽栈内存。 有关更多信息,请参见 PCRE PERFORMANCE

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

另请参见在各种上下文中正确转义的示例。

全局正则表达式

Zabbix 在前端提供了一个高级编辑器,用于创建和测试复杂的正则表达式。
要访问它,请转到 Administration > General > Regular expressions
Zabbix 在其默认数据集中包含若干预定义的全局正则表达式

您可以按名称和描述筛选正则表达式列表,以找到所需的表达式。

配置

要创建全局正则表达式,请单击 创建正则表达式,并在表单中输入正则表达式参数。

所有必填输入字段都用红色星号标记。

参数 说明
名称 设置正则表达式名称。允许使用任何 Unicode 字符。
表达式 单击 表达式 部分中的 添加,以添加新的子表达式。
表达式类型 选择表达式类型:
包含字符串 - 匹配子字符串。
包含列表中的任意子字符串 - 匹配由分隔符分隔的列表中的任意子字符串。分隔列表可以使用逗号 ,、点号 . 或斜杠 /
不包含字符串 - 匹配除该子字符串之外的任意字符串。
匹配正则表达式 - 匹配该正则表达式。
不匹配正则表达式 - 不匹配该正则表达式。
表达式 输入子字符串/正则表达式。
最大长度:2048 个字符。
分隔符 用于在正则表达式中分隔文本字符串的逗号 ,、点号 . 或斜杠 /。仅当选择 包含列表中的任意子字符串 表达式类型时,此参数才可用。
区分大小写 一个复选框,用于指定正则表达式是否区分字母大小写。
描述 输入该正则表达式的描述。
测试表达式 用于测试正则表达式的值。

表达式中的斜杠 / 会按字面含义处理,而不是作为分隔符。 这样就可以在不出错的情况下保存包含斜杠的表达式。

Zabbix 中的自定义正则表达式名称可以包含逗号、空格等字符。 在某些情况下,这可能会导致引用时产生歧义(例如,监控项键参数中的逗号),此时整个引用可以用引号括起来,例如:"\@My custom regexp for purpose1, purpose2"
在其他位置(例如 LLD 规则属性中),正则表达式名称不得加引号。

创建正则表达式后,可以在前端的多个位置通过其名称进行引用,名称前加 @,例如 @mycustomregexp

表单按钮

表单底部的按钮可让您执行各种操作:

Button Description
添加一个正则表达式。此按钮仅适用于新的正则表达式。
更新正则表达式的属性。
基于当前正则表达式的属性创建另一个正则表达式。
针对提供的值测试正则表达式及其子表达式。
删除该正则表达式。
取消编辑正则表达式属性。

测试正则表达式

您可以通过在 Test expression 字段中输入一个值并点击 Test 按钮,来测试正则表达式及其子表达式。

Test result 列中,会显示每个子表达式的状态。 Combined result 字段显示正则表达式的整体状态。 如果定义了多个子表达式,Zabbix 会使用逻辑 AND 运算符来计算 Combined result;也就是说,如果至少有一个结果为 False,则 Combined result 也为 False

默认全局正则表达式

默认数据集包含以下预定义的全局正则表达式:

名称 表达式 匹配
用于发现的文件系统 ^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|apfs|refs|ntfs|fat32|zfs)$ "btrfs" 或 "ext2" 或 "ext3" 或 "ext4" 或 "reiser" 或 "xfs" 或 "ffs" 或 "ufs" 或 "jfs" 或 "jfs2" 或 "vxfs" 或 "hfs" 或 "apfs" 或 "refs" 或 "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"。

导入/导出正则表达式

您可以按照 正则表达式 导出/导入配置页面中的说明,导入或导出全局正则表达式。

示例

排除精确字符串的示例

在低级别发现中使用以下表达式来发现数据库,但排除名称为特定值的数据库:

^TESTDATABASE$

Test resultCombined result 都显示 FALSE:名称匹配 "TESTDATABASE",因此不满足 Does not match regular expression 条件。

使用内联正则修饰符进行不区分大小写匹配的示例

使用以下正则表达式,其中包含内联修饰符 (?i),用于对字符 "error" 进行不区分大小写的匹配:

(?i)error

Test resultCombined result 都显示 TRUE:即使选择了 Case sensitive,字符 "error" 仍然会被匹配,因为内联修饰符 (?i) 会使匹配不区分大小写。

多个内联正则修饰符示例

使用以下正则表达式,其中包含多个内联修饰符,用于匹配特定行之后的字符:

(?<=match (?i)eveRything(?-i) after this line\r\n)(?sx).*# comment

其中:

  • (?i) - 启用不区分大小写匹配;
  • (?-i) - 关闭不区分大小写匹配;
  • (?s) - 启用 dotall 模式,允许 . 匹配换行符;
  • (?x) - 启用扩展模式,允许忽略正则表达式中的空白和注释。

Test resultCombined result 都显示 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()
Link indicators in maps Yes No No Pattern 字段(用于文本项)
Icon mapping Yes Yes No Expression 字段
Value mapping Yes No No 如果映射类型为 regexp,则使用 Value 字段
Agent configuration parameters
AllowKeyRegexp Yes No No Pattern
DenyKeyRegexp