Ad Widget
Collapse
Расширяем snmp lld скриптами
Collapse
X
-
Регулярное выражение писать, что то вродеи забить на "type", раз оно ничего не идентифицирует, но это костыли. Что бы удобно и быстро помечать интерфейсы маршрутизаторов которые нужно мониторить я придумал {$LLD_IF_FLAG}, а что бы мониторить сабы, которые появляются только в точке PE-CE придумал {$MPLS_VRF_RD}. Если ни флаги ни RD не устраивают, то только регулярные выражения, или грубый {$LLD_IF_REGEX} или гибкие встроенные в заббикс, но с последними будут некоторые сложности при модификации шиблона, так как ссылка на используемое регулярное выражение есть по сути опция элемента данных - правила дискаверинга.Code:,ae\d+,
P.S. разбирайтесь и включайте фантазию, zabbix в первую очередь инструмент, а не тупорылое готовое решениеComment
-
С zabbix опыт маленький, хотелось бы задать вопрос.
Попробовал установить скрипт.
1) Исправил скрипт из поста 46(перекопировал последний кусок "Output in JSON format")
2) Скопировал скрипт в папку externalscripts, прописал chmod a+x на файл скрипта.
3) Добавил regexp
4) Импортировал шаблон и привязал его к хосту
5) Макросы комьюнити и порта на хосте прописал.
Элементы данных не находит.
При запуске
Скрипта из командной строки пишет следующие:
Usage: /usr/lib/zabbix/externalscripts/script.pl <host> <port> <community> [RD] [flag] [regex] at /usr/lib/zabbix/externalscripts/script.pl line 10.Comment
-
Проверка очень простая: менее трех аргументов. Шаблон + глобальные регекспы я тоже прикладывал.Code:die "Usage: $0 <host> <port> <community> [RD] [flag] [regex]\n" if scalar @ARGV < 3;
Code:zbx[root]:.../LLD # perl cisco_ifmib.pl x.x.1.1 161 public | wc -l 170Comment
-
Спасибо за помощь.
Вывод следующий:
zabbix@ubuntu:~$ perl /usr/lib/zabbix/externalscripts/script.pl 192.168.45.129 161 minsk | wc -l
0
Если без параметра "wc -l", то выводит куча текста(интерфейсы, статус и т.д.)
Получается, на прямую скрипт работает?
Шаблон и регулярные выражения брал ваши из сообщения 46, только скрипт немного подправил, как вы указали в сообщение 87.
Имена регулярных выражения с пробелами(LLD IF 64) или с подчеркиваниями(LLD_IF_64) надо вводить?

