[comment]: # aside:2

[comment]: # ({e4e166a4-ebcec779})
# Руководство по быстрому началу работы

После того как вы [установили](/devel/python/installation) zabbix\_utils, вы можете использовать его в своем скрипте.

Это руководство по быстрому началу работы показывает, как:

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

В руководстве скрипт приводится пошагово, с объяснением каждой части по мере ее появления.
[Полный скрипт](#complete-script) приведен в конце страницы.

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

[comment]: # ({/e4e166a4-ebcec779})

[comment]: # ({8ff8a246-7917ae33})
#### Получение имени узла сети из агента Zabbix

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

1\. Импортируйте класс `Getter` из zabbix\_utils.
Этот класс работает как [Zabbix get](/manual/concepts/get) и позволяет запрашивать данные у агента Zabbix.

2\. Создайте экземпляр `Getter`, который подключается к локальному агенту Zabbix по адресу `127.0.0.1` на порту `10050`.

3\. Вызовите метод `get()` у экземпляра `Getter`, чтобы запросить имя узла сети у агента Zabbix.

-   Метод `get()` принимает в качестве параметра ключ элемента данных и отправляет запрос агенту Zabbix для этого элемента данных.
-   Метод `get()` возвращает объект, а имя узла сети хранится в атрибуте `value` этого объекта.
-   [`system.hostname`](/manual/config/items/itemtypes/zabbix_agent#system.hostname) — это встроенный ключ агента Zabbix, который возвращает имя узла сети.

```python
from zabbix_utils import Getter

agent = Getter(host='127.0.0.1', port=10050)
hostname = agent.get('system.hostname').value
```

[comment]: # ({/8ff8a246-7917ae33})

[comment]: # ({8f96b279-7bec0e05})
#### Подключение и вход в Zabbix API

Далее подключитесь к Zabbix API.
Это позволит вашему скрипту управлять объектами Zabbix, такими как узлы сети и элементы данных.

1\. Импортируйте класс `ZabbixAPI` из zabbix\_utils.

2\. Создайте экземпляр `ZabbixAPI` и укажите URL вашего веб-интерфейса Zabbix.

3\. Вызовите метод `login()` у экземпляра `ZabbixAPI` и укажите имя пользователя и пароль.
У учетной записи должно быть [разрешение](/manual/web_interface/frontend_sections/users/user_roles#default-permissions) на доступ к Zabbix API.

4\. Вызовите метод `logout()`, чтобы закрыть сеанс после выполнения операций API.

```python
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()
```

[comment]: # ({/8f96b279-7bec0e05})

[comment]: # ({8776420b-6f1a3be3})
#### Создание узла сети в Zabbix

Теперь, когда у вас есть имя узла сети из Zabbix agent и вы подключены к Zabbix API, вы можете создать новый узел сети в Zabbix.

1\. Вызовите метод API [`host.create()`](/manual/api/reference/host/create) для экземпляра `ZabbixAPI` и укажите сведения об узле сети:

-   `host` - задайте значение переменной `hostname`, содержащей имя узла сети, полученное из Zabbix agent.
-   `interfaces` - содержит сведения о подключении для Zabbix agent, работающего на узле сети.
-   `groups` - содержит как минимум одну группу узлов сети, к которой должен принадлежать узел сети.

2\. Поскольку Zabbix API возвращает ID только что созданного узла сети, сохраните этот ID в переменной `host_id` для последующего использования.

3\. Выведите сообщение для подтверждения создания узла сети.

```python
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}")
```

[comment]: # ({/8776420b-6f1a3be3})

[comment]: # ({14e2596a-b8e7e66c})
#### Создание нового элемента данных в Zabbix

После создания узла сети вы можете добавить к нему элемент данных.

1\. Определите уникальный ключ для создаваемого элемента данных.

2\. Вызовите метод [`item.create()`](/manual/api/reference/item/create) для экземпляра `ZabbixAPI` и передайте сведения об элементе данных:

-   `hostid` - установите значение переменной `host_id`, содержащей ID созданного вами узла сети.
-   `name` - имя элемента данных.
-   `key_` - установите значение переменной `item_key`, которую вы только что определили.
-   `type` - установите значение `2` ([элемент данных trapper](/manual/config/items/itemtypes/trapper)), требуется для получения значений, отправляемых из вашего скрипта на следующих шагах.
-   `value_type` - установите значение `3` (numeric unsigned), тип данных, которые хранит этот элемент данных.

3\. Поскольку Zabbix API возвращает ID вновь созданного элемента данных, сохраните этот ID в переменной `item_id` для последующего использования.

4\. Выведите сообщение для подтверждения создания элемента данных.

```python
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}")
```

[comment]: # ({/14e2596a-b8e7e66c})

[comment]: # ({6d0ff9a9-10296181})
#### Отправка значения на узел сети

Теперь, когда вы создали узел сети и элемент данных, вы можете отправить на него данные.

1\. Импортируйте класс `time` и подождите несколько секунд перед отправкой данных.  
Это гарантирует, что Zabbix полностью обработал ваш новый узел сети и элемент данных.

2\. Импортируйте класс `Sender` из `zabbix_utils`.  
Этот класс работает как [Zabbix sender](/manual/concepts/sender) и позволяет вашему скрипту отправлять данные в Zabbix.

3\. Создайте экземпляр `Sender`, который подключается к локальному серверу Zabbix по адресу `127.0.0.1` на порту `10051`.

4\. Вызовите метод `send_value()` у экземпляра `Sender`, чтобы отправить значение в элемент данных вашего узла сети, и укажите следующие параметры:

-   `hostname` - установите значение переменной `hostname`, содержащей имя узла сети, полученное от агента Zabbix.
-   `item_key` - установите значение переменной `item_key`, которую вы только что определили ранее в скрипте.
-   `1` - значение для отправки.

4\. Выведите сообщение, чтобы подтвердить, что значение было отправлено.

```python
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 получил ваше значение:

```bash
Sender response: {"processed": 1, "failed": 0, "total": 1, "time": "0.000151", "chunk": 1}
```

Теперь вы также можете проверить ваш веб-интерфейс Zabbix (*Monitoring > [Latest data](/manual/web_interface/frontend_sections/monitoring/latest_data)*) и увидеть это значение.

[comment]: # ({/6d0ff9a9-10296181})

[comment]: # ({a620a163-3872741b})
#### Полный скрипт

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

```python
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}")
```

[comment]: # ({/a620a163-3872741b})
