Пользовательские интервалы в Элементах данных

Различные вопросы по системе мониторинга Заббикс
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Пользовательские интервалы в Элементах данных

Сообщение Артём Мамзиков »

Пользовательские интервалы и Как они работают
Приоритеты
Приоритеты
Пример Архив формируется каждое Воскресенье проверять будем с 9:00 до 24:00ч Каждые 6 часов проверка.
Применяем
Пользовательские интервалы Переменный
Каждое Воскресенье с 9 до 24ч опрос каждые 6 часов
Каждое Воскресенье с 9 до 24ч опрос каждые 6 часов
Интервал 21600s - 6часов
Период 7,09:00-24:00 - Воскресенье, с 9:00 до 24:00ч

Возможно указать до 7 переменных интервалов.
Первая Ячейка Интервал - интервал обновления в указанный период времени
В ячейке Интервал - Задаем время частоту опроса элемента данных
Вторая ячейка Период
В ячейке Период - Задаем в какое время и день/дни будет опрашиваться Элемента данных

Синтаксис ячейки Период: d-d,hh:mm-hh:mm
d - это День недели: 1 - Понедельник, 2 - Вторник ,... , 7 - Воскресенье
hh - это Часы: 00-24
mm - это Минуты: 00-59
Можно указать более одного периода времени, используя разделитель в виде точки с запятой (;)
d-d,hh:mm-hh:mm;d-d,hh:mm-hh:mm

Если оставить период времени пустым, он будет эквивалентен 01-07,00:00-24:00, что является умолчание
С Понедельника по Пятницу с 9:00 до 18:00:
Будет 1-5,09:00-18:00
С понедельника по пятницу с 9:00 до 18:00 и суббота, Воскресенье с 10:00 до 16:00:
Будет 1-5,09:00-18:00;6-7,10:00-16:00

Если несколько гибких интервалов перекрываются, то используется Интервал с наименьшим значением для перекрывающегося периода.
Если наименьший интервал из перекрывающих имеет значение "0", то проверка не будет произведена вообще.
В остальных случаях будет использоваться интервал обновления по умолчанию.
Если гибкий интервал совпадает с длительностью периода, элемент данных будет опрошен только один раз.
Если гибкий интервал больше чем период, элемент данных может быть опрошен один раз или может быть не проверен вовсе (поэтому такая настройка не рекомендуется).
Если гибкий интервал меньше чем период, элемент данных будет опрошен по крайней мере один раз.
Если гибкий интервал задан равным '0', элемент данных не будет обрабатываться (обратное действие) в течении периода гибкого интервала и опрос возобновится в соответствии с Интервал обновления по умолчанию сразу как только период завершится.


Интервал Период Описание
10 1-5,09:00-18:00 Элемент данных будет опрашиваться каждые 10 секунд в течении рабочего времени.
0 1-7,00:00-7:00 Элемент данных не будет опрашиваться в течении ночи.
0 7-7,00:00-24:00 Элемент данных не будет опрашиваться по Воскресеньям.
60 1-7,12:00-12:01 Элемент данных будет опрошен ровно в 12:00 каждый день.

Оф Мануал Пользовательские интервалы
Настройка периодов времени

Начиная с Zabbix 3.0 рекомендуется использовать интервалы по расписанию для таких проверок.

Теперь все то же самое но По расписанию
Пользовательские интервалы По расписанию
По расписанию Каждое Воскресенье с 9 до 24ч опрос каждые 6 часов
По расписанию Каждое Воскресенье с 9 до 24ч опрос каждые 6 часов
По расписанию: wd7h9-23m/360 или wd7h9-23/6
wd7 - Воскресенье h9-23 с 9 до 23ч /6 - каждые 6 часов опрос

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

Интервал по расписанию Синтаксис: md<фильтр>wd<фильтр>h<фильтр>m<фильтр>s<фильтр>
md - дни месяца
wd - дни недели
h - часы
m - минуты
s – секунды
фильтр - [<от>[-<до>]][/<шаг>][,<фильтр>]

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

<шаг> определяет пропуски количества значений через диапазон.
По умолчанию значение <шаг> равно 1, что означает что все значения указанного диапазона совпадают.
Хотя добавление фильтра опционально, по крайней мере один фильтр должен использоваться.
Фильтр должен определять либо диапазон, либо значение <шага>.

