Триггеры это логические выражения, которые отображают собой состояние системы.
Триггер может принимать следующие значения:
Значение | Описание |
---|---|
ПРОБЛЕМА | Обычно означает, что что-то случилось. Например, высокая загрузка процессора. Называлось 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 секунд.
Функции относящиеся ко времени:
Поддерживаются следующие функции:
▼ | ФУНКЦИЯ | Аргумент(ы) | Типы поддерживаемых значений |
---|
Некоторые функции нельзя использовать для не числовых параметров!
Большинство числовых функций принимают количество секунд в качестве аргумента. Вы также можете использовать префикс # чтобы указать, что аргумент имеет другое значение:
ВЫЗЫВАЕМАЯ ФУНКЦИЯ | СМЫСЛ |
---|---|
sum(600) | Сумма всех значений в течении 600 секунд |
sum(#5) | Сумма последних 5 значений |
Функция last имеет особый смысл для значений с префиксом решетки - функция выбирает N-ное предыдущее значение. Поэтому из представленных значений (выстроены от последних к предыдущим) 3, 7, 2, 6, 5, функция last(#2) вернет 7 и функция last(#5) вернет 5.
Выражения триггеров поддерживают использование различных множителей, такие как суффиксы.
Простое полезное выражение может выглядеть так:
Параметр должен быть предоставлен даже для тех функций, которые его игнорируют. Например: last(0)
Высокая загрузка процессора на www.zabbix.com
'www.zabbix.com:system.cpu.load[all,avg1]' передает короткое имя наблюдаемого параметра. Эта строка указывает, что контролируется сервер 'www.zabbix.com' и ключ 'system.cpu.load[all,avg1]'. Используя функцию 'last()', мы ссылаемся на самое последнее значение. И наконец '>5' означает, что триггер будет определен как ПРОБЛЕМА всякий раз, когда последнее значение загрузки процессора на сервере www.zabbix.com будет превышать 5.
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 минут.
Изменился файл /etc/passwd
Используем функцию diff:
Это выражение будет определено как ПРОБЛЕМА, когда предыдущее значение контрольной суммы файла /etc/passwd отличается от последнего значения.
Аналогичные выражения могут быть полезны для мониторинга изменений в важных файлах, таких как /etc/passwd, /etc/inetd.conf, /kernel и других.
Кто-то скачивает большой файл из Интернет
Используем функцию min:
Это выражение будет определено как ПРОБЛЕМА, когда сумма полученных байт за последних 5 минут на интерфейсе eth0 превышает 100КБ.
Оба узла кластера 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.
Zabbix агент нуждается в обновлении
Используем функцию str():
Это выражение будет определено как ПРОБЛЕМА, когда версия Zabbix агента содержит в себе 'beta8' (возможно 1.0beta8).
Сервер недоступен
Выражение правдиво, если узел сети "zabbix.zabbix.com" недоступен более 5 раз за последние 30 минут.
Нет получения данных за последние 3 минуты
Используем функцию nodata():
‘tick’ должен иметь тип ‘Zabbix trapper’’. Для того чтобы этот триггер заработал, элемент данных ‘tick’ должен существовать. Узел сети должен периодически отправлять данные этому элементу данных используя zabbix_sender. Если не было получено данных за последние 180 секунд, значение триггера будет определено как ПРОБЛЕМА.
Активность ЦПУ в ночное время
Используем функцию 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).
Проверяет, если локальное время на клиенте синхронизировано с временем на Zabbix сервере
Используется функция fuzzytime():
Триггер меняет состояние на проблему тогда, когда локальное время на сервере MySQL_DB и Zabbix сервере различаются более чем на 10 секунд.
Зависимости триггеров могут быть использованы для определения взаимосвязи между триггерами.
Зависимости триггера являются очень удобным способом ограничения количества сообщений, которые будут отправлены в случае если возникающее событие относится к нескольким ресурсам.
Например, узел сети Хост находится позади маршрутизатора Роутер2, а Роутер2 находится позади Роутер1.
Если Роутер1 недоступен, то очевидно, что и Хост и Роутер2 недоступны. Никто не хочет получать три уведомления с информацией о Хост, Роутер1 и Роутер2. Это как раз тот случай, когда использование зависимостей триггера будет очень удобным.
Для этого случая, мы определяем эти зависимости:
триггер 'Хост недоступен' зависит от триггера 'Роутер2 недоступен'
триггер 'Роутер2 недоступен' зависит от триггера 'Роутер1 недоступен'
Перед изменением состояния триггера 'Хост недоступен', Zabbix будет проверять существуют ли у этого триггера заданные зависимости. Если это так, и один из триггеров в находится в состоянии ПРОБЛЕМА, то состояние триггера не будет изменено и, следовательно, действие не будет выполнено и оповещение не будет отправлено.
Zabbix выполняет эту проверку рекурсивно. Если Роутер1 или Роутер2 недоступен, тогда триггер у Хоста не будет изменен.
Важность триггера определяет насколько триггер важен. Zabbix поддерживает следующие важности триггеров:
Важность | Определение | Цвет |
---|---|---|
Не классифицировано | Неизвестная важность. | Серый. |
Информация | В информационных целях. | Светло зеленый. |
Предупреждение | Предупреждающий. | Светло желтый. |
Средняя | Средняя проблема. | Темно красный. |
Высокая | Произошло что-то важное. | Красный. |
Чрезвычайная | Чрезвычайный. Финансовые потери и т.п. | Ярко красный. |
Важности могут быть использованы в:
Иногда триггер должен иметь различные условия для разных состояний. Например, мы хотим определить триггер, который перейдет в состояние ПРОБЛЕМА если температура в серверной комнате поднимется выше 20 градусов. При этом триггер должен оставаться в состоянии ПРОБЛЕМА, пока температура не опустится ниже 15 градусов.
Для того чтобы сделать это, мы определим следующий триггер:
Температура в серверной комнате слишком высокая.
Примечание: Здесь используется макрос {TRIGGER.VALUE}, который возвращает текущее состояние триггера (его числовое значение).
Осталось очень мало свободного места на диске
Проблема: осталось меньше чем 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}, который возвращает текущее состояние триггера (его числовое значение).