我当前监视打印以下运行状况检查的页面
<status>
<link type="text/css" id="dark-mode" rel="stylesheet" href=""/>
<style type="text/css" id="dark-mode-custom-style"/>
<cache>ok</cache>
<databaseMaster>error</databaseMaster>
<databaseSlave>error</databaseSlave>
<redis>ok</redis>
<files>ok</files>
</status>
我使用以下触发器来做到这一点(这个触发器有效(
{host:web.page.regexp[{$HOST_IP},health/check,,[error|warning],,].str(error)}=1
但是,当尝试详细解析每个单独的行响应时(即数据库主, 在第 5 行中,它可以显示 3 个值,确定、错误和警告,我试图运行的表达式去(这不起作用(
{host:web.page.regexp[{$HOST_IP},health/check,,[<databaseMaster>error|<databaseMaster>warning],,].str(error)}=1
然而,尽管语法如此,而且我找不到任何问题,因为大于和低于符号不是元字符,不知何故,我怀疑我的正则表达式是错误的,但我不确定如何将其翻译成 pcre 这样我就可以匹配我想触发警报的字符
我也想知道zabbix是否有更适合此功能的功能?
[<databaseMaster>error|<databaseMaster>warning]
- 您正在尝试匹配<databaseMaster>error
或<databaseMaster>warning
,但您实际上是在匹配列表中的一个字符<d,a,t,b,s,e,M,r,>,o,|,w,n,i,g
。
在这种情况下,[方括号]表示"匹配列表中的一个字符"。请改为尝试捕获组,该组的行为将符合预期:
(<databaseMaster>error|<databaseMaster>warning)
查看此答案以获取有关正则表达式中括号和方括号之间区别的更多信息。