我正在运行一些 Zabbix Web 场景来收集有关某些网站和 API 的信息,因为某些 API 的 401 和 404 状态代码是可以接受的,我想在触发器表达式中采用这些代码。目前它们被视为“关闭”,因为它们与 200 响应代码不匹配。
我在 Zabbix 中创建了一个 Web 场景,它接受以下响应代码:200、401、404(当前托管一些 API,因此这些非常常见)
当我仅允许 200 状态代码时,此检查工作正常。我为此检查添加了 2 个有关 401 和 404 状态代码的“OR”语句。出于某种原因,这混淆了触发器,并且每个检查都“失败”
我为 200 状态代码检查设置了如下触发表达式:(效果很好!)
{Template App Nginx by Zabbix agent:web.test.error["Web Check Status 200, 401, 404"].last()}=0 or {Template App Nginx by Zabbix agent:web.test.fail["Web Check Status 200, 401, 404"].last()}>0 or {Template App Nginx by Zabbix agent:web.test.rspcode["Web Check Status 200, 401, 404","Web Check Status 200, 401, 404"].last()}<>200
对于两个新的状态代码,我将其更改为:
{Template App Nginx by Zabbix agent:web.test.error["Web Check Status 200, 401, 404"].last()}=0 or {Template App Nginx by Zabbix agent:web.test.fail["Web Check Status 200, 401, 404"].last()}>0 or {Template App Nginx by Zabbix agent:web.test.rspcode["Web Check Status 200, 401, 404","Web Check Status 200, 401, 404"].last()}<>200 or {Template App Nginx by Zabbix agent:web.test.rspcode["Web Check Status 200, 401, 404","Web Check Status 200, 401, 404"].last()}<>401 or {Template App Nginx by Zabbix agent:web.test.rspcode["Web Check Status 200, 401, 404","Web Check Status 200, 401, 404"].last()}<>404
现在我理解这个表达的逻辑如下:
警报条件:
web.test.error 等于 0
或 web.test.fail 大于 0
或 web.test.rspcode 不等于 200
或 web.test.rspcode 不等于 401
或 web.test.rspcode 不等于 404
我的方法正确吗?我该如何解决这个问题?
创建另一个触发器是不够的(我认为),因为原始触发器仍然会失败。
答案1
问题 1:
项目web.test.error
以字符串形式返回场景的最后一个错误消息。因此,您的表达式
{Template App Nginx by Zabbix agent:web.test.error["Web Check Status 200, 401, 404"].last()}=0
永远不会开火,因为该物品永远不会0将其更改为
{Template App Nginx by Zabbix agent:web.test.error["Web Check Status 200, 401, 404"].strlen()}>=0
和逻辑运算符和。这样就解决了第一个问题。
问题2:
您不需要该item.rspcode<>200 or item.rspcode<>401 or item.rspcode<>404
部分。您已经在 Web 场景中指定了预期响应代码。在您的案例中会发生什么:
- Zabbix收到 HTTP 200:
item.rspcode<>401
并且item.rspcode<>404
真的. 扳機正在啟動。 - Zabbix 收到 HTTP 401 :
item.rspcode<>200
并且item.rspcdoe<>404
真的. 扳機正在啟動。 - Zabbix 收到 HTTP 404 :
item.rspcode<>200
并且item.rspcode<>401
真的. 扳機正在啟動。
从触发表达式中删除上述部分。这应该可以解决问题 2。
总结
像这样做:
{Template App Nginx by Zabbix agent:web.test.error["Web Check Status 200, 401, 404"].strlen()}>=0 and
{Template App Nginx by Zabbix agent:web.test.fail["Web Check Status 200, 401, 404"].last()}>0