На узле в макросах указал
1. {$SNMP_COMMUNITY} -> Bel
2. {$SNMP_PORT} -> 161
На данный момент пишет в "Состояние" - не поддерживается "Инфо" - Value should be a JSON object
Что-то не так со скриптом?(приложил к посту)Attached FilesComment
-
Показывайте вывод, можно в приват или ссылку на файлик в dropbox.
Вроде все верно.Шаблон и регулярные выражения брал ваши из сообщения 46, только скрипт немного подправил, как вы указали в сообщение 87.
Так как указано в полях "фильтр" у правил дискаверинга в шаблоне.Имена регулярных выражения с пробелами(LLD IF 64) или с подчеркиваниями(LLD_IF_64) надо вводить?
Не нравится ему то что возвращает скрипт. Возможно что скрипт ругается, но в версии 2.0 zabbix ругань скрипта выводил у себя в логе, поэтому форматировал свою ругань (функцию error намулевал), но на сколько я понял толи в 2.2 толи в 2.4 все поломали и теперь zabbix пытается анализировать STDERR как возвращаемое значение.На данный момент пишет в "Состояние" - не поддерживается "Инфо" - Value should be a JSON object
Посмотрите внимательно лог сервера, вдруг таки там есть ошибки.
Скорее всего или сервер не может запустить скрипт (проблемы с правами, path к интерпритатору, кстати, запустите не через perl а просто скрипт, выполнится?) либо проблемы у скрипта - не может соединится с железкой (либо ошибки в передаче параметров и как следствие адрес не тот или вообще каша вместо него, либо не может постать/получить snmp пакетики, например файрволы хитрые мешаются, sulinux-ы и прочие).Comment
-
Поставил готовое решение на OpenSuse с zabbixa 2.0.9 + неисправленный скрипт из 46 поста, regexp, импортировал шаблон, привязал. Ошибок нет, логи чистые. С path - все ок, без "perl" скрипт запускается. На папку externalscripts и сам файл скрипта стоят правила 0777(через WinSCP прописывал)Показывайте вывод, можно в приват или ссылку на файлик в dropbox.
Вроде все верно.
Так как указано в полях "фильтр" у правил дискаверинга в шаблоне.
Не нравится ему то что возвращает скрипт. Возможно что скрипт ругается, но в версии 2.0 zabbix ругань скрипта выводил у себя в логе, поэтому форматировал свою ругань (функцию error намулевал), но на сколько я понял толи в 2.2 толи в 2.4 все поломали и теперь zabbix пытается анализировать STDERR как возвращаемое значение.
Посмотрите внимательно лог сервера, вдруг таки там есть ошибки.
Скорее всего или сервер не может запустить скрипт (проблемы с правами, path к интерпритатору, кстати, запустите не через perl а просто скрипт, выполнится?) либо проблемы у скрипта - не может соединится с железкой (либо ошибки в передаче параметров и как следствие адрес не тот или вообще каша вместо него, либо не может постать/получить snmp пакетики, например файрволы хитрые мешаются, sulinux-ы и прочие).
Но элементов данных нет.
Отрубил все хосты с мониторинга, кроме тестового, с этим скриптом, и решил поснифирить, нет пакетов с протоколом SNMP, получается, скрипт он не запускает(проверил с другими шаблонами, SNMP протокол тоже не видит, значит заббикс, как-то не на прямую по SNMP запрашивает).
Есть какие-нибудь советы?Last edited by PacMan; 17-02-2015, 16:33.Comment
-
А вы уверенны что он вообще запускается забиксом? В моем шаблоне интервал для правил дискаверинга 3 часа, надо или ждать или временно уменьшить интервал, но последнее действие так же не произойдет мгновенно, сервер узнает о том что вы изменили интервал только после обновления кэша конфигурации, как часто обновлять кэш указывается в конфигурации zabbix-сервера.
Еще вариант, что бы наверняка, добавить в начало скрипта:
open(LOG, ">>", "/tmp/mylldscript.log"); print LOG time, "\n";
а в конец скрипта можно добавить еще
print LOG encode_json({ data => \@data });
или (если не исправляли вывод и не добавляли use JSON
можно просто сдампить содержимое хеша добавив в конце скрипта
И еще момент. Правило LLD это по сути обычный элемент данных, соответсвенно у него есть статус и он отображается в интерфейсе. Если там стоит зеленая галочка, то либо сервер получает валидный JSON (но в вашем случае пустой из-за неправильных фильтров или других ошибок), либо элемент-правило еще ни разу не пулилось. Если же статус правила красный, то можно быстро разобраться в проблеме добавив отладку как я написал выше.Code:use Data::Dumper; print LOG Dumper(\%json);
Comment
-
Скрипт вроде запускается, поставил время обнаружения 60 секунд, а обновление данных 30, снифером вижу SNMP запросы и ответы, отключаю обнаружения - SNMP пропадаетА вы уверенны что он вообще запускается забиксом? В моем шаблоне интервал для правил дискаверинга 3 часа, надо или ждать или временно уменьшить интервал, но последнее действие так же не произойдет мгновенно, сервер узнает о том что вы изменили интервал только после обновления кэша конфигурации, как часто обновлять кэш указывается в конфигурации zabbix-сервера.
Еще вариант, что бы наверняка, добавить в начало скрипта:
open(LOG, ">>", "/tmp/mylldscript.log"); print LOG time, "\n";
а в конец скрипта можно добавить еще
print LOG encode_json({ data => \@data });
или (если не исправляли вывод и не добавляли use JSON
можно просто сдампить содержимое хеша добавив в конце скрипта
И еще момент. Правило LLD это по сути обычный элемент данных, соответсвенно у него есть статус и он отображается в интерфейсе. Если там стоит зеленая галочка, то либо сервер получает валидный JSON (но в вашем случае пустой из-за неправильных фильтров или других ошибок), либо элемент-правило еще ни разу не пулилось. Если же статус правила красный, то можно быстро разобраться в проблеме добавив отладку как я написал выше.Code:use Data::Dumper; print LOG Dumper(\%json);
Попробую опять заново Zabbix с нуля накатить 2.0.9 и 2.4 с вашими исправлениями со скриптами.Comment
-
Не мучайтесь с 2.0, ставьте 2.4. В скрипт отладку как я написал выше и ищите где ошибка, явно что то с фильтрами раз скрипт нормально работает из командной строки и снифером вы видите что забиксом он тоже запускается. Напутали где то или в глобальных regexp или в пользовательских макросах, ну или не до конца поняли принцип фильтрации который я реализовал в своем шаблоне.
P.S. по умолчанию мой шаблон выгребает только интерфейсы которые "помечены" на оборудовании добавлением в дескрипшен метки '[D]', вы это учли? Если вам нужно просто выгрести все интерфейсы без разбора то надо определить на хосте пользовательский макрос {$LLD_IF_FLAG} со значением 0 или вообще не задавать значение. Обратите внимание на макросы определенные в самом шаблоне.Comment
-
Спасибо большое за помощь, на 2.0.9, не был добавлен "{$LLD_IF_FLAG}" в макросы, забил в макрос со значением "0" и все подтянулось.Не мучайтесь с 2.0, ставьте 2.4. В скрипт отладку как я написал выше и ищите где ошибка, явно что то с фильтрами раз скрипт нормально работает из командной строки и снифером вы видите что забиксом он тоже запускается. Напутали где то или в глобальных regexp или в пользовательских макросах, ну или не до конца поняли принцип фильтрации который я реализовал в своем шаблоне.
P.S. по умолчанию мой шаблон выгребает только интерфейсы которые "помечены" на оборудовании добавлением в дескрипшен метки '[D]', вы это учли? Если вам нужно просто выгрести все интерфейсы без разбора то надо определить на хосте пользовательский макрос {$LLD_IF_FLAG} со значением 0 или вообще не задавать значение. Обратите внимание на макросы определенные в самом шаблоне.
Поставил Debian на него установил 2.4 + исправленный скрипт и все пошло, наверное был какой-то косяк с библиотеками.
А возможно как-то в скрипте прописать так, чтобы в графиках он не только тип интерфейса показывал, но и description подтягивал?Comment
-
Тип в графиках? Вы имеете в виду название графиков? Ну так измените название графика в шаблоне так как вам надо, вы же видите содержимое json, можете использовать макросы {#....} как вам нравится.Comment
-
Comment
Comment