Руководство по быстрому началу работы
После того как вы установили zabbix_utils, вы можете использовать его в своем скрипте.
Это руководство по быстрому началу работы показывает, как:
- Получить имя узла сети из агента Zabbix.
- Создать узел сети и элемент данных типа trapper с помощью API Zabbix.
- Отправить значение в элемент данных.
В руководстве скрипт приводится пошагово, с объяснением каждой части по мере ее появления. Полный скрипт приведен в конце страницы.
Также предполагается, что ваш сервер Zabbix, агент и API запущены локально.
Получение имени узла сети из агента Zabbix
Начните с получения имени узла сети, на котором запущен агент Zabbix. Это имя узла сети понадобится вам для создания узла сети с помощью API Zabbix.
1. Импортируйте класс Getter из zabbix_utils.
Этот класс работает как Zabbix get и позволяет запрашивать данные у агента Zabbix.
2. Создайте экземпляр Getter, который подключается к локальному агенту Zabbix по адресу 127.0.0.1 на порту 10050.
3. Вызовите метод get() у экземпляра Getter, чтобы запросить имя узла сети у агента Zabbix.
- Метод
get()принимает в качестве параметра ключ элемента данных и отправляет запрос агенту Zabbix для этого элемента данных. - Метод
get()возвращает объект, а имя узла сети хранится в атрибутеvalueэтого объекта. system.hostname— это встроенный ключ агента Zabbix, который возвращает имя узла сети.
from zabbix_utils import Getter
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
Подключение и вход в Zabbix API
Далее подключитесь к Zabbix API. Это позволит вашему скрипту управлять объектами Zabbix, такими как узлы сети и элементы данных.
1. Импортируйте класс ZabbixAPI из zabbix_utils.
2. Создайте экземпляр ZabbixAPI и укажите URL вашего веб-интерфейса Zabbix.
3. Вызовите метод login() у экземпляра ZabbixAPI и укажите имя пользователя и пароль.
У учетной записи должно быть разрешение на доступ к Zabbix API.
4. Вызовите метод logout(), чтобы закрыть сеанс после выполнения операций API.
from zabbix_utils import ZabbixAPI
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# API operations go here
api.logout()
Создание узла сети в Zabbix
Теперь, когда у вас есть имя узла сети из Zabbix agent и вы подключены к Zabbix API, вы можете создать новый узел сети в Zabbix.
1. Вызовите метод API host.create() для экземпляра ZabbixAPI и укажите сведения об узле сети:
host- задайте значение переменнойhostname, содержащей имя узла сети, полученное из Zabbix agent.interfaces- содержит сведения о подключении для Zabbix agent, работающего на узле сети.groups- содержит как минимум одну группу узлов сети, к которой должен принадлежать узел сети.
2. Поскольку Zabbix API возвращает ID только что созданного узла сети, сохраните этот ID в переменной host_id для последующего использования.
3. Выведите сообщение для подтверждения создания узла сети.
api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"Host '{hostname}' created with ID {host_id}")
Создание нового элемента данных в Zabbix
После создания узла сети вы можете добавить к нему элемент данных.
1. Определите уникальный ключ для создаваемого элемента данных.
2. Вызовите метод item.create() для экземпляра ZabbixAPI и передайте сведения об элементе данных:
hostid- установите значение переменнойhost_id, содержащей ID созданного вами узла сети.name- имя элемента данных.key_- установите значение переменнойitem_key, которую вы только что определили.type- установите значение2(элемент данных trapper), требуется для получения значений, отправляемых из вашего скрипта на следующих шагах.value_type- установите значение3(numeric unsigned), тип данных, которые хранит этот элемент данных.
3. Поскольку Zabbix API возвращает ID вновь созданного элемента данных, сохраните этот ID в переменной item_id для последующего использования.
4. Выведите сообщение для подтверждения создания элемента данных.
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3,
)
item_id = item['itemids'][0]
print(f"Item '{item_key}' created with ID {item_id}")
Отправка значения на узел сети
Теперь, когда вы создали узел сети и элемент данных, вы можете отправить на него данные.
1. Импортируйте класс time и подождите несколько секунд перед отправкой данных.
Это гарантирует, что Zabbix полностью обработал ваш новый узел сети и элемент данных.
2. Импортируйте класс Sender из zabbix_utils.
Этот класс работает как Zabbix sender и позволяет вашему скрипту отправлять данные в Zabbix.
3. Создайте экземпляр Sender, который подключается к локальному серверу Zabbix по адресу 127.0.0.1 на порту 10051.
4. Вызовите метод send_value() у экземпляра Sender, чтобы отправить значение в элемент данных вашего узла сети, и укажите следующие параметры:
hostname- установите значение переменнойhostname, содержащей имя узла сети, полученное от агента Zabbix.item_key- установите значение переменнойitem_key, которую вы только что определили ранее в скрипте.1- значение для отправки.
4. Выведите сообщение, чтобы подтвердить, что значение было отправлено.
import time
time.sleep(10)
from zabbix_utils import Sender
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Sender response: {response}")
После успешного выполнения этого кода вы должны увидеть сообщение об успешной отправке, указывающее, что Zabbix получил ваше значение:
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
Теперь вы также можете проверить ваш веб-интерфейс Zabbix (Monitoring > Latest data) и увидеть это значение.
Полный скрипт
Ниже приведен полный скрипт, который объединяет все шаги: получение имени узла сети, создание узла сети и элемента данных с использованием Zabbix API, а также отправку данных в Zabbix.
import time
from zabbix_utils import Getter, ZabbixAPI, Sender
# Получить имя узла сети из агента Zabbix
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
# Подключиться и выполнить вход в Zabbix API
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')
# Создать узел сети в Zabbix
host = api.host.create(
host=hostname,
interfaces=[{
'type': 1,
'main': 1,
'useip': 1,
'ip': '127.0.0.1',
'dns': '',
'port': '10050',
}],
groups=[{'groupid': '2'}]
)
host_id = host['hostids'][0]
print(f"Узел сети '{hostname}' создан с ID {host_id}")
# Создать элемент данных в Zabbix
item_key = 'app.myservice.heartbeat'
item = api.item.create(
hostid=host_id,
name='App heartbeat',
key_=item_key,
type=2,
value_type=3
)
item_id = item['itemids'][0]
print(f"Элемент данных '{item_key}' создан с ID {item_id}")
# Выйти из API
api.logout()
# Подождать, пока Zabbix обработает новый узел сети
time.sleep(10)
# Отправить значение на узел сети
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)
print(f"Ответ Sender: {response}")