Нужно включить режим отладки в веб-интерфейсе Zabbix (добавьте своего пользователя в группу Debug), перезайти в интерфейс, получить наверху справа ссылку "Debug"|"Отладка", ткнуть в неё после получения соотв. результатов на странице - там будут запросы API и запросы напрямую в СУБД.
Ad Widget
Collapse
Perl Zabbix API: всё одной командой и море документаци
Collapse
X
-
По сути Zabipi: если у кого-то есть желание, готов реализовать объектно-ориентированным образом или хотя бы с претензией на ОО-подобность.
Сейчас явное ограничение Zabipi - можно одновременно использовать только одно "подключение" к Zabbix-фронтенду. В ООП эта проблема бы решилась, но мне крайне неудобно то, что всё окружение объекта нужно хранить в $self->{'variable_name'}. Я уже пытался переписать код Zabipi на ООП с хитрыми замыканиями, чтобы всё-таки использовать локальные переменные уровня объекта, но там тоже возникли проблемы.Comment
-
Попытки натянуть на Перл ОО логику других языков ни чем хорошим не заканчивается. Большинство ОО "выкрутасов" не более чем просто ограничения компиляторов, удобно, но если речь не идет о проекте разрабатываемом сотней девелоперов, то без этих удобств можно обойтись.
А еще рекомендую прочитать про лямбда-выражения в java, сколько они ходили кругами вокруг, но в конце концов добавили в язык ссылки на функции, а все эти годы просто думали как бы это представить в таком виде что вроде как это это и не ссылки.
Короче, не мучай тебе голову и мягкое место, $self->{} ни чем не хуже, ты же не фреймворк собираешься разрабатывать.
P.S. если будешь писать переписывать, то обрати внимание на реализацию неблокируемого коннекта, она не очевиднаLast edited by Jimson; 18-01-2016, 15:40.Comment
-
Спасибо большое за совет. Отладка сильно облегчает понимание.Нужно включить режим отладки в веб-интерфейсе zabbix (добавьте своего пользователя в группу debug), перезайти в интерфейс, получить наверху справа ссылку "debug"|"Отладка", ткнуть в неё после получения соотв. результатов на странице - там будут запросы api и запросы напрямую в СУБД.Comment
-
Закоммитил поддержку сохранения authToken'а (он же zabbix session id) в cookie-файл после успешной авторизации.
Для того, чтобы сохранить токен в куки-файл, добавьте путь к файлу куки после login и password - параметров в методе zbx('auth')
Пример:
Но более жизненным является пример, в котором авторизация (создание новой сессии) осуществляется только после неудачной авторизации с использованием куки-файла:Code:zbx('auth', 'admin', 'zabbix', '/tmp/cookies.txt');
Для чего это нужно? Для того, чтобы не засорять базу данных записями для новых сессий и вообще по возможности не писать в базу даже тогда, когда в этом нет никакой необходимости (каждый auth, он же user.login приводит к созданию новой сессии). Также такой подход избавляет от необходимости удалять сессию явным образом после работы с API (если не удалять, таблица sessions в базе очень скоро вырастет до неприличных размеров).Code:Monitoring::Zabipi->new($host_or_url,$apiPars); unless ( zbx('cookieAuth', 'cookies.txt') ) { zbx('auth',$login,$pass) or die "I cant authorize you on ${host_or_url}, reason: ".zbx_last_err(); }Comment
-
Подскажите, при помощи Zabipi можно создать отчёт о котором я спрашивал в этой теме?
P.S. Прошу прощения за корявый пост, с телефона пишу.Last edited by araneon; 14-12-2016, 17:22.Comment
-
Для неискушенных в перле(хотя могут ли быть такие среди пользователей):
Monitoring::Zabipi->new нужно вызывать либо с просто с адресом хоста (если не используете https), либо с полным путем до api_jsonrpc.php (если используете перенаправление с http на https
То есть илиилиCode:Monitoring::Zabipi->new('zabbix.example.org');Зы не забывайте мониторить что ваши API вызовы отрабатывают. А то я как-то внезапно на https переехал, а потом пару дней не мог понять "вроде все ок, но чего-то не зватает", оказалось Zabipi ругаетсяCode:Monitoring::Zabipi->new('https://zabbix.example.org/zabbix/api_jsonrpc.php');Пулреквеста сейчас к сожалению не будет, глянул код и быстро поправил ссылку, может быть как-нить потом найду времени сделать, если до меня никто не пришлет.Code:** POST http://zabbix.logol.ru ==> 200 OK Cant get API version info: Unknown content-type in response headers API not initialized yet, use "new" method with the correct parameters and check its return code
Зы Андрей, спасибо за отличную штуку.Comment
-
Господа, приветствую.
Столкнулся с такой штукой в использовании данного модуля.
Если указать такой запрос
то он должен возвратить не хеш, а количество найденных.Code:zbx('user.get', { "countOutput" => "true", "filter"=>{"alias"=>э123э},
Но это вызывает ошибку
Can't use string ("1") as an ARRAY ref while "strict refs" in use at /usr/lib/zabbix/alertscripts//Monitoring/Zabipi.pm line 338.
Т.к. Андрей жестко считает, что переменная - ссылка на массив my ($ans,$flags)=@_; и or !@$ans;
Никто не изменял, чтобы можно было получить кол-во?
Пока ждал авторизации решил,
перед 338 строкой доьавил
Code:if(ref($ans) ne 'ARRAY'){$ans=[$ans]};Comment
-
Несмотря на древность модуля и его ограничения, в нём что-то уже столько всего полезного накопилось, что жалко отказываться.
Так что продолжаю потихоньку развивать от случая к случаю.
Теперь есть Monitoring::Zabipi::SetEnv для чтения конфига подключения в shell-формате (обратите внимание на расстановку кавычек):
ZBX_URL='https://zabbix.example.com/api_jsonrpc.php'
ZBX_LOGIN=api-user
ZBX_PASS='Strong Password "Yeah!"'
PERL_LIBS="/opt/perl5/lib"
При этом PERL_LIBS применяется в самом начале скрипта, так что можно не экспортировать специально переменные окружения и не писать use lib .
Также doItemNameExpansion в Monitoring::Zabipi::Common стал делать свою работу по замене позиционных макросов намного качественнее (что весьма актуально при переходе с Zabbix 5.x на 6 b выше).
Comment
Comment