12 Триггеры

Триггеры это логические выражения, которые отображают собой состояние системы.

Триггер может принимать следующие значения:

Значение Описание
ПРОБЛЕМА Обычно означает, что что-то случилось. Например, высокая загрузка процессора. Называлось TRUE в предыдущих версиях Zabbix.
ОК Это нормальное состояние для триггера. Называлось FALSE в предыдущих версиях Zabbix.
НЕИЗВЕСТНО Означает что Zabbix не может высчитать выражение триггера. Это может произойти по нескольким причинам:
- сервер недоступен
- выражение триггера не может быть высчитано
- выражение триггера было недавно изменено

- Выражения у триггеров

Используемые в триггерах выражения являются очень гибкими. Вы можете использовать их для создания сложных логических тестов, учитывая статистику по мониторингу.

- Операторы выражений

Следующие операторы поддерживаются для триггеров (представлены по убыванию приоритета выполнения):

Приоритет Оператор Определение
1 / Деление
2 *** |Умножение | |3** - Арифметический минус
4 + Арифметический плюс
5 < Менее чем. Этот оператор может быть представлен в виде:
A<B ⇔ (A<=B-0.000001)
6 > Более чем. Этот оператор может быть представлен в виде:
A>B ⇔ (A>=B+0.000001)
7 # Не равен. Этот оператор может быть представлен в виде:
A#B ⇔ (A<=B-0.000001) | (A>=B+0.000001)
8 = Равен. Этот оператор может быть представлен в виде:
A=B ⇔ (A>B-0.000001) & (A<B+0.000001)
9 & Логическое И
10 | Логическое ИЛИ

- Функции триггеров

Функции триггеров позволяют ссылаться на собранные значения, текущее время и другие факторы.

- Функции основанные на времени

Состояние (выражение) триггера пересчитывается каждый раз когда Zabbix сервер получает новое значение данных, если это значение данных является частью выражения. Если в выражении триггера используются функции относящиеся ко времени такой триггер пересчитывается каждые 30 секунд.

Функции относящиеся ко времени:

  • nodata()
  • date()
  • dayofmonth()
  • dayofweek()
  • time()
  • now()
- Список функций триггеров

Поддерживаются следующие функции:

1) Все функции возвращают только числовые значения. Сравнение строк, к примеру, не поддерживается.
2) Строковые аргументы должны быть заключены в двойные кавычки. В противном случае они могут быть не верно интерпретированы.

ФУНКЦИЯ Аргумент(ы) Типы поддерживаемых
значений

Некоторые функции нельзя использовать для не числовых параметров!

Большинство числовых функций принимают количество секунд в качестве аргумента. Вы также можете использовать префикс # чтобы указать, что аргумент имеет другое значение:

