Поиск по сайту
Интересуешься IT и системным администрированием? Подпишись на наш канал, где мы делимся инсайдами, новостями и практическими советами! Прокачай свои навыки вместе с нами!
Как массово добавить хосты в Zabbix из Excel через API
Недавно я столкнулся с задачей: необходимо было поставить на мониторинг более 200 хостов, используя в Zabbix обычную проверку доступности через ICMP-ping. Добавлять такое количество узлов вручную через веб-интерфейс оказалось слишком долго и неудобно — процесс превращается в монотонную и легко ошибочную работу.
Поэтому возник логичный вопрос: как автоматизировать массовое добавление хостов в Zabbix?
Одним из самых удобных способов решения этой задачи является использование Zabbix API. С его помощью можно автоматически создавать хосты, назначать им шаблоны, группы, прокси и другие параметры.
В этой статье я покажу, как массово добавить хосты в Zabbix из Excel-файла с помощью Python и Zabbix API, что позволит значительно ускорить процесс развёртывания мониторинга и избежать ручной рутины.
Онлайн-курс: Zabbix 6. Мониторинг IT инфраструктуры предприятия.
Курс предлагает глубокое изучение Zabbix 6 и охватывает все ключевые аспекты: от установки и конфигурации до продвинутого мониторинга и автоматизации. Курс подходит как для начинающих, так и для опытных администраторов.
Содержание:
Установка и проверка Python
Добавлять хосты я буду со своей рабочей станции под управлением Windows 10. Первое, что необходимо сделать — установить Python, так как все команды в дальнейшем мы будем выполнять именно с его помощью. Почему выбран именно этот способ, я расскажу немного позже.
Скачать Python можно с официального сайта: https://www.python.org/
Если по каким-то причинам сайт у вас не открывается (например, как было в моём случае без VPN), вы можете скачать установочный файл Python по моей ссылке: python-3.13.12-amd64.zip.
После того как установочный файл будет скачан, запускаем установку Python.
После запуска установщика Python откроется первое окно мастера установки. В нём выбираем пункт Customize installation (Выборочная установка).
На следующем этапе откроется окно Optional Features. Здесь необходимо установить галочку for all users (requires admin privileges).
Эта опция позволяет установить Python для всех пользователей компьютера, а не только для текущего профиля. Это удобно, если на компьютере работают несколько пользователей или если скрипты будут запускаться из разных учетных записей. Кроме того, установка для всех пользователей предотвращает возможные проблемы с правами доступа при запуске Python и использовании пакетов. После этого нажимаем Next.
В следующем окне Advanced Options обязательно ставим галочку Add Python to environment variables.
Этот параметр автоматически добавляет Python в системную переменную PATH. Благодаря этому Python можно будет запускать из командной строки или PowerShell из любого каталога без необходимости указывать полный путь к исполняемому файлу. Если не включить эту опцию, команды pythonpython или pip могут не распознаваться системой. После этого нажимаем Install.
После завершения установки появится окно с сообщением о том, что установка выполнена успешно. Нажимаем Close, после чего рекомендуется перезагрузить компьютер, чтобы все системные переменные и настройки применились корректно.
Далее открываем командную строку от имени администратора. Первое, что необходимо сделать — проверить, что Python установлен корректно и доступен из командной строки.
Для этого вводим следующую команду:
python --version
В ответ система выведет установленную версию Python.
Python 3.13.12
В моём случае отображается Python 3.13.12, что означает, что установка прошла успешно и Python готов к работе. На этом подготовку Python можно считать завершённой.
Создание API-токена в Zabbix
Следующий шаг — создать API-токен в Zabbix, который будет использоваться для подключения к серверу Zabbix и выполнения операций через API, в том числе для массового добавления хостов.
Для этого заходим в веб-интерфейс Zabbix, далее переходим в раздел: Users → API tokens и нажимаем кнопку Create API token.
Откроется окно создания нового API-токена.
В поле Name указываем имя токена. В моём случае это Pawel.
Далее необходимо выбрать пользователя, для которого будет создан токен. Я выбираю своего пользователя.
После этого указываем срок действия токена. В поле Expires at задаётся дата и время, до которых токен будет действовать, с точностью до минут и секунд.
После заполнения всех параметров нажимаем кнопку Add.
Как видно, токен успешно создан.
Важно: помнить, что API-токен является конфиденциальными данными. Его нельзя передавать другим людям или публиковать в открытом доступе. Если токен случайно был раскрыт, его лучше сразу отозвать и создать новый.
В моём случае токен уже отозван, поэтому я без проблем показываю его на скриншоте.
Подготовка и загрузка скрипта импорта
Отлично, API-токен у нас уже есть. Теперь можно переходить к подготовке скрипта для массового добавления хостов.
Писать его с нуля мы не будем, а возьмём за основу готовый проект с GitHub: github.com
Это небольшой Python-скрипт, предназначенный для импорта хостов из Excel-файла в Zabbix через API. В репозитории уже есть основной файл скрипта, список зависимостей, а также примеры Excel-файлов, которые можно использовать как шаблон. Сам проект позиционируется как простое решение для массового импорта хостов в Zabbix из Excel.
Однако в исходном варианте этого скрипта есть ряд нюансов. Например, в моём случае возникла проблема с сертификатом, а также в нём отсутствовало нужное мне поле Visible name. Поэтому я доработал этот скрипт под свои задачи, и вы можете скачать уже готовую адаптированную версию по моей ссылке: zabbix-import-hosts-main.zip.
Скачиваем данный архив со скриптом и распаковываем его на диск C. В моём случае после распаковки получился следующий путь: C:\zabbix-import-hosts-main.
Переходим в папку со скриптом и выполняем следующую команду:
cd C:\zabbix-import-hosts-main
Далее вводим команду:
dir
Команда dir используется в Windows для просмотра содержимого текущего каталога. Она выводит список файлов и папок, которые находятся в директории, где вы сейчас находитесь.
В результате выполнения команды вы должны увидеть примерно следующий список файлов:
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
6 файлов 94 710 байт
2 папок 37 589 868 544 байт свободно
Как видно из вывода, в каталоге находятся основные файлы скрипта, а также пример Excel-файла hosts.xls, который используется для импорта хостов.
Установка зависимостей Python
Теперь необходимо установить зависимости Python, которые требуются для работы скрипта. Для этого выполняем следующую команду:
pip install -r requirements.txt
Данная команда устанавливает все необходимые библиотеки, перечисленные в файле requirements.txt. В нашем случае Python установит следующие пакеты:
- pandas — используется для работы с Excel-файлом и обработки данных
- requests — необходим для отправки запросов к Zabbix API
- tabulate — используется для удобного отображения данных в табличном виде в консоли
После выполнения команды в консоли появится вывод процесса установки. Также может появиться уведомление о том, что доступна новая версия pip, например:
[notice] A new release of pip is available: 25.3 -> 26.0.1
[notice] To update, run: python.exe -m pip install --upgrade pip
Это стандартное уведомление и оно не является ошибкой. Оно лишь сообщает о наличии более новой версии менеджера пакетов pip, которую при желании можно обновить.
Также дополнительно установим библиотеку xlrd. Она необходима для работы со старыми Excel-файлами формата .xls, которые используются в данном примере.
Выполняем команду:
pip install xlrd
Библиотека xlrd используется модулем pandas для чтения Excel-файлов старого формата .xls. Если вы используете Excel-файлы формата .xlsx, то устанавливать xlrd не требуется, так как такие файлы обрабатываются через другую библиотеку.
После выполнения команды в консоли также может появиться стандартное уведомление о наличии новой версии pip, например:
[notice] A new release of pip is available: 25.3 -> 26.0.1
[notice] To update, run: python.exe -m pip install --upgrade pip
Это информационное сообщение и оно не является ошибкой.
Получение ID групп и шаблонов в Zabbix
Пришло время запускать наш скрипт.
Возвращаемся в командную строку и выполняем следующую команду:
python main.py --url https://zabbix.sysadminhub.ru --token ВАШ_TOKEN
Здесь необходимо заменить значение ВАШ_TOKEN на API-токен, который мы ранее создали в Zabbix.
В моём случае команда выглядит так:
python main.py --url https://zabbix.sysadminhub.ru --token 9b66a316ec8f264bd4dcb67bac9f6e63d47d4ff746d545d02e53c06e3196082e
После запуска скрипта в консоли появится интерактивное меню, в котором отображается список доступных команд. По сути это небольшая консольная оболочка, через которую можно получать информацию из Zabbix и выполнять различные действия, например просматривать группы, шаблоны, прокси или запускать импорт хостов.
Вывод в консоли будет выглядеть примерно следующим образом:
+--------------+-----------------------------------------+
| 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 |
+--------------+-----------------------------------------+
How to use: https://github.com/Udeus/zabbix-import-hosts
Command:
Внизу отображается строка Command: — это приглашение к вводу команды. Здесь можно вводить команды из списка, чтобы выполнять различные действия через API Zabbix.
Данный скрипт работает с ID объектов Zabbix, таких как шаблоны, группы, прокси и т.д. Поэтому для того, чтобы назначить нашим хостам нужную группу, необходимо сначала узнать её ID.
Сделать это можно прямо из интерфейса скрипта. В строке Command: вводим команду:
groups
После выполнения команды скрипт обратится к Zabbix 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 имеет ID 55. Именно этот идентификатор необходимо указывать в Excel-файле в колонке Group ID, чтобы добавляемые хосты автоматически попадали в нужную группу.
Запоминаем ID 55, он нам понадобится далее.
Далее необходимо узнать ID шаблона, который будет назначаться создаваемым хостам. В моём случае используется стандартный шаблон ICMP Ping, так как задача состоит только в проверке доступности сетевых устройств.
Чтобы узнать ID шаблона, в строке Command: вводим команду:
templates
После выполнения команды скрипт выведет список всех шаблонов, которые есть в системе Zabbix, вместе с их идентификаторами.
+-------------------------------------------------------+--------------+
| name | templateid |
|-------------------------------------------------------+--------------|
| Windows Server Basic Monitoring | 10681 |
| Yadro Tatlin Unified v3.1.1 | 11262 |
| Eltex MES SNMPv3 | 11140 |
| eltex_updated | 11261 |
| Zabbix server health | 10047 |
| Kubernetes cluster state by HTTP | 10510 |
| PFSense by SNMP | 10515 |
| *** | |
| OpenWeatherMap by HTTP | 10516 |
| ICMP Ping | 10564 |
| Proxmox VE by HTTP | 10517 |
| Ribbon SBC SWe CE by HTTP | 10675 |
| Ribbon SBC SWe Core by HTTP | 10676 |
| VeloCloud SD-WAN Edge by HTTP | 10678 |
+-------------------------------------------------------+--------------+
Как видно из списка, шаблон ICMP Ping имеет ID 10564. Именно этот идентификатор необходимо указать в Excel-файле в колонке Template ID, чтобы при создании хоста к нему автоматически привязался данный шаблон.
Подготовка Excel-файла с хостами
Далее необходимо заполнить Excel-файл, который находится в папке со скриптом: C:\zabbix-import-hosts-main\hosts.xls
Открываем файл и заполняем следующие колонки.
Hostname
Имя хоста в Zabbix. Это техническое имя объекта, которое будет использоваться внутри системы мониторинга.
В моём случае используется следующая схема именования: R01_GW1, где:
- R01 — номер региона
- GW1 — основной шлюз (основной канал связи)
Для резервного канала используется имя: R01_GW2, где:
- R01 — номер региона
- GW2 — резервный шлюз (резервный канал связи)
Таким образом для каждого региона создаётся два устройства: основной и резервный канал связи.
Visible name
Отображаемое имя хоста в интерфейсе Zabbix. Оно может отличаться от технического имени и используется для более удобного отображения в интерфейсе мониторинга.
Например: R01_GW1_Адыгея
В этом случае к техническому имени добавляется название региона, чтобы сразу было понятно, к какому региону относится устройство.
IP address
IP-адрес устройства, которое будет добавлено в мониторинг.
Например: 172.111.138.70
DNS
Поле для указания DNS-имени устройства.
В моём случае оно не используется, поэтому я оставляю его пустым.
Interface
Тип интерфейса, через который будет выполняться мониторинг.
В данном примере используется значение: Agent
Port
Порт, на котором работает агент Zabbix.
Стандартное значение: 10050
Group ID
ID группы хостов в Zabbix, в которую будет добавлен новый хост.
ID группы мы получили ранее с помощью команды groups в скрипте. В моём случае используется группа GW, которая имеет ID 55, поэтому в таблице в колонке Group ID указываем значение 55.
Template ID
ID шаблона Zabbix, который будет автоматически привязан к создаваемому хосту.
Этот ID мы также получили ранее с помощью команды templates. Для шаблона ICMP Ping значение Template ID = 10564, поэтому в таблице указываем 10564.
Proxy ID
ID прокси-сервера Zabbix, через который будет выполняться мониторинг.
В моём случае прокси не используется, поэтому данное поле я оставляю пустым.
Как видно на примере таблицы, для каждого региона создаётся по два устройства: основной и резервный шлюз. При этом каждому устройству назначается свой IP-адрес, а также указывается группа (ID 55) и шаблон (ID 10564), которые будут автоматически применяться при добавлении хоста в систему мониторинга.
Запуск скрипта и массовый импорт хостов
Отлично, Excel-файл мы заполнили, теперь можно запускать сам скрипт и создавать наши хосты в Zabbix.
В строке Command: вводим команду:
import hosts
После этого скрипт попросит указать файл, из которого необходимо импортировать хосты. Указываем наш Excel-файл:
hosts.xls
После этого начнётся процесс создания хостов в Zabbix. В консоли можно будет увидеть вывод о каждом добавленном хосте и его новом ID в системе.
Пример вывода:
----------------------------------------------------------------------------------------------------------------------------
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, а также ID нового хоста, который был присвоен ему в Zabbix.
После завершения работы можно выйти из скрипта. Для этого вводим команду:
exit
После этого появится сообщение:
Closing the script...
Проверка созданных хостов в Zabbix
Теперь перейдём в Zabbix и проверим, что наши хосты действительно были созданы.
Открываем раздел: Data collection → Hosts
Чтобы быстрее найти добавленные устройства, я заранее отфильтровал список по имени r0. Это позволяет увидеть все хосты, которые были добавлены из нашего Excel-файла. Как видно на скриншоте, в списке отображаются устройства R01_GW1, R01_GW2, R02_GW1, R02_GW2 и так далее — именно те хосты, которые мы указали в таблице.
Это подтверждает, что скрипт успешно подключился к Zabbix API и автоматически создал все необходимые хосты.
Для дополнительной проверки откроем любой из созданных хостов. Например, я открою R01_GW1_Адыгея и проверю его настройки.
Как мы видим:
- назначился нужный шаблон ICMP Ping
- хост добавился в правильную группу GW
- интерфейс мониторинга установлен как Agent
- указан корректный IP-адрес
- указан правильный порт 10050
Это означает, что все параметры из нашего Excel-файла были успешно применены при создании хоста.
Таким способом можно очень быстро добавлять большое количество устройств — 100, 200, 500 и даже 1000 хостов, не тратя время на ручное создание каждого из них через веб-интерфейс.
После добавления хостов мы также можем выполнять массовое редактирование параметров через интерфейс Zabbix. Например, можно одновременно изменить:
- назначенные шаблоны (Templates)
- группы хостов (Host groups)
- интерфейсы мониторинга
- Zabbix Proxy, через который выполняется мониторинг
- теги (Tags)
- параметры макросов (Macros)
- настройки шифрования агента (Agent encryption)
- параметры дискавери и веб-проверок
- а также включать или отключать мониторинг хостов
Таким образом, массовый импорт через API позволяет значительно ускорить первичное добавление устройств, а дальнейшая настройка уже может выполняться централизованно через стандартные инструменты Zabbix.
Заключение
В этой статье мы рассмотрели один из простых и удобных способов массового добавления хостов в Zabbix с помощью API и Excel-файла. Такой подход позволяет значительно сократить время на развёртывание мониторинга, особенно когда речь идёт о десятках или сотнях устройств.
Мы последовательно разобрали весь процесс: установили Python, подготовили рабочую среду, создали API-токен в Zabbix, настроили Excel-файл с параметрами будущих хостов и запустили скрипт, который автоматически добавил устройства в систему мониторинга.
Использование подобной автоматизации особенно полезно в крупных инфраструктурах, где необходимо быстро поставить на мониторинг большое количество серверов, сетевого оборудования или виртуальных машин. Вместо длительного ручного добавления достаточно подготовить таблицу и запустить скрипт.
В дальнейшем данный подход можно легко масштабировать: изменять Excel-файл, добавлять новые устройства, назначать разные группы, шаблоны или прокси и быстро импортировать их в Zabbix.
Таким образом, использование Zabbix API и небольших автоматизированных скриптов позволяет значительно упростить администрирование системы мониторинга и снизить количество рутинных операций.
Вам понравилась эта статья? Тогда вам, скорее всего, будет интересна другая полезная статья Zabbix 6 vs Zabbix 7: стоит ли переходить и зачем учить «шестёрку» сегодня.
Интересуешься IT и системным администрированием? Подпишись на SysAdminHub в Телеграмм или Макс, чтобы узнавать обо всем первым!
Статья была полезна? Поддержи автора, и благодаря твоей помощи новые материалы будут выходить еще чаще:
