Назад | Перейти на главную страницу

Zabbix - запуск веб-сценариев. Как игнорировать первые неудачные попытки?

Проблема:

Триггер отправить электронное письмо немедленно когда сайт недоступен.

Система:

Linux Debian Stretch, Zabbix 4.2.1.

Текущая конфигурация веб-сценария:

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

Пожалуйста, если дадите ответ, поясните. Не стейсняйся спросить.

Пункт 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() означает секунды, поэтому это выражение триггера в большинстве случаев вообще не работает.

Решение / обходной путь

Я добавил теги к каждому триггеру и отредактировал действия электронной почты, добавив условия тега.

Например:

Сначала отправьте действие по электронной почте: не удается проверить связь с сервером.

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 не отправит электронное письмо.