Zabbix-агент в Debian Bookworm и Zabbix-сервер 3.4
Содержание
Введение
В Zabbix-агенте и сервере, начиная с версии 4.2, изменилась структура JSON, используемая элементами данных низкоуровневого обнаружения. Теперь возвращаемые данные больше не помещаются вовнутрь структуры {"data": [...]}
, а возвращаются как есть, в виде массива [...]
.
В документации Руководство по Zabbix / Низкоуровневое обнаружение (LLD) / Низкоуровневое обнаружение (LLD) об этом написано следующее:
Обратите внимание, что начиная с Zabbix 4.2 формат JSON, возвращаемого правилами низкоуровневого обнаружения, изменился. Более не ожидается, что JSON будет содержать объект "data". Чтобы поддерживать новые возможности - такие как предобработку значений элементов данных и пользовательские пути к значениям LLD-макросов в документе JSON, - правила LLD теперь будут воспринимать обычный JSON, содержащий массив.
Поиск узлов с более свежим пакетом
В официальных репозиториях Debian Bookworm поставляется Zabbix-агент версии 6.0.14, который не совместим с серверами Zabbix версии 3.4. Для поиска проблемных узлов можно воспользоваться следующим запросом:
SELECT hosts.host, items.key_
FROM items
JOIN hosts ON hosts.hostid = items.hostid
AND hosts.status = 0
WHERE items.status = 0
AND items.error = 'Cannot find the "data" array in the received JSON object.';
Сборка старого Zabbix-агента
Для решения проблемы можно, например, установить в Debian Bookworm Zabbix-агент 4.0.4 из официальных репозиториев Debian Buster, однако он требует в качестве зависимостей пакеты libldap-2.4-2
и multiarch-support
, которых в репозиториях Debian Bookworm. Чтобы выйти из ситуации, пересоберём этот пакет с использованием зависимостей, доступных через официальные репозитории Debian Bookworm.
Установим пакеты, которые нам понадобятся для выполнения сборки:
# apt-get install wget dpkg-dev devscripts build-essential automake dh-linktree apache2-dev libcurl4-gnutls-dev libevent-dev gnutls-dev libiksemel-dev libldap2-dev default-libmysqlclient-dev libopenipmi-dev libpcre3-dev libpq-dev libsnmp-dev libsqlite3-dev libssh2-1-dev libxml2-dev pkg-config unixodbc-dev zlib1g-dev libjs-prototype libjs-jquery-ui javahelper default-jdk libandroid-json-java liblogback-java libslf4j-java junit4 gettext ruby-sass
Скачаем файлы, необходимые для сборки пакета из исходных текстов:
$ wget http://mirror.ufanet.ru/debian/pool/main/z/zabbix/zabbix_4.0.4%2Bdfsg-1.dsc
$ wget http://mirror.ufanet.ru/debian/pool/main/z/zabbix/zabbix_4.0.4%2Bdfsg.orig.tar.xz
$ wget http://mirror.ufanet.ru/debian/pool/main/z/zabbix/zabbix_4.0.4%2Bdfsg-1.debian.tar.xz
Распакуем скачанные файлы в каталог, внутри которого будет выполняться сборка:
$ dpkg-source --no-check -x zabbix_4.0.4+dfsg-1.dsc
Переименуем один из файлов так, чтобы его имя соответствовало версии пакета, которую мы будем собирать:
$ mv zabbix_4.0.4+dfsg.orig.tar.xz zabbix_4.0.4+dfsg-1-debian-bookworm.orig.tar.xz
Войдём в каталог с распакованными файлами:
$ cd zabbix-4.0.4+dfsg
Отредактируем журнал изменений пакета:
$ EMAIL=stupin_v@ufanet.ru dch -i
В журнале изменений добавим сверху описание новой версии пакета:
zabbix (1:4.0.4+dfsg-1-debian-bookworm-1) UNRELEASED; urgency=medium
* Non-maintainer upload.
* Build old package for Debian 12 Bookworm.
-- Vladimir Stupin <stupin_v@ufanet.ru> Tue, 19 Sep 2023 11:55:40 +0500
Запустим сборку двоичных пакетов и обновлённого исходного пакета:
$ dpkg-buildpackage -us -uc -rfakeroot
Установка старого Zabbix-агента
В результате описанной выше процедуры сборки в выше появится пакет, который можно скачать по ссылке zabbix-agent 4.0.4+dfsg-1-debian-bookworm-1 amd64.deb.
Установить его в систему можно следующим образом:
# dpkg -i zabbix-agent_4.0.4+dfsg-1-debian-bookworm-1_amd64.deb
# apt-get install -f
Фиксация старого Zabbix-агента
Для того, чтобы установленный вручную пакет с Zabbix-агентом при обновлении системы из репозиториев не заменился более новым пакетом, можно создать файл /etc/apt/preferences.d/zabbix
со следующим содержимым:
Package: zabbix-agent
Pin: version 1:4.0.4+dfsg-1-debian-bookworm-1
Pin-Priority: 1003