12. 正则表达式
概述
Zabbix支持 Perl兼容的正规表达式库 (PCRE)。
在Zabbix中有两种使用正则表达式的方法:
手动输入正则表达式
使用在Zabbix中创建的全局正则表达式
正则表达式
你可以在支持的位置手动输入正则表达式。请注意,表达式可能不以@开头,因为该符号在Zabbix中用于引用全局正则表达式。
全局正则表达式
在Zabbix前端,有一个高级的编辑器用于创建和测试复杂的正则表达式。
一旦以这种方式创建了正则表达式,它就可以在前端的几个地方使用,方法是加个@前缀来引用它的名称, 例如,@mycustomregexp。
创建全局正则表达式:
点击: 管理 → 通用
从右上角的下拉列表中选择 正则表达式
单击 新的正则表达式
正则表达式选项卡允许设置正则表达式名称并添加子表达式。
所有必填输入字段都标有红色星号。
参数 | 说明 | |
---|---|---|
名称 | 设置正则表达式名称。允许使用任何Unicode字符。 | |
表达式 | 单击表达式块中的 添加 用来添加新的子表达式。 | |
表达式类型 | 选择表达式类型: 字符串已包含 - 匹配子字符串 包括任何字符串 - 匹配分隔列表中的任何子字符串。分隔列表包括逗号(,)、点号(.)或正斜杠(/)。 字符串未包含 - 匹配除此以外的任何子字符串 结果为真 - 匹配正则表达式 结果为假 - 不匹配正则表达式 | |
表达式 | 输入子字符串/正则表达式。 | |
分隔符 | 用逗号(,)、点号(.)或正斜杠(/)分隔正则表达式中的文本字符串。仅当选择“包括任何字符串”表达式类型时,此参数才有效。 | |
区分大小写 | 此复选框用于指定正则表达式是否对字母大小写敏感。 |
自Zabbix 2.4.0开始,表达式中的正斜杠(/)按字面意思处理,而不是分隔符。这样就可以保存包含斜杠的表达式,而以前版本则会报错。
Zabbix里自定义的表达式名称可以包含逗号,空格等。在引用时可能导致误解的情况下(例如,监控项键值的参数中的逗号),整个引用可以放在引号中,如下所示: “ @My custom regexp for purpose1, purpose2”。
不能在其他位置引用正则表达式名称(例如,在低级自动发现规则属性中)。
举例
在低级自动发现中使用以下正则表达式,来发现不考虑具有特定名称的数据库:
^TESTDATABASE$
选择 表达式类型: “结果为假”。不匹配名称,包含字符串“TESTDATABASE”。
内联正则表达式修饰符的示例
使用如下带有内联修饰符(?i)的正则表达式匹配“error”字符:
(?i)error
选择 表达式类型: “结果为真”。“error”字符被匹配到。
内联正则表达式修饰符的另一个示例
使用如下带有内联修饰符(?i)的正则表达式匹配“error”字符:
(?<=match (?i)everything(?-i) after this line\n)(?sx).* #我们增加了一个修饰符(?s)使得点号(.)可以匹配换行符
选择表达式类型: “结果为真”。匹配特定行后的字符。
g修饰符不能在行中指定。可用的修饰符列表可以在 pcresyntax手册 里找到。如果想了解更多的PCRE正则表达式语法,请参考 PCRE HTML文档。
更复杂的例子
自定义正则表达式可能包含多个子表达式,可以通过提供测试字符串在Test选项卡中进行测试。
结果显示每个子表达式的状态和整个自定义表达式的状态。
整个自定义表达式状态定义为 合并结果。如果定义了几个子表达式,Zabbix使用与逻辑运算符来计算 合并结果。这意味着如果只要有一个结果为False,合并结果 也为False状态。
全局正则表达式的说明
全局正则表达式 | 表达式 | 说明 |
---|---|---|
文件系统发现 | ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|ntfs|fat32|zfs)$ | 匹配btrfs”或“ext2”或“ext3”或“ext4”或“jfs”或“reiser”或“xfs”或“ffs”或“ufs”或“jfs”或“jfs2”或“vxfs”或“hfs“或”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”,最后以任意长度(长度可能为0)的数字(0-9),点号(.)或者下划线()结尾的字符串 | |
^NULL[0-9.]$ | 匹配以“NULL”开头的字符串,后面是任意长度(长度可能为0)的数字(0-9)或者点号(.) | |
^[Ll]o[0-9.]$ | 匹配以“Lo”或者“lo”开头的字符串,后面是任意长度(长度可能为0)的数字(0-9)或者点号(.) | |
^[Ss]ystem$ | 匹配“System”或者“system” | |
^Nu[0-9.]*$ | 匹配以 “Nu” 开头的字符串,后面是任意长度(长度可能为0)的数字(0-9)或者点号(.) | |
存储设备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”。 |
支持正则表达式的位置
位置 | 正则表达式 | 全局正则表达式 | 注释 | |
---|---|---|---|---|
Agent监控项 | ||||
eventlog[] | 支持 | 支持 | regexp , severity , source , eventid 参数 | |
log[] | regexp 参数 | |||
log.count[] | ||||
logrt[] | 支持/不支持 | regexp 参数两者都支持, file_regexp 参数仅支持非全局表达式 | ||
logrt.count[] | ||||
proc.cpu.util[] | 不支持 | cmdline 参数 | ||
proc.mem[] | ||||
proc.num[] | ||||
sensor[] | device 和 sensor 参数在Linux 2.4中 | |||
system.hw.macaddr[] | interface 参数 | |||
system.sw.packages[] | package 参数 | |||
vfs.dir.count[] | regex_incl 和 regex_excl 参数 | |||
vfs.dir.size[] | regex_incl 和 regex_excl 参数 | |||
vfs.file.regexp[] | regexp 参数 | |||
vfs.file.regmatch[] | ||||
web.page.regexp[] | ||||
SNMP捕捉器 | ||||
snmptrap[] | 支持 | 支持 | regexp 参数 | |
监控项值预处理 | 支持 | 不支持 | pattern 参数 | |
触发器函数 | ||||
count() | 支持 | 支持 | pattern 参数,如果 operator 参数是 regexp 或者 iregexp | |
logeventid() | pattern 参数 | |||
iregexp() | ||||
regexp() | ||||
低级别发现 | 支持 | 支持 | 过滤 字段 | |
Web监测 | 支持 | 不支持 | Variables 带有 regex: 前缀 变量所需字符串 字段 | |
宏函数 | ||||
regsub() | 支持 | 不支持 | pattern 参数 | |
iregsub() | ||||
图标映射 | 支持 | 支持 | 表达式 字段 |