1. Назначение
Скрипт предназначен для автоматизированной установки и проверки Zabbix Agent 2 на мини-ПК под управлением Ubuntu 20.04 ARM32.
Сотрудник запускает отдельные этапы установки и изменяет только те параметры, которые должны быть уникальными для конкретного устройства. Проверку системы, удаление предыдущего агента, установку зависимостей, копирование файлов, запуск служб и контроль результата выполняет скрипт.
Работа разделена на четыре режима:
| Команда | Назначение |
|---|---|
./install.sh | Проверка системы и установка Agent 2. |
./install.sh --start | Проверка конфигурации и запуск Agent 2. |
./install.sh --health-check | Проверка Adapter v14, WebSocket и HEALTH CHECK. |
./install.sh --audit | Полная проверка уже установленной системы. |
2. Состав установочного пакета
После распаковки в каталоге /root/zabbix-agent2-package должны находиться:
zabbix_agent2 zabbix_agent2.conf zabbix_agent2.conf.dpkg-dist zabbix_agent2.psk zabbix-agent2.service install.sh zabbix_agent2.d/ scripts/
В каталоге scripts должны находиться:
HEALTH_CHECK.py PARAMS_CHECK.py STATUS_CHECK.py VERSION_CHECK.py
3. Подготовка к установке
- Копирует архив
zabbix-agent2-package.tarв каталог/root. - Распаковывает архив.
- Выдаёт права на выполнение.
- Переходит в каталог установщика.
- Проверяет синтаксис скрипта.
tar -xvf /root/zabbix-agent2-package.tar chmod +x /root/zabbix-agent2-package/* cd /root/zabbix-agent2-package bash -n install.sh
Если команда bash -n install.sh ничего не вывела, синтаксических ошибок не обнаружено. Все команды выполняются от пользователя root.
- скрипт запускается с правами root;
- каталог пакета доступен;
- файл
install.shможет быть запущен; - установочный пакет содержит обязательные файлы.
4. Принцип работы установщика
Установка разделена на последовательные этапы. Каждый этап содержит обязательные проверки, которые выполняются автоматически.
- Проверяет выполнение всех условий текущего этапа.
- При обнаружении ошибки немедленно прекращает выполнение текущего этапа.
- Сообщает, какое условие необходимо выполнить.
- Не позволяет перейти к следующему этапу, пока текущий не завершён успешно.
Например, если после STEP 1 не изменён параметр Hostname, скрипт не позволит перейти к STEP 2 и потребует изменить имя устройства. Аналогично, при обнаружении adapter-v13 или отсутствии поддержки WebSocket выполнение STEP 3 будет остановлено до обновления Adapter до версии 14 с поддержкой WebSocket.
4. Общая схема установки
Скрипт не пропускает сотрудника к следующему этапу, пока обязательные условия текущего этапа не выполнены. Например, если параметр Hostname отсутствует, пустой или содержит шаблонное значение, STEP 2 прекращается и скрипт требует изменить имя устройства. После исправления сотрудник повторно запускает ту же команду.
Каждый следующий этап запускается только после успешного завершения предыдущего. Если проверка не пройдена, скрипт выводит причину и прекращает текущий этап. После исправления сотрудник повторяет ту же команду.
5. STEP 1 — установка Zabbix Agent 2
Запускает первый этап:
./install.sh
- Проверяет архитектуру. Поддерживаются
armv6lиarmv7l. Бинарник должен быть 32-битным ARM ELF-файлом. - Проверяет динамические библиотеки. Выполняется
ldd zabbix_agent2. При отсутствии библиотек или несовместимой GLIBC установка прекращается. - Определяет версию Agent 2 в установочном пакете и сравнивает её с установленной версией.
- Ищет предыдущую установку: бинарники Agent и Agent 2, утилиты
zabbix_getиzabbix_sender, службы systemd, APT-пакеты и файлы в/etc/zabbix. - Проверяет Python-компоненты:
python3,python3-pip,python3-venvиpython3-websockets. - Удаляет предыдущую версию, если найден классический агент или Agent 2 другой версии. Сначала служба останавливается и проверяется её фактическая остановка.
- Устанавливает новую версию: бинарник, конфигурацию, PSK, systemd unit, плагины и пользовательские скрипты.
- Создаёт каталоги
/var/log/zabbixи/var/lib/zabbix, а также пользователяzabbix, если его нет.
- Если Agent 2 не установлен или установлена другая версия, скрипт выполнит замену и установит версию из пакета.
- Если уже установлена такая же версия, файлы не будут перезаписаны. Скрипт проверит существующую установку.
- После STEP 1 служба Agent 2 останется остановленной и не будет включена в автозапуск до настройки уникального Hostname.
При несовместимой архитектуре, отсутствии библиотек, повреждённом пакете или невозможности остановить старую службу. Старая установка не удаляется, если новый пакет не прошёл предварительные проверки.
6. Настройка уникального Hostname
Открывает конфигурацию Agent 2:
nano /etc/zabbix/zabbix_agent2.conf
Файл также можно открыть через встроенный SSH Browser в MobaXterm: перейти к /etc/zabbix/zabbix_agent2.conf, открыть его встроенным текстовым редактором и сохранить сочетанием Ctrl+S.
В параметре Hostname= указывается уникальное имя мини-ПК.
- параметр
Hostnameсуществует; - значение не пустое;
- не используется шаблонное имя;
- имя не заканчивается на
_000_000.
7. STEP 2 — проверка конфигурации и запуск Agent 2
./install.sh --start
- Проверяет бинарник
/usr/sbin/zabbix_agent2. - Проверяет основной конфигурационный файл и systemd unit.
- Проверяет уникальность Hostname.
- Проверяет параметр
TLSPSKFileи наличие указанного PSK-файла. - Проверяет доступность Python-модуля
websockets. - Проверяет конфигурацию встроенной командой:
/usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -T
После успешной проверки выполняются:
systemctl daemon-reload systemctl enable zabbix-agent2.service systemctl restart zabbix-agent2.service systemctl is-enabled zabbix-agent2.service systemctl is-active zabbix-agent2.service
Если конфигурация корректна, Agent 2 запускается, включается в автозагрузку и переходит в состояние active. Только после успешного завершения всех проверок STEP 2 скрипт предложит выполнить ./install.sh --health-check.
Если Hostname не уникален, PSK отсутствует, конфигурация не проходит проверку или служба не запускается. В этом случае выводятся systemctl status и последние записи journalctl.
8. STEP 3 — проверка Adapter v14 и WebSocket
./install.sh --health-check
1. Проверка используемой версии Adapter
Скрипт анализирует параметр ExecStart службы adapter.service и определяет, какая версия Adapter фактически используется.
systemctl show adapter.service --property=ExecStart --value
Ожидаемый путь:
/etc/smartroad/adapter-v14/Multiadapter
Если скрипт обнаружит использование adapter-v13 или любой другой устаревшей версии Adapter, выполнение STEP 3 немедленно прекращается.
Скрипт потребует обновить Adapter до версии 14, поскольку только Adapter v14 поддерживает выполнение HEALTH CHECK.
Дополнительно будет указано, что устанавливаемая версия Adapter v14 обязательно должна содержать поддержку WebSocket. Без неё дальнейшая проверка невозможна.
./install.sh --health-check
2. Проверка поддержки WebSocket
cd /etc/smartroad/adapter-v14 ./Multiadapter -i
В выводе должна присутствовать строка WEBSOCKET: [X]. Если её нет, скрипт прекращает выполнение и требует установить сборку Adapter v14 с поддержкой WebSocket.
3. Проверка конфигурации
После этого скрипт проверяет Multiadapter.json, блок WEB_SOCKET, валидность JSON, параметры портов, перезапускает Adapter, проверяет его состояние и выполняет HEALTH_CHECK.py.
9. Выполнение HEALTH CHECK
cd /etc/zabbix/scripts python3 HEALTH_CHECK.py
Скрипт подключается к WebSocket-порту 9896, отправляет системную команду проверки и ожидает ответ Adapter.
HEALTH CHECK SUCCESS WebSocket .............. OK Command port ........... 9896 HEALTH_CHECK.py ........ OK
После этого установка и первичная проверка считаются завершёнными.
10. Типовые ошибки и действия сотрудника
| Ошибка | Что означает | Действия |
|---|---|---|
ERROR:Timeout | Соединение установлено, но Adapter не вернул ответ. | Проверить статус Adapter, журнал и порт 9896. |
Errno 111Connection refused | Порт 9896 не прослушивается. | Проверить adapter.service и блок WEB_SOCKET. |
ModuleNotFoundError | Отсутствует Python-модуль websockets. | Установить python3-websockets. |
| Ошибка JSON | Некорректные кавычки, запятые или скобки. | Исправить Multiadapter.json и повторить STEP 3. |
Permission denied | Неверные права на пользовательские скрипты. | Проверить владельца и права каталога /etc/zabbix/scripts. |
systemctl status adapter --no-pager -l ss -lntp | grep 9896 journalctl -u adapter -n 50 --no-pager python3 /etc/zabbix/scripts/HEALTH_CHECK.py
11. Режим аудита
./install.sh --audit
- наличие старого
zabbix_agentd; - версию Agent 2;
- конфигурацию и уникальность Hostname;
- PSK и Python-зависимости;
- состояние и автозапуск Agent 2;
- путь запуска Adapter;
- наличие Adapter v14 и WebSocket;
- валидность
Multiadapter.json; - блок
WEB_SOCKET; - результат HEALTH CHECK.
AUDIT RESULT: PASS
или
AUDIT RESULT: FAIL
При результате FAIL выводятся обнаруженные несоответствия.
12. Результат успешной установки
После успешного прохождения всех этапов:
- Zabbix Agent 2 установлен в
/usr/sbin/zabbix_agent2; - используется уникальный Hostname;
- PSK и конфигурация прошли проверку;
zabbix-agent2.serviceактивна и включена в автозагрузку;adapter.serviceзапускает Adapter v14;- WebSocket-порты 9896 и 9898 активны;
Multiadapter.jsonимеет корректный синтаксис;HEALTH_CHECK.pyуспешно получает ответ Adapter;- режим аудита завершается результатом
PASS.
Полная последовательность команд
tar -xvf /root/zabbix-agent2-package.tar chmod +x /root/zabbix-agent2-package/* cd /root/zabbix-agent2-package bash -n install.sh ./install.sh nano /etc/zabbix/zabbix_agent2.conf ./install.sh --start ./install.sh --health-check ./install.sh --audit
Команды редактирования через nano можно заменить открытием соответствующего файла во встроенном текстовом редакторе SSH Browser в MobaXterm.