ВЫЗЫВАЕМАЯ ФУНКЦИЯ СМЫСЛ
sum(600) Сумма всех значений в течении 600 секунд
sum(#5) Сумма последних 5 значений

Функция last имеет особый смысл для значений с префиксом решетки - функция выбирает N-ное предыдущее значение. Поэтому из представленных значений (выстроены от последних к предыдущим) 3, 7, 2, 6, 5, функция last(#2) вернет 7 и функция last(#5) вернет 5.

Выражения триггеров поддерживают использование различных множителей, такие как суффиксы.

Простое полезное выражение может выглядеть так:

{<сервер>:<ключ>.<функция>(<параметр>)}<оператор><константа>

Параметр должен быть предоставлен даже для тех функций, которые его игнорируют. Например: last(0)

Пример 1

Высокая загрузка процессора на www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

'www.zabbix.com:system.cpu.load[all,avg1]' передает короткое имя наблюдаемого параметра. Эта строка указывает, что контролируется сервер 'www.zabbix.com' и ключ 'system.cpu.load[all,avg1]'. Используя функцию 'last()', мы ссылаемся на самое последнее значение. И наконец '>5' означает, что триггер будет определен как ПРОБЛЕМА всякий раз, когда последнее значение загрузки процессора на сервере www.zabbix.com будет превышать 5.

Пример 2

www.zabbix.com перегружен

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(600)}>2 

Это выражение будет определено как ПРОБЛЕМА, когда либо текущая загрузка процессора больше 5, либо загрузка процессора больше 2 за последние 10 минут.

Пример 3

Изменился файл /etc/passwd

Используем функцию diff:

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

Это выражение будет определено как ПРОБЛЕМА, когда предыдущее значение контрольной суммы файла /etc/passwd отличается от последнего значения.

Аналогичные выражения могут быть полезны для мониторинга изменений в важных файлах, таких как /etc/passwd, /etc/inetd.conf, /kernel и других.

Пример 4

Кто-то скачивает большой файл из Интернет

Используем функцию min:

{www.zabbix.com:net.if.in[eth0,bytes].min(300)}>100K

Это выражение будет определено как ПРОБЛЕМА, когда сумма полученных байт за последних 5 минут на интерфейсе eth0 превышает 100КБ.

Пример 5

Оба узла кластера SMTP серверов недоступны

Примечание, в выражении используются два разных узла сети:

{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

Это выражение будет определено как ПРОБЛЕМА, когда оба SMTP сервера недоступны smtp1.zabbix.com и smtp2.zabbix.com.

Пример 6

Zabbix агент нуждается в обновлении

Используем функцию str():

{zabbix.zabbix.com:agent.version.str("beta8")}=1

Это выражение будет определено как ПРОБЛЕМА, когда версия Zabbix агента содержит в себе 'beta8' (возможно 1.0beta8).

Пример 7

Сервер недоступен

{zabbix.zabbix.com:icmpping.count(1800,0)}>5

Выражение правдиво, если узел сети "zabbix.zabbix.com" недоступен более 5 раз за последние 30 минут.

Пример 8

Нет получения данных за последние 3 минуты

Используем функцию nodata():

{zabbix.zabbix.com:tick.nodata(180)}=1

‘tick’ должен иметь тип ‘Zabbix trapper’’. Для того чтобы этот триггер заработал, элемент данных ‘tick’ должен существовать. Узел сети должен периодически отправлять данные этому элементу данных используя zabbix_sender. Если не было получено данных за последние 180 секунд, значение триггера будет определено как ПРОБЛЕМА.

Пример 9

Активность ЦПУ в ночное время

Используем функцию time():

{zabbix:system.cpu.load[all,avg1].min(300)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

Триггер может быть определен как ПРОБЛЕМА только в ночное время (00:00-06:00).

Пример 10

Проверяет, если локальное время на клиенте синхронизировано с временем на Zabbix сервере

Используется функция fuzzytime():

{MySQL_DB:system.localtime.fuzzytime(10)}=0

Триггер меняет состояние на проблему тогда, когда локальное время на сервере MySQL_DB и Zabbix сервере различаются более чем на 10 секунд.

- Зависимости триггеров

Зависимости триггеров могут быть использованы для определения взаимосвязи между триггерами.

Зависимости триггера являются очень удобным способом ограничения количества сообщений, которые будут отправлены в случае если возникающее событие относится к нескольким ресурсам.

Например, узел сети Хост находится позади маршрутизатора Роутер2, а Роутер2 находится позади Роутер1.

Zabbix - Роутер1 – Роутер2 - Хост

Если Роутер1 недоступен, то очевидно, что и Хост и Роутер2 недоступны. Никто не хочет получать три уведомления с информацией о Хост, Роутер1 и Роутер2. Это как раз тот случай, когда использование зависимостей триггера будет очень удобным.

Для этого случая, мы определяем эти зависимости:

триггер 'Хост недоступен' зависит от триггера 'Роутер2 недоступен'
триггер 'Роутер2 недоступен' зависит от триггера 'Роутер1 недоступен'

Перед изменением состояния триггера 'Хост недоступен', Zabbix будет проверять существуют ли у этого триггера заданные зависимости. Если это так, и один из триггеров в находится в состоянии ПРОБЛЕМА, то состояние триггера не будет изменено и, следовательно, действие не будет выполнено и оповещение не будет отправлено.

Zabbix выполняет эту проверку рекурсивно. Если Роутер1 или Роутер2 недоступен, тогда триггер у Хоста не будет изменен.

- Важности триггеров

Важность триггера определяет насколько триггер важен. Zabbix поддерживает следующие важности триггеров:

Важность Определение Цвет
Не классифицировано Неизвестная важность. Серый.
Информация В информационных целях. Светло зеленый.
Предупреждение Предупреждающий. Светло желтый.
Средняя Средняя проблема. Темно красный.
Высокая Произошло что-то важное. Красный.
Чрезвычайная Чрезвычайный. Финансовые потери и т.п. Ярко красный.

Важности могут быть использованы в:

  • визуальном представлении триггеров. Различные цвета для различных уровней важности.
  • звуковой сигнализации на странице наблюдения за состоянием триггеров. Различные звуковые сигналы для различных важностей.
  • оповещениях пользователей. Различные типы оповещений (каналы оповещения) для различных важностей. Например, СМС – для высокой важности, email – для остального.

- Гистерезис

Иногда триггер должен иметь различные условия для разных состояний. Например, мы хотим определить триггер, который перейдет в состояние ПРОБЛЕМА если температура в серверной комнате поднимется выше 20 градусов. При этом триггер должен оставаться в состоянии ПРОБЛЕМА, пока температура не опустится ниже 15 градусов.

Для того чтобы сделать это, мы определим следующий триггер:

Пример 1

Температура в серверной комнате слишком высокая.

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

Примечание: Здесь используется макрос {TRIGGER.VALUE}, который возвращает текущее состояние триггера (его числовое значение).

Пример 2

Осталось очень мало свободного места на диске

Проблема: осталось меньше чем 10ГБ за последние 5 минут

Восстановление: остается более чем 40ГБ за последние 10 минут

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |
({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

Примечание: Здесь используется макрос {TRIGGER.VALUE}, который возвращает текущее состояние триггера (его числовое значение).