Краткое руководство

После того как вы установили zabbix_utils, вы можете использовать его в своем скрипте.

Это краткое руководство показывает, как:

  • Получить имя узла сети от Zabbix агент.
  • Создать узел сети и элемент данных trapper с помощью Zabbix API.
  • Отправить значение в элемент данных.

В руководстве скрипт представлен пошагово, с пояснением каждой части по мере ее добавления. Полный скрипт приведен в конце страницы.

В руководстве также предполагается, что ваш Zabbix сервер, агент и API запущены локально.

Получение имени узла сети от Zabbix агент

Начните с получения имени системы, на которой запущен Zabbix агент. Это имя узла сети потребуется для создания узла сети с помощью Zabbix API.

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 агент и установлено подключение к Zabbix API, вы можете создать новый узел сети в Zabbix.

1. Вызовите метод API host.create() для экземпляра ZabbixAPI и укажите сведения об узле сети:

  • host — задайте значение переменной hostname, содержащей имя узла сети, полученное от Zabbix агент.
  • interfaces — содержит сведения о подключении для Zabbix агент, запущенного на узле сети.
  • 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"Узел сети '{hostname}' создан с 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 (Мониторинг > Последние данные).

Полный скрипт

Ниже приведён полный скрипт, который объединяет все шаги: получение имени узла сети, создание узла сети и элемента данных с помощью Zabbix API, а также отправку данных в Zabbix.

import time
from zabbix_utils import Getter, ZabbixAPI, Sender

# Retrieve host name from Zabbix agent
agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value

# Connect and log in to Zabbix API
api = ZabbixAPI(url='127.0.0.1/zabbix')
api.login(user='Admin', password='zabbix')

# Create host in 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"Host '{hostname}' created with ID {host_id}")

# Create item in 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 '{item_key}' created with ID {item_id}")

# Log out from API
api.logout()

# Wait for Zabbix to process new host
time.sleep(10)

# Send value to host
sender = Sender(server='127.0.0.1', port=10051)
response = sender.send_value(hostname, item_key, 1)

print(f"Sender response: {response}")