Начну издалека, с постановки задачи.
Мне надо мониторить папки на сервере по времени изменения последнего файла в каждой из них. Т.е. туда пишутся данные, и если данные писаться перестали, я хочу получить сработавший триггер.
Я придумал сделать perl-скрипт, который выдает нужные мне данные в json-формате, поскольку заббикс вроде бы должен их в этом формате поддерживать. Позже как настрою заббикс - допишу реальный скрипт, а пока тестовый перл-скрипт это заглушка, которая выдает нужные мне данные. Вот он:
DIRNAME - имена папок, которые будут создаваться, надо чтобы скрипт добавлял их к мониторингу по мере необходимости.
DIRTIME - число секунд, прошедшее с момента последнего изменения файлов в этой папке. Надо чтобы триггер срабатывал, например если это число превысило 3600.
Сначала я добавляю на клиенте в zabbix_agentd.conf:
UserParameter=last_act,C:\scripts\perl.exe C:\scripts\dir_mon.pl
Далее, я создаю шаблон dir_monitor и правило обнаружения.
Прототип элементов данных выглядит так:
Имя: {#DIRNAME} последнее обновление {#DIRTIME}
Тип: zabbix agent (активный)
Ключ: (вот тут не понял, какой мне нужно прописато ключ), прописал туда last_act.[{#DIRTIME}].
Вообще-то по моим представлениям ключ у меня вроде {#DIRTIME}, поскольку именно он у меня содержит нужное поле, но заббикс ругается на синтаксис.
Тип данных какой выбрать? Строка, число, разницы нет...
Далее, открываю узлы сети, свой узел, и там вижу свои данные: 5 строк:
dir_monitor: e:/dir1 последнее обновление 501
...
Т.е. данные в общем-то видны, скрипт выполняется, но вот если открыть мониторинг - обзор, то 5 элементов данных "последнее обновление" есть, а вот значений у них нет. Соответственно, и триггер не могу назначить.
Как тут решить задачу? Я смотрел примеры из других шаблонов - там в качестве ключа выступают всякие "vfs.fs.size[{#FSNAME},free]", net.if.in[{#IFNAME}] и т.п, т.е. функции от передаваемого параметра, а мне надо именно сам параметр {#DIRTIME} передавать. Заббикс выдает ошибку
"Ошибочный ключ "{#DIRTIME}" для прототипа элементов данных"
У меня zabbix 3.0.
Мне надо мониторить папки на сервере по времени изменения последнего файла в каждой из них. Т.е. туда пишутся данные, и если данные писаться перестали, я хочу получить сработавший триггер.
Я придумал сделать perl-скрипт, который выдает нужные мне данные в json-формате, поскольку заббикс вроде бы должен их в этом формате поддерживать. Позже как настрою заббикс - допишу реальный скрипт, а пока тестовый перл-скрипт это заглушка, которая выдает нужные мне данные. Вот он:
Code:
print '
{
"data": [
{
"{#DIRNAME}": "e:/dir_1",
"{#DIRTIME}": "501"
},
{
"{#DIRNAME}": "e:/dir_2",
"{#DIRTIME}": "502"
},
{
"{#DIRNAME}": "e:/dir_3",
"{#DIRTIME}": "503"
},
{
"{#DIRNAME}": "e:/dir_4",
"{#DIRTIME}": "504"
},
{
"{#DIRNAME}": "e:/dir_5",
"{#DIRTIME}": "505"
}
]
}
';
DIRTIME - число секунд, прошедшее с момента последнего изменения файлов в этой папке. Надо чтобы триггер срабатывал, например если это число превысило 3600.
Сначала я добавляю на клиенте в zabbix_agentd.conf:
UserParameter=last_act,C:\scripts\perl.exe C:\scripts\dir_mon.pl
Далее, я создаю шаблон dir_monitor и правило обнаружения.
Прототип элементов данных выглядит так:
Имя: {#DIRNAME} последнее обновление {#DIRTIME}
Тип: zabbix agent (активный)
Ключ: (вот тут не понял, какой мне нужно прописато ключ), прописал туда last_act.[{#DIRTIME}].
Вообще-то по моим представлениям ключ у меня вроде {#DIRTIME}, поскольку именно он у меня содержит нужное поле, но заббикс ругается на синтаксис.
Тип данных какой выбрать? Строка, число, разницы нет...
Далее, открываю узлы сети, свой узел, и там вижу свои данные: 5 строк:
dir_monitor: e:/dir1 последнее обновление 501
...
Т.е. данные в общем-то видны, скрипт выполняется, но вот если открыть мониторинг - обзор, то 5 элементов данных "последнее обновление" есть, а вот значений у них нет. Соответственно, и триггер не могу назначить.
Как тут решить задачу? Я смотрел примеры из других шаблонов - там в качестве ключа выступают всякие "vfs.fs.size[{#FSNAME},free]", net.if.in[{#IFNAME}] и т.п, т.е. функции от передаваемого параметра, а мне надо именно сам параметр {#DIRTIME} передавать. Заббикс выдает ошибку
"Ошибочный ключ "{#DIRTIME}" для прототипа элементов данных"
У меня zabbix 3.0.
Comment