问题:
触发发送电子邮件立即地当网站无法访问时。
系统:
Linux Debian Stretch,Zabbix 4.2.1。
Web 场景的当前配置:
Scenario:
Name: website.com
Update interval: 30s
Attempts: 3
Agent: Zabbix
Steps:
(just one)
Name: website.com
URL: http://website.com/page.php
Follow redirects: checked
Timeout: 30s
(其余不变)
触发器的当前配置:
Name: The website.com can't be reached!
Expression: {VIRTUALMACHINE:web.test.fail[website.com].last(3m)}>0
(其余不变)
解释
如果网站 3 分钟内无法访问(或最后 3 次检查,每次检查超时 30 秒),触发器必须发送电子邮件。我尝试过很多方法(见下文*),但对于我尝试的每个触发器表达式,当 zabbix 第一次检测到问题时(而不是第 n 次尝试),都会立即发送电子邮件通知。
*
{VIRTUALMACHINE:web.test.fail[website.com].sum(#3)}>0
{VIRTUALMACHINE:web.test.fail[website.com].last(3m)}<>0
{VIRTUALMACHINE:web.test.rspcode[website.com,website.com].last(0)}#200
{VIRTUALMACHINE:web.test.fail[website.com].last(3)}#0
{VIRTUALMACHINE:web.test.fail[website.com].sum(#3)}>0
{VIRTUALMACHINE:web.test.fail[website.com].last(3)}>0
{VIRTUALMACHINE:web.test.fail[website.com].min(1)}>0
如果你给出答案,请解释一下。请随意提问。
答案1
解决方案/解决方法
我在每个触发器上添加了标签,并通过添加标签条件编辑了电子邮件操作。
例如:
首先发送电子邮件操作:无法 ping 服务器。
ACTION tab
Conditions:
Tag value server equals icmpping
(其余不变)
第二次发送电子邮件操作:无法访问该网站。
ACTION tab
Conditions:
Tag value server equals web
OPERATIONS tab
Default operation step duration: 3m
Operation details: Steps = 2-2; Step duration = 0
(其余不变)
Trigger expression:
{VIRTUALMACHINE:web.test.fail[website.com].last()}>0
现在,Zabbix 会在检测到网站瘫痪 3 分钟后向我发送一条消息,如果问题在这 3 分钟内得到解决,Zabbix 将不会发送电子邮件。
答案2
物品web.tyest.fail
返回场景失败的步骤鉴于此,您可以像这样实现所需的结果:
{VIRTUALMACHINE:web.test.fail[website.com].min(#3)}>0
这将检查最后 3 个值,如果它们都大于 0(失败),则发出警报。考虑以下场景:
- 一切都很好并且值为 0。
- 网站瘫痪,出现非零值。最后 3 个值的最小值仍为 0,无警报。
- 网站仍然瘫痪,又出现了一个非零值。最后 3 个值中的最小值仍为 0(最后 3 个值中剩下一个 0),没有警报。
- 站点仍处于关闭状态,另一个非零值到达。前 3 个值中的最小值现在为非零值,触发器将触发。
关于您尝试过的表达方式的一些补充说明:
- 您用于函数的值
3
和被忽略。3m
last()
1
您用于函数 min 的值min()
表示秒,因此该触发表达式基本上根本不起作用。