Пустой фильтр соответствует либо '0', если фильтр более низкого уровня не определен, либо, в противном случае, все возможные значения. Например, если фильтр часа опущен, тогда будет соответствовать только '0', если фильтры минут и секунд также опущены, в противном случае пустой фильтр часа будет соответствовать всем значениям часа


Префикс Описание <от> <до>
md Дни месяца 1-31 1-31
wd Дни недели 1-7 1-7
h Часы 0-23 0-23 (нету не может оканчиваться на 24 и 00 это уже другой день с 0)
m Минуты 0-59 0-59
s Секунды 0-59 0-59
Значение <от> должно быть меньше или равно значению <до>.
Значение <шага> должно быть больше или равно 1 и меньше или равно <от> - <до>
К одиночным цифрам можно в начале добавлять 0
Если время совпадает по нескольким интервалам, опрос выполнится только раз.
Например, wd1h9;h9 выполнится только один раз в Понедельник в 9 утра.
Примеры из оф мануала
Показать
Интервал Когда выполнится
m0-59 каждую минуту
h9-17/2 каждые 2 часа, начиная с 9:00 (9:00, 11:00 ...)
m0,30 или m/30 каждый час в чч:00 и чч:30
m0,5,10,15,20,25,30,35,40,45,50,55 или m/5 каждые пять минут
wd1-5h9 каждый Понедельник до Пятницы в 9:00
wd1-5h9-18 каждый Понедельник до Пятницы в 9:00,10:00,...,18:00
h9,10,11 или h9-11 каждый день в 9:00, 10:00 и 11:00
md1h9m30 каждый 1ый день каждого месяца в 9:30
md1wd1h9m30 каждый 1ый день каждого месяца в 9:30, если этот день Понедельник
h9m/30 каждый день в 9:00, 9:30
h9m0-59/30 каждый день в 9:00, 9:30
h9,10m/30 каждый день в 9:00, 9:30, 10:00, 10:30
h9-10m30 каждый день в 9:30, 10:30
h9m10-40/30 каждый день в 9:10, 9:40
h9,10m10-40/30 каждый день в 9:10, 9:40, 10:10, 10:40
h9-10m10-40/30 каждый день в 9:10, 9:40, 10:10, 10:40
h9m10-40 каждый день в 9:10, 9:11, 9:12, ... 9:40
h9m10-40/1 каждый день в 9:10, 9:11, 9:12, ... 9:40
h9-12,15 каждый день в 9:00, 10:00, 11:00, 12:00, 15:00
h9-12,15m0 каждый день в 9:00, 10:00, 11:00, 12:00, 15:00
h9-12,15m0s30 каждый день в 9:00:30, 10:00:30, 11:00:30, 12:00:30, 15:00:30
h9-12s30 каждый день в 9:00:30, 9:01:30, 9:02:30 ... 12:58:30, 12:59:30
h9m/30;h10 (специфичный для API синтаксис) каждый день в 9:00, 9:30, 10:00
h9m/30
h10 (добавить это отдельной строкой в веб-интерфейсе) каждый день в 9:00, 9:30, 10:00

ПРИМЕРЫ
Архив формируется с текущей датой (нужно проверять именно в этот же день) в Понедельник в 23:30
Получаем: wd1h23m30-59/5
wd1 - Понедельник h23 - 23 часа m30-59 - с 30 по 59 минут /5 - каждые 5 минут опрос

2,3,4,5 Суббота месяца (кроме 1 недели) в 6:20 ч
Получаем: md8-31wd5-6h6-23/3
md8-31 с 8по 31 число wd5-6 пятница-суббота h6-23 с 6 по 23ч /3 каждые 3 часа опрос

Каждая первая Пятница или Суббота в месяце в 4:00 ч
md1-7wd5-6h6-23/3
md1-7 с 1 по 7 число wd5-6 пятница -суббота h6-23 с 6 до 23ч /3 каждые 3 часа

ТЕСТИРОВАНИЯ
Примеры по расписанию:

После изменения (обновления) элемента данных настройка применятся не сразу 1-2 минуты где то щелкнуто поле изменения проверить сейчас в момент изменения в последних данных +1 +2 минуты.

