DOC / 1449 SysAdminHub.ru

Как массово добавить хосты в Zabbix из Excel через API

Как массово добавить хосты в Zabbix из Excel через API

Как будет работать массовое добавление хостов

Общая схема достаточно простая:

Excel-файл
    ↓
Python-скрипт
    ↓
Zabbix API
    ↓
Создание хостов
    ↓
Группа + шаблон + IP + другие параметры

Вместо того чтобы вручную создавать каждый хост через веб-интерфейс, мы заранее подготовим таблицу с параметрами устройств, а Python-скрипт передаст эти данные в Zabbix через API.

В моём случае задача состояла в мониторинге доступности региональных шлюзов. Для каждого региона необходимо было создать два объекта:

  • основной канал связи;
  • резервный канал связи.

Для проверки доступности используется стандартный шаблон ICMP Ping.

Устанавливаем Python в Windows

Добавлять хосты я буду со своей рабочей станции под управлением Windows 10. Для запуска скрипта нам понадобится Python.

Скачать актуальную версию Python лучше с официального сайта:

python.org/downloads

Также для повторения именно моего примера можно использовать сохранённый установочный пакет:

python-3.13.12-amd64.zip

После загрузки запускаем установщик.

В первом окне выбираем Customize installation.

Установка Python для массового добавления хостов в Zabbix

На следующем этапе проверяем необходимые компоненты установки и при необходимости устанавливаем Python для всех пользователей компьютера.

Выбор компонентов при установке Python в Windows

На этапе Advanced Options обязательно обратите внимание на параметр:

Add Python to environment variables

Он добавляет Python в переменную окружения PATH, благодаря чему команды python и pip можно будет запускать из командной строки или PowerShell без указания полного пути к исполняемым файлам.

Добавление Python в PATH при установке

После этого нажимаем Install и ждём завершения установки.

Успешное завершение установки Python

Проверяем установку Python

Откройте новую командную строку или PowerShell и выполните:

python --version

В моём случае результат выглядит так:

Python 3.13.12

Если версия отображается, значит Python установлен и доступен через PATH.

Создаём API-токен в Zabbix

Следующий шаг — получить API-токен, с помощью которого наш Python-скрипт сможет обращаться к Zabbix API.

Откройте веб-интерфейс Zabbix и перейдите в раздел управления API tokens. Расположение этого раздела может немного отличаться в зависимости от версии Zabbix и прав текущего пользователя.

Нажмите Create API token.

Создание API-токена в Zabbix

Укажите имя токена. Например:

Import hosts

Выберите пользователя, от имени которого будут выполняться запросы API, и при необходимости задайте срок действия токена.

Параметры нового API-токена Zabbix

После заполнения параметров нажмите Add.

Zabbix создаст токен, который необходимо сохранить для дальнейшего использования.

Созданный API-токен Zabbix

Токен, который был виден в моих исходных материалах и скриншотах, к моменту публикации уже отозван.

Скачиваем скрипт для импорта хостов

Писать инструмент полностью с нуля не будем. За основу я взял проект:

Udeus/zabbix-import-hosts на GitHub

Это Python-скрипт для импорта хостов из Excel в Zabbix через API.

Однако исходный вариант пришлось немного доработать под мою задачу. В частности, мне потребовалось поле Visible name, а также пришлось решить возникшую в моей среде проблему при HTTPS-подключении.

Готовую адаптированную версию, которая использовалась в этой статье, можно скачать здесь:

zabbix-import-hosts-main.zip

Распаковываем архив на диск C:.

В моём случае получается каталог:

C:\zabbix-import-hosts-main

Переходим в него:

cd C:\zabbix-import-hosts-main

Проверяем содержимое:

dir

Пример:

