Ссылки:
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.htmlGetting started with Zabbix APIhttps://www.jsonrpc.org/specification https://www.json.org/json-en.html
Python, JSON со структурой
{
'host': 'Hostname'
'groups': [...]
'interfaces': [{},{},{}]
'inventory': {}
'templates': [{},{},{}]
'inventory_mode': '1'
'proxy_hostid': 'INT'
'status': '0'
}
[] - массив \ список
{} - словарь
Python настройка подключения к серверу zabbix:
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 Печатаем список хостов
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 Печатаем список хостов
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 Печатаем список групп
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 Печатаем список хостов из группы
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
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
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 которые сработали у группы хостов
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 Печатаем проблемы
###!!!! из доков Для получения проблем, которые были решены ранее, используйте 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)
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
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)
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)
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)
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()