Как будет работать массовое добавление хостов
Общая схема достаточно простая:
Excel-файл
↓
Python-скрипт
↓
Zabbix API
↓
Создание хостов
↓
Группа + шаблон + IP + другие параметры
Вместо того чтобы вручную создавать каждый хост через веб-интерфейс, мы заранее подготовим таблицу с параметрами устройств, а Python-скрипт передаст эти данные в Zabbix через API.
В моём случае задача состояла в мониторинге доступности региональных шлюзов. Для каждого региона необходимо было создать два объекта:
- основной канал связи;
- резервный канал связи.
Для проверки доступности используется стандартный шаблон ICMP Ping.
Устанавливаем Python в Windows
Добавлять хосты я буду со своей рабочей станции под управлением Windows 10. Для запуска скрипта нам понадобится Python.
Скачать актуальную версию Python лучше с официального сайта:
Также для повторения именно моего примера можно использовать сохранённый установочный пакет:
После загрузки запускаем установщик.
В первом окне выбираем Customize installation.
На следующем этапе проверяем необходимые компоненты установки и при необходимости устанавливаем Python для всех пользователей компьютера.
На этапе Advanced Options обязательно обратите внимание на параметр:
Add Python to environment variables
Он добавляет Python в переменную окружения PATH, благодаря чему команды python и pip можно будет запускать из командной строки или PowerShell без указания полного пути к исполняемым файлам.
После этого нажимаем Install и ждём завершения установки.
Проверяем установку Python
Откройте новую командную строку или PowerShell и выполните:
python --version
В моём случае результат выглядит так:
Python 3.13.12
Если версия отображается, значит Python установлен и доступен через PATH.
Создаём API-токен в Zabbix
Следующий шаг — получить API-токен, с помощью которого наш Python-скрипт сможет обращаться к Zabbix API.
Откройте веб-интерфейс Zabbix и перейдите в раздел управления API tokens. Расположение этого раздела может немного отличаться в зависимости от версии Zabbix и прав текущего пользователя.
Нажмите Create API token.
Укажите имя токена. Например:
Import hosts
Выберите пользователя, от имени которого будут выполняться запросы API, и при необходимости задайте срок действия токена.
После заполнения параметров нажмите Add.
Zabbix создаст токен, который необходимо сохранить для дальнейшего использования.
Токен, который был виден в моих исходных материалах и скриншотах, к моменту публикации уже отозван.
Скачиваем скрипт для импорта хостов
Писать инструмент полностью с нуля не будем. За основу я взял проект:
Udeus/zabbix-import-hosts на GitHub
Это Python-скрипт для импорта хостов из Excel в Zabbix через API.
Однако исходный вариант пришлось немного доработать под мою задачу. В частности, мне потребовалось поле Visible name, а также пришлось решить возникшую в моей среде проблему при HTTPS-подключении.
Готовую адаптированную версию, которая использовалась в этой статье, можно скачать здесь:
Распаковываем архив на диск 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 не используется, поэтому поле остаётся пустым.
В результате для каждого устройства в таблице указаны необходимые параметры, которые скрипт затем передаст в 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-файла.
Теперь откроем один из созданных хостов.
Например:
R01_GW1_Адыгея
Проверяем, что:
- назначен шаблон 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: стоит ли переходить и зачем учить «шестёрку» сегодня.