12.03.2026  11:38    DIR          .
12.03.2026  11:38    DIR          ..
11.03.2026  16:48            49 664 hosts.xls
09.10.2024  20:50            35 149 LICENSE
11.03.2026  16:33             8 159 main.py
09.10.2024  20:50             1 438 README.md
09.10.2024  20:50                46 requirements.txt
09.10.2024  20:50               254 utils.py

Основной файл программы:

main.py

А файл:

hosts.xls

будет использоваться для подготовки списка создаваемых хостов.

Устанавливаем зависимости Python

Находясь в каталоге со скриптом, устанавливаем зависимости:

python -m pip install -r requirements.txt

В проекте используются библиотеки для работы с таблицами, HTTP-запросами и вывода информации в консоль.

В частности:

  • pandas — обработка табличных данных;
  • requests — HTTP-запросы;
  • tabulate — табличный вывод информации в консоль.

Во время установки может появиться сообщение о наличии новой версии pip:

[notice] A new release of pip is available
[notice] To update, run: python.exe -m pip install --upgrade pip

Это обычное информационное сообщение, а не ошибка.

Устанавливаем xlrd для файла .xls

В нашем примере используется старый бинарный формат Excel:

hosts.xls

Для его чтения через pandas устанавливаем xlrd:

python -m pip install xlrd

После этого окружение готово к запуску скрипта.

Запускаем скрипт и подключаемся к Zabbix API

Теперь запускаем программу:

python main.py --url https://zabbix.example.ru --token ВАШ_API_ТОКЕН

Замените:

  • https://zabbix.example.ru — на адрес вашего Zabbix;
  • ВАШ_API_ТОКЕН — на созданный ранее API-токен.

После успешного подключения появится интерактивное меню:

+--------------+-----------------------------------------+
| Command      | Description                             |
|--------------+-----------------------------------------|
| help         | Show all commands                       |
| groups       | Show all groups and ID                  |
| hosts        | Show all hosts and ID                   |
| templates    | Show all templates and ID               |
| template     | Show ID one template                    |
| proxy groups | Show all proxy groups                   |
| proxies      | Show all proxies                        |
| import hosts | Import hosts from file to Zabbix server |
| author       | About author                            |
| exit         | Close script                            |
+--------------+-----------------------------------------+

Command:

Через это меню можно получить необходимые ID объектов Zabbix и запустить импорт.

Получаем ID группы хостов

При создании хоста Zabbix API использует идентификаторы объектов. Поэтому перед заполнением Excel необходимо узнать ID нужной группы.

В строке:

Command:

вводим:

groups

Скрипт запросит через API список групп:

+-----------+----------------------------+
|   groupid | name                       |
|-----------+----------------------------|
|         2 | Linux servers              |
|         4 | Zabbix servers             |
|         5 | Discovered hosts           |
|         6 | Virtual machines           |
|         7 | Hypervisors                |
|        19 | Applications               |
|        20 | Databases                  |
|       ... | ...                        |
|        57 | СХД                        |
|        58 | Servers                    |
|        55 | GW                         |
+-----------+----------------------------+

В моём случае используется группа:

GW

Её идентификатор:

55

Именно это значение далее указываем в колонке Group ID.

Получаем ID шаблона ICMP Ping

Теперь необходимо определить ID шаблона.

Поскольку мне требуется только проверять доступность сетевых устройств через ICMP, используется шаблон:

ICMP Ping

В интерактивном меню вводим:

templates

Получаем список:

+-------------------------------------------------------+--------------+
| name                                                  |   templateid |
|-------------------------------------------------------+--------------|
| Windows Server Basic Monitoring                       |        10681 |
| Yadro Tatlin Unified v3.1.1                           |        11262 |
| Eltex MES SNMPv3                                      |        11140 |
| Zabbix server health                                  |        10047 |
| Kubernetes cluster state by HTTP                      |        10510 |
| PFSense by SNMP                                       |        10515 |
| ...                                                   |          ... |
| ICMP Ping                                             |        10564 |
| Proxmox VE by HTTP                                    |        10517 |
+-------------------------------------------------------+--------------+

