Zabbix, autodiscovery и пользовательские макросы, как подружить?
Всем привет.
Возникла задача соединить каким то образом autodiscovery и user macros в zabbix, и не пойму как это сделать удобнее всего.
Что имеем.
Есть discovery rule, который дергает скрипт, выдающий по переданному пути список имен лог файлов в указанной директории. На основании этой выдачи генерируется ряд item, которые в свою очередь являются userparameter'ами.
Эти userparameter - скрипт, принимающий на вход ряд параметров (hostname/logname/collect_type, time shift, etc), и на выходе выдает различные значения (количество определенных response code, суммарное кол-во событий в логе, количество событий с req_time>100ms, etc.).
Встала задача, исключить из обработки одного из userparameter определенные лог файлы.
Из пожеланий, хотелось бы чтобы список этих исключений задавался в настройках каждого хоста как макрос.
Как оказалось их нельзя использовать в прототипах autodiscovery.
Попытались создать items на хосте system.run[/bin/echo {$LOG_EXCLUDES}], и его дергать на хосте при помощи zabbix_get. Не выходит, вероятно потому что агент нифига не знает про такую переменную.
Из решений, которые видятся на данный момент, выделить эти userparameter в отдельный discovery rule, и задавать ограничения в его фильтре на каждом хосте, что на мой взгляд не очень прозрачно.
Хотелось бы как то передать в скрипт userparametr'а список файлов из макроса. Но никак не соображу как это сделать.
Кстати, все решилось созданием отдельного item (обычный, не prototype), который создает файл со списком exclude'ов, а уже этот список тащит в себя скрипт агрегации.
Неудобно, негибко. Пока работает.
LLD прекрасно поддерживает свои скрипты, единственное они должны отдавать данные в json формате, ничего сложного в написании нет, можно в скрипте использовать любые фильтры и логику. Ваша задача лично от меня далека, но у меня есть несколько самописных LLD скриптов для заббикса и примеры их использования. Посмотрите эту ветку на форуме https://www.zabbix.com/forum/showthread.php?t=28870 есть примеры скриптов как от меня, так и от других участников форума, думаю разберетесь.
Я рад что у вас все хорошо. Перечитайте пожалуйста еще раз вопрос. Проблема в том что для prototype item нельзя в качестве ключа указать user macros. Я ищу решение.
ptchol: Вам не надо указывать в качестве ключа prototype item, вам нужно чтоб ваш LLD скрипт возвращал данные уже отсортированными в нужном формате. То-есть в заббикс уже изначально попадают только нужные данные, а не весь мусор скопом, а на шаблонах из нужных параметров уже применяете макросы. Вы хотите исключить из выборки определенные файлы, так пусть в json ответе скрипта их просто не будет. Ну это конечно если вы хотите решить свою задачу, а не доказать что она нерешаемая.
ptchol: Не обязательно, тут уже зависит от логики вашего скрипта, скрипту можно передавать на вход любые параметры, включая макросы. Хотя я вот лично люблю разделать шаблоны на много мелких, из чего можно собрать разные варианты, а потом делать еще шаблоны объединяющие несколько более мелких, так что можно и разделить на несколько, а потом объединить их в единый, чтоб удобней навешивать на узлы.
ptchol: Если "лишних" не много, то почему бы и нет, у меня есть узлы, на которых обычным LLD я получу скажем 20000 лишний items и 40-50 нужных, простой пример BRAS где мне надо мониторить аплинки и некоторые виланы, но не нужны юзерские сессии, кроме общего их количества, вашей специфики не знаю, тут только вам решать или спрашивать более конкретный вопрос.
Сергей Петриков: Вопрос довольно конкретный. Как создать при помощи LLD итем, у которого в качестве аргумента будет user macros задаваймый на каждом хосте.
Сергей Петриков: Запросто :) прототип хочется создать такого такого вида
nginx.log.collector[{HOST.NAME},{#LOG},nginx.log.last_1_min_long_responses_count,inotify,10 sec ago,{$NGINX_EXCLUDE_LOGS}]
В свою очередь $NGINX_EXCLUDE_LOGS это макрос хоста.
Бинго. В этом и проблема. Регэксп можно, но придется итемы которые мы хотим "отфильтровать", выделит ь в отдельный discovery rule. И это опять же неудобно потому что условие внутри рула. А мы храним множество "свойств" хоста при помощи макросов.
Про все это я и написал в описании вопроса :)
Больше идей, больше ! :). Даже костыльных на ваш взгляд :)
Сергей Петриков: логи анализируются скриптом, он только сендид данные в заббикс. Переписывать полностью реализацию сбора данных и разворачивать это на обширном парке серверов не хочется
ptchol: Тогда дать денег разработчикам заббикса за реализацию поддержки макросов где нужно. В рассылке разработчиков я упоминаний об похожей фишке не встречал, так-что все равно придется что-то переделывать, а тут уже варианты, либо скрипт, которому просто не нужно будет передавать нужный макрос, например сам будет дергать при запросе что-то из базы заббикса (группу узла сети как вариант), либо делать по другому совсем.
Сергей Петриков: это как то не "по инжинерному". Правила не хочется разделять потому, что на их базе уже создано куча графиков и скринов. разделение потребует переделке их всех. поскольку новые итемы будуn новые =(
Написано только что