Руководство по быстрому началу работы

После того как вы установили 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}")