В моей системе:

ICMP Ping = Template ID 10564

Запоминаем этот идентификатор — он понадобится при заполнении Excel.

Готовим Excel-файл с хостами

Теперь открываем:

C:\zabbix-import-hosts-main\hosts.xls

В таблице необходимо заполнить параметры будущих хостов.

Hostname

Техническое имя хоста в Zabbix.

Я использую следующую схему:

R01_GW1

где:

  • R01 — номер региона;
  • GW1 — основной шлюз.

Для резервного канала:

R01_GW2

Таким образом, для каждого региона создаются два объекта — основной и резервный шлюз.

Visible name

Отображаемое имя хоста в интерфейсе Zabbix.

Например:

R01_GW1_Адыгея

Это позволяет сразу видеть не только техническое имя, но и регион.

IP address

IP-адрес контролируемого устройства.

Например:

172.111.138.70

DNS

DNS-имя устройства. В моём сценарии оно не используется, поэтому поле остаётся пустым.

Interface

Тип интерфейса, который создаст скрипт для хоста.

В используемом файле указано:

Agent

Port

Для интерфейса Zabbix Agent используется стандартный порт:

10050

Group ID

ID группы, в которую будет помещён создаваемый хост.

В нашем примере:

55

Это группа GW.

Template ID

ID шаблона, который будет привязан к хосту.

В нашем примере:

10564

Это шаблон ICMP Ping.

Proxy ID

ID Zabbix Proxy, через который должен контролироваться хост.

В моём случае Proxy не используется, поэтому поле остаётся пустым.

Excel-файл для массового импорта хостов в Zabbix

В результате для каждого устройства в таблице указаны необходимые параметры, которые скрипт затем передаст в Zabbix API.

Что проверить перед массовым импортом

Перед созданием сразу нескольких сотен объектов рекомендую ещё раз проверить Excel-файл.

Особенно внимательно смотрим:

  • нет ли дублирующихся Hostname;
  • правильно ли указаны IP-адреса;
  • существует ли указанный Group ID;
  • существует ли Template ID;
  • правильно ли указан Proxy ID, если он используется;
  • нет ли пустых обязательных полей.

Запускаем массовый импорт хостов

После подготовки Excel возвращаемся к интерактивному меню скрипта.

В строке Command: вводим:

import hosts

Скрипт запросит имя файла.

Указываем:

hosts.xls

После этого начнётся последовательное создание хостов через Zabbix API.

В консоли будет отображаться результат:

----------------------------------------------------------------------------------------------------------------------------
Hostname: R01_GW1
New host ID: ['11707']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R01_GW2
New host ID: ['11708']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R02_GW1
New host ID: ['11709']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R02_GW2
New host ID: ['11710']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R03_GW1
New host ID: ['11711']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R03_GW2
New host ID: ['11712']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R04_GW1
New host ID: ['11713']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R04_GW2
New host ID: ['11714']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R05_GW1
New host ID: ['11715']
----------------------------------------------------------------------------------------------------------------------------
Hostname: R05_GW2
New host ID: ['11716']

Для каждого успешно созданного объекта скрипт показывает:

  • Hostname;
  • новый Host ID, присвоенный Zabbix.

После завершения работы выходим из программы:

exit

Скрипт завершит работу:

Closing the script...

Проверяем созданные хосты в Zabbix

Теперь необходимо убедиться, что импорт действительно прошёл правильно.

Открываем список хостов в веб-интерфейсе Zabbix.

В моей версии это:

Data collection → Hosts

Чтобы быстрее найти импортированные устройства, я отфильтровал список по имени r0.

В результате появились:

  • R01_GW1;
  • R01_GW2;
  • R02_GW1;
  • R02_GW2;
  • и остальные устройства из Excel-файла.
Хосты, массово добавленные в Zabbix через API

Теперь откроем один из созданных хостов.

Например:

