12 正则表达式

概述

Perl Compatible Regular Expressions (PCRE,PCRE2)在Zabbix中受支持。

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

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

正则表达式

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

在使用正则表达式时,可能会出现run堆栈溢出的情况。更多信息请参阅pcrestack man page

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

另请参阅在不同上下文中使用correct escaping的示例。

全局正则表达式

Zabbix前端提供了一个高级编辑器,用于创建和测试复杂的正则表达式。

通过这种方式创建正则表达式后,可以在前端的多个位置通过引用其名称(前面加上@)来使用,例如:@mycustomregexp

要create一个全局正则表达式:

  • 转到:管理 → 常规
  • 从下拉菜单中选择 正则表达式
  • 点击 新建正则表达式

表达式选项卡允许设置正则表达式名称并添加子表达式。

所有必填字段均以红色星号标记。

参数 描述
Name 设置正则表达式名称。允许使用任何Unicode字符。
Expressions 点击表达式块中的 添加 以添加新的子表达式。
表达式类型 选择表达式类型:
包含字符string - 匹配子字符串
包含任意字符string - 匹配来自分隔列表中的任意子字符串。分隔列表包括逗号(,)、点(.)或正斜杠(/)。
不包含字符string - 匹配除子字符串外的任意string
结果为TRUE - 匹配正则表达式
结果为FALSE - 不匹配正则表达式
表达式 输入子字符串/正则表达式。
Delimiter 逗号(,)、点(.)或正斜杠(/),用于分隔正则表达式中的文本字符串。此参数仅在选择"包含任意字符string"表达式类型时有效。
Case sensitive 复选框,用于指定正则表达式是否区分字母大小写。

正则表达式中的正斜杠(/)将按字面意义处理,而不是作为分隔符。这样可以保存包含斜杠的表达式而不会出错。

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

测试选项卡中,可以通过提供测试string来测试正则表达式及其子表达式。

结果显示每个子表达式的状态以及整个自定义表达式的状态。

整个自定义表达式状态定义为组合结果。如果定义了多个子表达式,Zabbix使用逻辑运算符AND来计算组合结果。这意味着如果至少有一个结果为False,则组合结果的状态也为False。

默认全局正则表达式

Zabbix 在其默认数据集中包含多个全局正则表达式。

名称 表达式 匹配内容
File systems for discovery ^(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"
Network interfaces for discovery ^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" 开头,可选地跟随任意数量的数字或点的字符串。
Storage devices for SNMP discovery ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" 或 "Virtual memory" 或 "Memory buffers" 或 "Cached memory" 或 "Swap space"
Windows service names for discovery ^(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 service startup states for discovery ^(automatic|automatic delayed)$ "automatic" 或 "automatic delayed"

示例

示例1

在低级别自动发现中使用以下表达式来发现数据库,除了特定名称的数据库:

^TESTDATABASE$

regexp_expr_2.png

选择的 表达式类型:"结果为FALSE"。不匹配包含string "TESTDATABASE" 的名称。

带内联正则修饰符的示例

使用以下包含内联修饰符的正则表达式 (?i) 匹配字符 "error":

(?i)error

regexp_expr_3a.png

选择的 表达式类型:"结果为 TRUE"。字符 "error" 被匹配。

另一个使用内联正则修饰符的示例

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

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# 我们添加 s 修饰符以允许 . 匹配换行符

regexp_expr_4_new.png

选择的表达式类型:"Result is TRUE"(结果为 TRUE)。特定行之后的字符被匹配。

g 修饰符不能在行内指定。可用修饰符列表请参见 pcresyntax man page。有关 PCRE 语法的更多信息,请参考 PCRE HTML documentation

按位置支持的正则表达式

位置 正则表达式 全局正则表达式 多行匹配 注释
Agent items
eventlog[] regexp, severity, source, eventid 参数
eventlog.count[] regexp, severity, source, eventid 参数
log[] regexp 参数
log.count[]
logrt[] 是/否 regexp 参数支持两者,file_regexp 参数仅支持非全局表达式
logrt.count[]
^ | proc.cpu.util[] | ^ | 否 | 否 | cmdline 参数 |
^ | proc.get[] | ^ | ^ | ^ | ^ |
^ | proc.mem[] | ^ | ^ | ^ | ^ |
^ | proc.num[] | ^ | ^ | ^ | ^ |
^ | sensor[] | ^ | ^ | ^ | device and sensor parameters on Linux 2.4 |
^ | system.hw.macaddr[] | ^ | ^ | ^ | interface parameter |
^ | system.sw.packages[] | ^ | ^ | ^ | regexp parameter |
^ | system.sw.packages.get[] | ^ | ^ | ^ | regexp parameter |
^ | vfs.dir.count[] | ^ | ^ | ^ | regex_incl, regex_excl, regex_excl_dir parameters |
^ | vfs.dir.get[] | ^ | ^ | ^ | regex_incl, regex_excl, regex_excl_dir parameters |
^ | vfs.dir.size[] | ^ | ^ | ^ | regex_incl, regex_excl, regex_excl_dir parameters |
^ | vfs.file.regexp[] | ^ | ^ | 是 | regexp parameter |
^ | vfs.file.regmatch[] | ^ | ^ | ^ | ^ |
^ | web.page.regexp[] | ^ | ^ | ^ | ^ |
SNMP traps | < | < | < | < | < |
< | snmptrap[] | 是 | 是 | 否 | regexp parameter |
监控项-值预处理 | < | 是 | 否 | 否 | pattern parameter |
Functions for triggers/calculated items | < | < | < | < | < |
< | count() | 是 | 是 | 是 | pattern parameter if operator parameter is regexp or iregexp |
< | countunique() | 是 | 是 | ^ | ^ |
< | find() | 是 | 是 | ^ | ^ |
^ | logeventid() | 是 | 是 | 否 | pattern parameter |
^ | logsource() | ^ | ^ | ^ | ^ |
过滤器 | < | < | < | < | < |
< | Filters | 是 | 是 | 否 | Regular expression field |
^ | Overrides | 是 | 否 | ^ | In matches, does not match options for Operation conditions |
Action conditions | < | 是 | 否 | 否 | In matches, does not match options for Host name and Host metadata autoregistration conditions |
Scripts | < | 是 | 是 | 否 | Input validation rule field |
配置web场景 | < | 是 | 否 | 是 | Variables with a regex: prefix
Required string field |
用户宏上下文 | < | 是 | 否 | 否 | In macro context with a regex: prefix |
Macro functions | < | < | < | < | < |
< | regsub() | 是 | 否 | 否 | pattern parameter |
^ | iregsub() | ^ | ^ | ^ | ^ |
图标映射 | < | 是 | 是 | 否 | Expression field |
配置 | < | 是 | 否 | 否 | Value field if mapping type is regexp |