1. Зададим Интервал обновление 5s и тут же По расписанию зададим четверг текущий день среда
Приоритет интервал обнов 5s
Приоритет интервал обнов 5s
2. Зададим Интервал обновление 5s и тут же По расписанию зададим в каждую минуту в 20 секунд опрос Что будет приоритетнее
Приоритет ушел на 5s
Приоритет ушел на 5s
3. Зададим Интервал обновление 0s (отключим) и тут же По расписанию зададим в каждую минуту в 20 секунд опрос текущего дня
Каждые 20 сек минуты
Каждые 20 сек минуты
4. Зададим Интервал обновление 0s (отключим) и тут же По расписанию зададим в каждые 20 секунд опрос текущего дня
Каждые 20 секунд
Каждые 20 секунд
5. По расписанию укажем 20s текущий день , а Интервал обновления 5s
По расписанию 5сек приоритетнее
По расписанию 5сек приоритетнее
6. Интервал обновление поставим 0, а день проверки четверг (текущий среда)
Данных нет правильно
Данных нет правильно
7. Вернем обратно Интервал обновления 5s
Интервал обнов приоритетнее
Интервал обнов приоритетнее

Примеры по Пользовательские интервалы Переменный

1. Интервал обновления 5s , переменный 20s день воскресенье с 00:00-24:00 (текущий день проверки Среда)
1. Интервал 5s и 20s
1. Интервал 5s и 20s
2. Меняем 5s на 0 тем самым отключаем, второй параметр не совпадает день и элемент не опрашивается
2. Данные не идут (среда)
2. Данные не идут (среда)
3. Интервал 0, Пользовательский меняем с Воскресенья на Среду данные идут каждые 20s
3. Интервал 20s и 0
3. Интервал 20s и 0
4. Одновременно 5s и 20s приоритетнее 20s
4. 20s-5s
4. 20s-5s
5. Интервал 0s дата начала действия с 10:25 до этого времени опроса нет.
5. с 10 25
5. с 10 25
6. Интервал 5s , дата начала среда в 10:35, текущее время проверки 10:29 каждые 5s
6. интервал 5s работает
6. интервал 5s работает
7. Интервал 5s, Переменный 20s в Среду с 10:35. До 10:35 Интервал 5s после 10:35 интервал 20s Приоритетнее Переменный
7. было 5 после вкл 20с
7. было 5 после вкл 20с
8. Интервал 5s, Переменный 0s Отключение с 11:00 Приоритетнее Переменный
8. Отключение на время
8. Отключение на время
Вывод:
Если Интервал обновления 5s ,а Пользовательские интервалы: Переменный еще не включился время не подошло данные идут каждые 5 сек (Пример 6)
Если Интервал обновления 5s ,а Пользовательские интервалы: Переменный 20s включен опрос идет каждые 20 секунда а не 5с (Пример 4)
Если Интервал обновления 0s ,а Пользовательские интервалы: Переменный еще не включился время не подошло данных нет (Пример 5)
Если Интервал обновления 0s ,а Пользовательские интервалы: Переменный 20s включен опрос идет каждые 20 секунд (Пример 3)

Получаем Интервал обновления приоритетнее, когда Пользовательские интервалы еще не включились по времени,
после включения приоритет уходит на Пользовательские интервалы
аналогично с Пользовательские интервалы 0 отключают данные после начала действия времени, при условии что Интервал обновления 5s

По расписанию если время выполнения пришло приоритет все равно есть у Интервал обновления 5s (Пример 2, 5)
количество слов: 574
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Пользовательские интервалы в Элементах данных

Сообщение Артём Мамзиков »

Условие Триггера нет данных с 1-ой Пятницы предыдущего месяца, по 1-ую Пятницу текущего месяца.
Кол-во Недель в месяце в определенный день недели
Кол-во Недель в месяце в определенный день недели
Получаем 35 дней 5 недель или 28 дней 4 недели.
35 - 28 = 7 дней неделя
Если мы укажем нет данных 35 дней, то при 4-х неделях об ошибке мы узнаем только спустя еще одну неделю как то не очень.
А если укажем 28 дней, то при 5 неделях ошибка выйдет раньше на неделю так нас тоже не устраивает.
И что же делать? Давайте разбираться.

Соберем какие данные у нас есть
7 дней неделя
Текущий номер недели
Кол-во дней в месяце
Текущее число
Текущий день недели

3 дня (1,2,3 число) совпадают на 5 недель из 31 дня
2 дня (1.2число) совпадают на 5 недель из 30 дней
1 день (1число) совпадают на 5 недель из 29 дней (февраль)

Если у нас 3 число Понедельник - Четверг дней 31 то Пятниц будет 4
Если 3 число Пятница - Воскресенье дней 31 то Пятниц будет 5
Для 30 и 29 Дней сдвигаемся на 1 день вперед


Далее я экспериментировал по разному:
число + текущий день + номер недели далее если оно больше скольки то то будет 5 недель меньше 4
из количества дней в месяце вычесть неделю
Прикидываем разные расчеты
Прикидываем разные расчеты
c 22 включительно проверка
22+5=27

31-27=4
30-27=3
29-27=2
28-27=1

Если 1 пятница
31-22=9
30-22=8
29-22=7
28-22=6 не попадает

Если 2 пятница
31-23=8
30-23=7
29-23=6 не попадает

Если 3 пятница
31-24=7
30-24=6 не попадает


Число + день недели Для 31 Для 30 Для 29 до 22
1+5=6 31-6=25 30-6=24 29-6=23
2+5=7 31-7=24 30-7=23 29-7=22
3+5=8 31-8=23 30-8=22 29-8=21

Какой вывод ?
Да есть рабочие способы, но все они работают для текущего месяца, как только наступает следующий месяц все расчеты уменьшаются и попадают под срабатывание триггера, а нам еще 1-ую пятницу ждать надо.
Можно еще сделать захват предыдущего месяца расчеты одни до 6 числа , а после 6 уже для текущего в данном варианте но все это слишком громоздко.


Решение оказалось намного проще и оно было на поверхности.
Делаем условие триггера для срабатывания:
Неделя у нас 1-вая и
Текущий день недели Пятница и
Нет данных 28 дней

И получаем триггер который будет срабатывать только в 1 пятницу месяца если все условия выполняются.



Как получить некоторые данные для триггера ?
Я делал через глобальный макрос
Пример в середине поста ТЕКУЩАЯ ДАТА в Элементе данных , макрос в zabbix
Там рассматривается несколько способов.

Я же сделал в MySQL через Процедуры и События.

Немного подробнее:
SELECT WEEK(CURDATE(), 1) - номер недели в году для текущей даты

Номера текущей недели Вычесть номер недели первого числа этого же месяца и прибавить единицу
SELECT WEEK(CURDATE(),1)-WEEK(DATE_FORMAT(CURRENT_DATE(),'%Y-%m-01'),1)+1
В заббикс
UPDATE `globalmacro` SET `value` = WEEK(CURDATE(),1)-WEEK(DATE_FORMAT(CURRENT_DATE(),'%Y-%m-01'),1)+1 WHERE `globalmacro`.`macro` = '{$WEEK_NUMBER_MONTH}';

7 дней * кол-во недель - текущее число =
36 дней 5недель (или 29 дней 4недели этого дня недели)
29:4=7.25
36:4=9
36:5=7.2


День недели для текущего дня.
(1 = воскресенье, 2 = понедельник, ... 7 = суббота)
SELECT DAYOFWEEK(CURDATE())
(0 =понедельник, 1 = вторник, ... 6 = воскресенье)
SELECT WEEKDAY(CURDATE());
UPDATE `globalmacro` SET `value` = WEEKDAY(CURDATE())+1 WHERE `globalmacro`.`macro` = '{$WEEK_DAY}';

Кол-во дней в текущем месяце
SELECT RIGHT( LAST_DAY(CURDATE()),2)
SELECT DAY(LAST_DAY(CURDATE()))
SELECT DAY(LAST_DAY(now()))
UPDATE `globalmacro` SET `value` =DAY(LAST_DAY(CURDATE())) WHERE `globalmacro`.`macro` = '{$DAYS_CURRENT_MONTH}';


В Итоге получаем такую процедуру в MySQL
BEGIN

UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%Y.%m.%d') WHERE `globalmacro`.`macro` = '{$DATE}';
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%Y%m%d') WHERE `globalmacro`.`macro` = '{$DATEYYYYMMDD}';
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%d.%m.%Y') WHERE `globalmacro`.`macro` = '{$DATEDD.MM.YYYY}';
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%Y') WHERE `globalmacro`.`macro` = '{$DATE_YYYY}';
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%m') WHERE `globalmacro`.`macro` = '{$DATE_MM}';
UPDATE `globalmacro` SET `value` = DATE_FORMAT(CURRENT_DATE(), '%d') WHERE `globalmacro`.`macro` = '{$DATE_DD}';
UPDATE `globalmacro` SET `value` = WEEK(CURDATE(),1)-WEEK(DATE_FORMAT(CURRENT_DATE(),'%Y-%m-01'),1)+1 WHERE `globalmacro`.`macro` = '{$WEEK_NUMBER_MONTH}';
UPDATE `globalmacro` SET `value` = WEEKDAY(CURDATE())+1 WHERE `globalmacro`.`macro` = '{$WEEK_DAY}';
UPDATE `globalmacro` SET `value` =DAY(LAST_DAY(CURDATE())) WHERE `globalmacro`.`macro` = '{$DAYS_CURRENT_MONTH}';

END
Процедуры MySql даты глобальный макрос
Процедуры MySql даты глобальный макрос
Получаем Глобальные макросы
Глобальные Макросы
Глобальные Макросы

Сам Триггер

Имя:
Файл {$DATEDD.MM.YYYY}_-7d.7z 1-ая Неделя старый или отсутствует

Выражение проблемы
{$WEEK_NUMBER_MONTH}=1 and

({$WEEK_DAY}=5 or
{$WEEK_DAY}=6) and

({fs-nas-agent:vfs.file.exists["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].max(676h)}=0 or

{fs-nas-agent:vfs.file.time["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z",modify].fuzzytime(820h)}=0 or

{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last(#2)}/{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last()}<0.9 or

{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last()}/{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last(#2)}>1.1)

Выражение восстановления
{fs-nas-agent:vfs.file.exists["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].max(676h)}=1 or

{fs-nas-agent:vfs.file.time["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z",modify].fuzzytime(820h)}=1 or

{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last(#2)}/{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last()}>=0.9 or

{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last()}/{fs-nas-agent:vfs.file.size["\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z"].last(#2)}<=1.1

Описание
Каждая первая Пятница или Суббота в месяце
\\192.168.175.27\FULL_mounts\{$DATEDD.MM.YYYY}_-7d.7z

Проверки:
1.Наличие файла за 35 дней 5недель (или 28 дней 4недели этого дня недели 28*24ч=672ч+4ч=676ч) (текущий день проверки не считаем)
2.Дата изменения файла +6д не более 41 дней ( или 34 дней * 24=816ч+4=820ч)
3.Проверяем что файл не битый и увеличения размера происходит нормально.
Старый размер делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1

День недели 5-пятница 6 суббота
{$WEEK_DAY}=5 или
{$WEEK_DAY}=6 и
Неделя в месяце 1-вая
{$WEEK_NUMBER_MONTH}=1

Сразу в триггер можно сравнивать значение макроса что очень хорошо, не нужно прогонять через элемент данных.
Заметьте что в триггере добавлены () скобки для правильного создания условий И ИЛИ !

Триггер каждая первая пятница месяца
Триггер каждая первая пятница месяца
Триггер каждая первая пятница месяца Тест
Триггер каждая первая пятница месяца Тест
Еще пример одного Триггера
Триггер 2 3 4 5 пятница месяца
Триггер 2 3 4 5 пятница месяца
Пример Шаблона проверки файлов по определённым дням
Копии на NAS Zabbix agent.zip
Копии на NAS Zabbix agent.zip
(3.73 КБ) 13 скачиваний
Изначально все это было создано на BAT скриптах проверка после траппером скидывалось в заббикс в шаблон подключенный к узлу
Скрипты
количество слов: 715
Ответить Вложения 26 Пред. темаСлед. тема

Вернуться в «Вопросы по Zabbix»