И вот снова прилив гиперактивности, значит пора продолжать серию постов по api zabbix. Сегодня разберем не самые сложные, но очень важные темы - группы узлов и пользователей. Честно признаться, именно из-за них мне и пришлось в свое время погружаться в api, поскольку именно их нельзя мигрировать с одного сервера на другой через шаблоны.
Группы узлов сети (Host groups)
Казалось бы, мы только недавно разговаривали про пользователей, значит, логично было бы продолжить говорить про группы пользователей. Однако, zabbix устроен немного сложнее. И чуть дальше вы поймете, почему мы разбираем все именно а таком порядке.
Документацию по группам узлов сети можно посмотреть здесь.
Поскольку в своей работе вы вряд ли будете использовать данный функционал чаще, чем раз в несколько лет, разберем только базовые:
- hostgroup.create - · создание новых групп узлов сети
- hostgroup.delete - · удаление групп узлов сети
- hostgroup.get - · получение групп узлов сети
Начнем с самого часто нужного:
hostgroup.get
Как и с user.get, если мы запросим у zabbix список групп без фильтров, мы получим только базовую информацию:
Но мы видим, что некоторым группам уже принадлежат узлы сети:
Запросим у API также список хостов через флаг selectHosts:
Вывод поменяется для двух групп:
{'groupid': '2', 'name': 'Linux servers', 'flags': '0', 'uuid': 'dc579cd7a1a34222933f24f52a68bcd8',
'hosts': [{'hostid': '10651', 'proxyid': '0', 'host': 'test-client', 'status': '0', 'ipmi_authtype': '-1', 'ipmi_privilege': '2', 'ipmi_username': '', 'ipmi_password': '', 'maintenanceid': '0', 'maintenance_status': '0', 'maintenance_type': '0', 'maintenance_from': '0', 'name': 'test-client', 'flags': '0', 'templateid': '0', 'description': '', 'tls_connect': '1', 'tls_accept': '1', 'tls_issuer': '', 'tls_subject': '', 'custom_interfaces': '0', 'uuid': '', 'vendor_name': '', 'vendor_version': '', 'proxy_groupid': '0', 'monitored_by': '0', 'inventory_mode': '-1', 'active_available': '0', 'assigned_proxyid': '0'}]}
{'groupid': '4', 'name': 'Zabbix servers', 'flags': '0', 'uuid': '6f6799aa69e844b4b3918f779f2abf08',
'hosts': [{'hostid': '10084', 'proxyid': '0', 'host': 'Zabbix server', 'status': '0', 'ipmi_authtype': '-1', 'ipmi_privilege': '2', 'ipmi_username': '', 'ipmi_password': '', 'maintenanceid': '0', 'maintenance_status': '0', 'maintenance_type': '0', 'maintenance_from': '0', 'name': 'Zabbix server', 'flags': '0', 'templateid': '0', 'description': '', 'tls_connect': '1', 'tls_accept': '1', 'tls_issuer': '', 'tls_subject': '', 'custom_interfaces': '0', 'uuid': '', 'vendor_name': '', 'vendor_version': '', 'proxy_groupid': '0', 'monitored_by': '0', 'inventory_mode': '1', 'active_available': '1', 'assigned_proxyid': '0'}]}
Можем немного упростить вывод, оставив только hostid и имя:
ID клиента нам будет в дальнейшем более чем достаточно, поэтому оставим код таким. В случае, если вам нужно получить информацию о конкретной группе, необходимо передать ее groupid в filter:
host_groups = zabbix_api.hostgroup.get(filter={'groupid': '2'}, selectHosts=['hostid', 'name'])
hostgroup.create и hostgroup.delete
Самое скучное и простое.
В метод create вы передаете только имя новой группы, в ответ получаете ее ID после создания.
Ответ:
{'groupids': ['22']}
В метод delete вы передаете ID группы, в ответ так же получаете json сообщение об успехе:
Ответ:
{'groupids': {'groupids': '22'}}
Группу узлов сети нельзя удалить в случае, если:
- Она содержит узлы сети, которые принадлежат только этой группе узлов сети;
- Она отмечена как внутренняя;
- Она используется прототипом узлов сети;
- Она используется в глобальном скрипте;
- Она используется в условии корреляции.
Группы пользователей (User Groups)
Документацию по группам пользователей можно посмотреть здесь
И сразу же демонстрируем, зачем мы создавали группы узлов сети заранее:
usergroup.create
Функция создания группы пользователей. Обязательно передавать имя группы, также нужно передавать группу узлов сети, к которой у группы пользователей будет доступ.
Сейчас объясню проще:
В ответ мы получим ID созданной группы:
{'usrgrpids': ['15']}
Что важно:
При создании мы передаем также ID группы узлов сети (В моем случае группа "Linux Servers" имеет ID "2"). Также мы передаем значение уровня доступа, где:
0 - заблокировано
2 - только чтение
3 - чтение и запись
Проверяем, что группа создалась:
Проверяем доступы к узлам сети:
usergroup.get
Получение всей информации о группе пользователей.
Для начала, запросим информацию о всех группах, передав в usrgrpids значение None:
Вывод:
Расширим вывод, добавив информацию о пользователях в группе и о правах:
Так на вывод мы получаем:
{'usrgrpid': '7', 'name': 'Zabbix administrators',
'users': [
{'userid': '1', 'username': 'Admin', 'name': 'Zabbix', 'surname': 'Administrator'},
{'userid': '7', 'username': 'test_user', 'name': '', 'surname': ''}
],
'rights': []}
{'usrgrpid': '15', 'name': 'test_user_group',
'users': [],
'rights': [{'id': '2', 'permission': '3'}]}
Вывод я специально обрезал, оставив самое важное. Как мы видим, в группе Zabbix administrators у нас находится 2 пользователя, но никаких дополнительных прав к ней не прикреплено, т.к. группа системная с полными правами. У группы test_user_group права прописаны, и, как только мы добавим в нее пользователя, он унаследует права группы.
usergroup.delete
И напоследок - удаление группы пользователей. Как и с самими пользователями, и группами узлов сети, достаточно просто передать ID.
В ответ мы получим:
{'usrgrpids': ['15']}
И снова проверяем, что наша группа удалилась: