Ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
https://www.zabbix.com/documentation/current/manual/api/changes_5.2_-_5.4 https://www.zabbix.com/ru/zabbix_api https://www.zabbix.com/documentation/current/ru/manual/api https://www.zabbix.com/documentation/current/ru/manual/api/reference/host/get https://www.zabbix.com/documentation/current/ru/manual/api/reference https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get https://www.zabbix.com/documentation/current/ru/manual/web_interface/frontend_sections/monitoring/problems https://www.zabbix.com/documentation/current/ru/manual/api/reference/problem/get https://www.zabbix.com/documentation/current/manual/api/reference/problem/get https://www.zabbix.com/documentation/current/ru/manual/api/reference/event/get https://pypi.org/project/py-zabbix/ https://github.com/adubkov/py-zabbix https://py-zabbix.readthedocs.io/en/latest/api.html https://habr.com/ru/post/325876/ https://catonrug.blogspot.com/2018/07/learning-python-because-of-zabbix-api.html https://blog.zabbix.com/getting-started-with-zabbix-api/1381/ https://www.jsonrpc.org/specification https://www.json.org/json-en.html |
Python, JSON со структурой
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ 'host': 'Hostname' 'groups': [...] 'interfaces': [{},{},{}] 'inventory': {} 'templates': [{},{},{}] 'inventory_mode': '1' 'proxy_hostid': 'INT' 'status': '0' } [] - массив \ список {} - словарь |
Python настройка подключения к серверу zabbix:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER ' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Завершаем подключения zapi.user.logout() |
Пример №1 Печатаем список хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Добываем информацию узлы # monitored_host - "флаг" - Возврат узлов сети только под наблюдением. result1 = zapi.host.get(monitored_hosts=1, output='extend') # Формируем список hostnames1 = [host['host'] for host in result1] # Если нужно можем распечатать список # print(hostnames1) # Печатаем список хостов красиво for i in hostnames1: print(i) # Завершаем подключения zapi.user.logout() |
Пример №2 Печатаем список хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем список узлов пример 1 for host in zapi.host.get(output = ['hostid','host','name'], selectInterfaces=['ip','port','dns']): print (host) #Печатаем список узлов пример 2 host_and_ip = zapi.host.get(output = ['hostid','host','name'], selectInterfaces=['ip','port','dns']) for i in host_and_ip: # print(i) print(i['host'], i['name'], i['interfaces']) # Завершаем подключения zapi.user.logout() |
Пример №3 Печатаем список групп
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) # Завершаем подключения zapi.user.logout() |
Пример №4 Печатаем список хостов из группы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) print(f" \nПолучаем список хостов в группе с id 2") hosts = zapi.host.get(groupids=2, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) # Завершаем подключения zapi.user.logout() |
Пример №5 Печатаем список item
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER ' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Получаем список item с хоста c id 10268 print(f" \nПолучаем список item с хоста c id 10268") items = zapi.item.get(hostids=10268, output=['itemid','name']) for item in items: print (item['itemid'],item['name']) # Завершаем подключения zapi.user.logout() |
Пример №6 Печатаем triggers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) # Получить список всех проблем (триггеры сработали) triggers = zapi.trigger.get(only_true=1, skipDependent=1, monitored=1, active=1, output='extend', expandDescription=1, selectHosts=['host'], ) # Получить список какие проблемы не подтверждены. unack_triggers = zapi.trigger.get(only_true=1, skipDependent=1, monitored=1, active=1, output='extend', expandDescription=1, selectHosts=['host'], withLastEventUnacknowledged=1, ) unack_trigger_ids = [t['triggerid'] for t in unack_triggers] for t in triggers: t['unacknowledged'] = True if t['triggerid'] in unack_trigger_ids \ else False # Распечатать список, содержащий только "сработавшие" триггеры print (f"\n печатаем триггеры") for t in triggers: if int(t['value']) == 1: print("{0} - {1} {2}".format(t['hosts'][0]['host'], t['description'], '(Unack)' if t['unacknowledged'] else '') ) # Завершаем подключения zapi.user.logout() |
Пример №7 Печатаем все triggers которые сработали у группы хостов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем список групп print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) # Получаем триггеры группы узлов с groupids = 2 triggers = zapi.trigger.get(groupids=2, output='extend', expandDescription=1, selectHosts=['host'],) #print(f"\n Печатаем все триггеры groupids2 {triggers}") print("\n") # Печатаем триггеры for t in triggers: print("{0} - {1} - {2}".format(t['hosts'][0]['host'], t['description'], datetime.utcfromtimestamp(int(t['lastchange'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №8 Печатаем проблемы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
###!!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод. from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) ## Получаем все проблемы по хосту hsrv1_factoria ## !!! На самом деле не все!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод. problem = zapi.problem.get(host='hsrv1_factoria', recent='true') ##print("\n", problem) for pr in problem: #print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], pr['clock'])) print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №9 Печатаем все проблемы (history.get)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Zabbix ведет время от создания linux #Для уточнения времени исполняем стандартную команду linux #date -d @1620925819 #date +%s # Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK) problem = zapi.event.get(groupids=2,time_from=1620925819) ## Может пригодится для уточнения объектов ##print("\n", problem) for pr in problem: print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №10 Печатаем все проблемы (history.get) и сохраняем в файл out.csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from contextlib import redirect_stdout from datetime import datetime from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Zabbix ведет время от создания linux #Для уточнения времени исполняем стандартную команду linux #date -d @1620925819 #date +%s # Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK) problem = zapi.event.get(groupids=2,time_from=1620925819) ## Может пригодится для уточнения объектов ##print("\n", problem) #Запись CSV файла with open('out.csv', 'w', encoding='utf_8') as f: with redirect_stdout(f): for pr in problem: print("{0};{1};{2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S'))) # Завершаем подключения zapi.user.logout() |
Пример №11 Создаем узлы (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
from pyzabbix.api import ZabbixAPI # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Список ид teplate и имя teplate teplates = zapi.template.get(with_items=1) # для теста вывалить все в teplates #print(teplates) for i in teplates: print(i['templateid'], i['host']) # Создаем узел blablalbalba1 c "ip": "8.8.8.9" в группе с id 5 zapi.do_request(method="host.create",params={ "host": "blablalbalba1", "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": "8.8.8.9", "dns": "", "port": "10050" } ], "groups": [ { "groupid": "5" } ], "templates": [ { "templateid": "10001" } ], } ) # Проверяем print(f" \nПолучаем список хостов в группе с id 5") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) # Завершаем подключения zapi.user.logout() |
Пример №12 Создаем элемент данных (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
from pyzabbix.api import ZabbixAPI, ZabbixAPIException import sys # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Получаем список хостов в группе 5 print(f" \nПолучаем список хостов в группе с id 5:") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) host_name = 'blablalbalba1' hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) if hosts: host_id = hosts[0]["hostid"] print("\nНайден host id {0}".format(host_id)) try: item = zapi.item.create( hostid=host_id, name='Used disk space on $1 in %', key_='vfs.fs.size[/,pused]', type=0, value_type=3, interfaceid=hosts[0]["interfaces"][0]["interfaceid"], delay=30 ) except ZabbixAPIException as e: print(e) sys.exit() print("Добавили item для itemid {0} на host: {1}".format(item["itemids"][0], host_name)) else: print(f"\nХост {host_name} не обнаружен.") # Завершаем подключения zapi.user.logout() |
Пример №13 Создаем триггер (do_request)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
from pyzabbix.api import ZabbixAPI, ZabbixAPIException import sys # Переменные ZABBIXURL = 'http://URL/zabbix/' ZABBIXAPIUSER = 'USER' ZABBIXAPIPASSWORD = 'PASSWORD' # Создаем инстанс zapi # Будем применять для дальнейших операций zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD) #Печатаем все группы узлов print(f" \nПечатаем список групп:") groups = zapi.hostgroup.get(output=['itemid','name']) for group in groups: print (group['groupid'],group['name']) #Получаем список хостов в группе 5 print(f" \nПолучаем список хостов в группе с id 5:") hosts = zapi.host.get(groupids=5, output=['hostid','name']) for host in hosts: print (host['hostid'],host['name']) #Куда и что будем добавлять host_name = 'blablalbalba1' trg1="xxx1 {HOST.NAME}" exp1="last(/blablalbalba1/1111vfs.fs.size[/,pused])=0" pri1="4" hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"]) if hosts: host_id = hosts[0]["hostid"] print("\nНайден host id {0}".format(host_id)) try: item = zapi.trigger.create(description=trg1, expression=exp1, priority=pri1) except ZabbixAPIException as e: print(e) sys.exit() print("Добавили trigger для {0}".format(host_name)) else: print(f"\nХост {host_name} не обнаружен.") # Завершаем подключения zapi.user.logout() |