R01_GW1_Адыгея
Проверка параметров импортированного хоста в Zabbix

Проверяем, что:

  • назначен шаблон ICMP Ping;
  • хост находится в группе GW;
  • создан нужный интерфейс;
  • указан правильный IP-адрес;
  • параметры соответствуют Excel-файлу.

Если всё совпадает, значит массовый импорт через API выполнен успешно.

Зачем использовать API вместо ручного создания

На нескольких хостах разница практически незаметна. Но когда необходимо добавить 100, 200 или несколько сотен однотипных устройств, автоматизация сильно экономит время.

Кроме скорости, такой подход уменьшает количество ручных ошибок. Один раз правильно подготовив структуру таблицы, можно одинаково создавать большое количество объектов.

Через Excel также удобно заранее подготовить:

  • имена хостов;
  • отображаемые имена;
  • IP-адреса;
  • группы;
  • шаблоны;
  • привязку к Zabbix Proxy.

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

FAQ

Можно ли массово добавить хосты в Zabbix через Excel?

Да. Сам Zabbix не использует Excel как универсальный формат создания хостов, но таблицу можно обработать Python-скриптом и передать содержащиеся в ней параметры через Zabbix API.

Нужен ли Zabbix Agent для проверки ICMP Ping?

Нет. ICMP-проверка выполняется со стороны Zabbix Server или Zabbix Proxy и не требует установленного Zabbix Agent на контролируемом устройстве.

Почему в Excel тогда используется интерфейс Agent и порт 10050?

Это связано со структурой используемого в статье скрипта и его Excel-шаблона. Сам шаблон ICMP Ping не обращается к Zabbix Agent по порту 10050.

Где узнать Group ID и Template ID?

Используемый скрипт умеет получать эти данные через Zabbix API. Для групп используется команда groups, а для шаблонов — templates.

Можно ли использовать ID 55 и 10564 из этой статьи?

Нет. Это идентификаторы объектов в моей установке Zabbix. В вашей системе необходимо получить собственные Group ID и Template ID.

Безопасно ли передавать API-токен скрипту?

Скрипту необходимы учётные данные для обращения к Zabbix API, но токен следует считать секретом. Перед использованием стороннего скрипта изучите его код, а сам токен не публикуйте и выдавайте от имени пользователя только необходимые права.

Как безопаснее проверить скрипт перед импортом 200 хостов?

Создайте отдельный Excel-файл с одним или двумя тестовыми устройствами. Выполните импорт, проверьте созданные объекты в Zabbix и только после успешной проверки запускайте массовое создание.

Заключение

В этой статье мы разобрали практический способ массового добавления хостов в Zabbix из Excel через API.

Сначала установили Python и необходимые библиотеки, затем создали API-токен, подготовили скрипт, получили ID нужной группы и шаблона и заполнили Excel-файл с параметрами будущих хостов.

После запуска импорта скрипт последовательно создал устройства через Zabbix API, а в веб-интерфейсе мы проверили, что каждому хосту назначились нужные параметры.

Для моей задачи с более чем 200 устройствами такой подход оказался значительно удобнее ручного создания каждого объекта. Особенно полезна подобная автоматизация в инфраструктурах, где регулярно приходится добавлять десятки или сотни однотипных серверов, сетевых устройств или других объектов мониторинга.

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

Также смотрите статью Zabbix 6 vs Zabbix 7: стоит ли переходить и зачем учить «шестёрку» сегодня.

ORIGINAL / ATTRIBUTION

Источник материала

Материал взят с https://sysadminhub.ru/. Оригинальная статья и авторство указаны по ссылке ниже.

Оригинал статьи на SysAdminHub.ru ↗

https://sysadminhub.ru/other/zabbix/mass-add-zabbix-hosts-from-excel-api

Материал проверен 10.10.2026. При изменении программного обеспечения сверяйтесь с актуальной документацией.
← Вернуться в базу знаний