Monitoring

Zabbix - 設置接受多個響應程式碼的 Web 場景觸發器

  • May 5, 2021

我正在執行一些 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<>404TRUE。觸發器正在觸發。
  • Zabbix 收到 HTTP 401:item.rspcode<>200並且item.rspcdoe<>404TRUE。觸發器正在觸發。
  • Zabbix 收到 HTTP 404:item.rspcode<>200並且item.rspcode<>401TRUE。觸發器正在觸發。

從您的觸發器表達式中刪除上述部分。它應該解決問題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

引用自:https://serverfault.com/questions/1062593