Zabbix - 設置接受多個響應程式碼的 Web 場景觸發器
我正在執行一些 Zabbix Web 場景來收集某些網站和 API 的資訊,其中一些 API 的 401 和 404 狀態程式碼是可以接受的,我想在觸發器表達式中採用這些。目前它們被認為是“關閉”,因為它們與 200 響應程式碼不匹配。
我在 Zabbix 中創建了一個 Web 場景,它接受以下響應程式碼:200、401、404(目前託管一些 API,所以這些很常見)
當我只允許 200 狀態程式碼時,此檢查工作正常。為此檢查,我添加了 2 條關於 401 和 404 狀態程式碼的“或”語句。由於某種原因,這會使觸發器感到困惑,並且每次檢查都“失敗”
我為 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
對於 2 個新的狀態程式碼,我將其更改為:
{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:
項目
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
和邏輯運算符AND。這將解決第一個問題。
問題2:
你不需要這
item.rspcode<>200 or item.rspcode<>401 or item.rspcode<>404
部分。您已經在 Web 場景中指定了預期的響應程式碼。你的情況會發生什麼:
- Zabbix 接收 HTTP 200:
item.rspcode<>401
並且item.rspcode<>404
是TRUE。觸發器正在觸發。- Zabbix 收到 HTTP 401:
item.rspcode<>200
並且item.rspcdoe<>404
是TRUE。觸發器正在觸發。- Zabbix 收到 HTTP 404:
item.rspcode<>200
並且item.rspcode<>401
是TRUE。觸發器正在觸發。從您的觸發器表達式中刪除上述部分。它應該解決問題2。
TL;博士
像這樣做:
{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