Home » Мониторинг » Zabbix » Обновление Zabbix 6.0 до 7.0

Обновление Zabbix 6.0 до 7.0

На днях  вышла новая версия сервера Zabbix 7.0. Сегодня я расскажу, как обновить предыдущую LTS версию Zabbix 6.0 до актуальной 7.0. Делать это рано или поздно придётся в обязательном порядке всем, так как срок полной поддержки 6-й версии заканчивается 28 февраля, 2025. Осталось не так много времени. Потом будут ещё 2 года ограниченной поддержки только по вопросам безопасности.

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Введение

Традиционно предупрежу о том, что обновление потенциально небезопасная процедура. Данные потерять в результате обновления вероятность небольшая, а вот получить простой мониторинга из-за каких-то ошибок, которые могут возникнуть в процессе, вполне вероятно. Случается это не так уж и редко. Так что рекомендую попробовать обновиться сначала на копии виртуальной машины, если для вас простой критический. Если же нет, то достаточно сделать бэкап перед обновлением и приступать.

Также отдельно отмечу, что обновление сервера не приводит к автоматическому обновлению шаблонов, которые часто обновляются от релиза к релизу. Обновлять шаблоны Zabbix придётся отдельно и вручную. Для этого надо сходить в репозиторий разработчиков и скачать последнюю версию нужного шаблона. Не забудьте выбрать нужную ветку разработки, которая должна соответствовать вашей версии сервера Zabbix. На момент написания этой статьи по обновлению, в репозитории по умолчанию открывается последняя стабильная ветка 7.0. Но через некоторое время это изменится по мере выхода новых релизов.

Подготовка к обновлению

Судя по информации в документации Zabbix, обновиться до 7.0 можно практически с любой более ранней версии. Привожу дословно: "Direct upgrade to Zabbix 7.0.x is possible from Zabbix 6.4.x, 6.2.x, 6.0.x, 5.4.x, 5.2.x, 5.0.x, 4.4.x, 4.2.x, 4.0.x, 3.4.x, 3.2.x, 3.0.x, 2.4.x, 2.2.x and 2.0.x.". Не забудьте учесть, что более новая версия Zabbix Server требует более высоких версий php. То есть не достаточно просто обновить сам мониторинг. Нужно обновить и всё сопровождающее его веб окружение и СУБД.

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

# systemctl stop zabbix-server zabbix-agent

Дальше в зависимости от используемой СУБД, делаем дамп базы данных, если её объём позволяет это сделать. Если нет, и у вас большая база, то используйте тот инструмент, которым вы обычно бэкапите базу данных.

Бэкапим MySQL базу заббикса:

# /usr/bin/mysqldump --opt -v --databases zabbix -uzabbix -p'password' | /usr/bin/gzip -c > ~/zabbix.sql.gz

Бэкапим PostgreSQL базу заббикса:

# sudo -u postgres pg_dump -U postgres zabbix | /usr/bin/gzip > ~/zabbix.sql.gz

На всякий случай сохраним php скрипты админки и все файлы конфигурации, чтобы можно было оперативно запустить старую версию в случае нештатной ситуации. Можно просто сделать snapshot витуалки перед обновлением, чтобы откатиться назад в случае проблем.

# mkdir /opt/zabbix-backup/
# cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
# cp /etc/httpd/conf.d/zabbix.conf /opt/zabbix-backup/
# cp -R /usr/share/zabbix/ /opt/zabbix-backup/
# cp -R /usr/share/zabbix-* /opt/zabbix-backup/

Установка обновления Zabbix 6 до 7

Подключаем репозитории новой версии Zabbix. В зависимости от используемой системы, дальнейшие действия будут различаться. Вам нужно будет скачать пакет под свою версию системы из Zabbix Official Repository. Для написания этой статьи я использовал один из своих серверов, работающих на базе системы Oracle Linux Server 8.10. Ставлю репозиторий для неё:

# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/oracle/8/x86_64/zabbix-release-7.0-1.el8.noarch.rpm
# dnf clean all
# dnf makecache

Подключение репозитория Zabbix 7.0

Для Debian 12 репозиторий подключаем так (предварительно удалив прошлый):

# rm -Rf /etc/apt/sources.list.d/zabbix.list
# wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
# dpkg -i zabbix-release_7.0-1+debian12_all.deb
# apt update

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

Обновляю установленные пакеты. В случае с использованием MySQL сервера это такой набор:

# dnf upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent

Обновление Zabbix Server

Для PostgreSQL сервера команда будет такая:

# dnf upgrade zabbix-server-pgsql zabbix-web-pgsql zabbix-agent

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

# rpm -qa | grep zabbix
zabbix-get-6.0.30-release1.el8.x86_64
zabbix-web-mysql-6.0.30-release1.el8.noarch
zabbix-release-7.0-1.el8.noarch
zabbix-agent-6.0.30-release1.el8.x86_64
zabbix-web-deps-6.0.30-release1.el8.noarch
zabbix-server-mysql-6.0.30-release1.el8.x86_64
zabbix-web-6.0.30-release1.el8.noarch
zabbix-sender-6.0.30-release1.el8.x86_64

Все установленные в системе пакеты Zabbix

И обновите, если таковые найдутся.

# dnf upgrade zabbix-get zabbix-sender

Для Deb дистрибутивов, обновление будет выглядеть примерно так, в зависимости от набора установленных пакетов в системе и версии СУБД:

# apt-get install --only-upgrade zabbix-server-mysql zabbix-frontend-php zabbix-agent

Если использовался веб сервер Apache с mod_php, то обновить их можно вот так:

# apt-get install zabbix-apache-conf

После обновления серверной части будет происходить обновление базы данных. В это время в логе /var/log/zabbix/zabbix_server.log будут следующие строки:

1760570:20240605:213728.147 using configuration file: /etc/zabbix/zabbix_server.conf 
1760570:20240605:213728.155 current database version (mandatory/optional): 06000000/06000044 
1760570:20240605:213728.155 required mandatory version: 07000000 
1760570:20240605:213728.155 mandatory patches were found 
1760570:20240605:213728.156 starting automatic database upgrade 
1760570:20240605:213728.171 completed 0% of database upgrade 
1760570:20240605:213734.917 slow query: 5.256752 sec, "alter table `triggers` modify `description` varchar(255) default '' not null" 
1760570:20240605:213735.456 completed 1% of database upgrade 
1760570:20240605:213738.829 completed 2% of database upgrade 
1760570:20240605:213740.318 completed 3% of database upgrade 
1760570:20240605:213741.663 completed 4% of database upgrade 
1760570:20240605:213742.397 completed 5% of database upgrade 
1760570:20240605:213743.041 completed 6% of database upgrade 
1760570:20240605:213743.797 completed 7% of database upgrade 
1760570:20240605:213745.197 completed 8% of database upgrade 
1760570:20240605:213746.708 completed 9% of database upgrade 
1760570:20240605:213747.953 completed 10% of database upgrade

Процесс обновления базы данных

и т.д. Процесс должен завершиться удачно. Об этом будут символизировать следующие строки:

1760570:20240605:214049.375 completed 100% of database upgrade 
1760570:20240605:214049.445 database upgrade fully completed

Есть ненулевой шанс, что будет какая-то ошибка с базой. Чаще всего возникают проблемы с какой-то нестандартной записью в таблице. Туда может попасть какой-то необычный символ, или с кодировкой проблемы. В этих случаях удаляйте проблемные записи, меняйте кодировку базы zabbix.

После обновления переходите в web интерфейс и проверяйте версию Zabbix. Должна быть 7.0. На всякий случай очистите кэш браузера. Иногда могут возникать ошибки в новом веб интерфейсе, если этого не сделать.

Напоминаю, что для Zabbix Server 7.0 необходима версия PHP не ниже 8.0. Если она ниже, то получите вместо веб интерфейса ошибку:

Minimum required PHP version is 8.0.0.

В этом случае обновите PHP. Этот процесс будет сильно зависеть от типа вашей системы и способа его настройки в момент установки сервера Zabbix. В моём случае я использую веб сервер Nginx и Php-fpm. Чтобы обновить последний, мне пришлось подключить дополнительный репозиторий Remi:

# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

И из него установить нужную версию php:

# dnf module reset php
# dnf module enable php:remi-8.0
# dnf upgrade

Обновление php до 8.0 для Zabbix 7

После этого веб интерфейс обновлённого Zabbix Server 7.0 заработал.

Обновлённый Zabbix Server 7.0

Если у вас более свежая система, типа форка RHEL9 или Debian 12, там php 8.0+ ставится из базовых репозиториев.

Отдельно отмечу, что связь с Grafana через плагин Zabbix plugin for Grafana версии 4.4.6 (у меня не самая свежая версия) продолжил работать. Обновление ему не потребовалось.

Обновление шаблонов Zabbix Server

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

Если же вы хотите обновить и шаблоны, то делать это придётся вручную. Сначала нужно скачать и импортировать в систему новую версию шаблона. Ссылку на репозиторий я привёл в начале статьи. После этого новый шаблон можно применить к хостам. Для этого нужно открепить старый шаблон с удалением всех айтемов и прикрепить новый. Если не удалить старый с удалением всех айтемов, то при добавлении нового он не сможет прикрепиться, если на хосте уже есть айтемы с теми же именами, что и в шаблоне. А при обновлении старой версии одного и того же шаблона на новую такие пересечения обязательно будут.

Так что статистику по хосту вы потеряете при обновлении шаблона. Это неудобно, но простого пути с обновлением шаблона нет. Если вам категорически нельзя терять статистику, то придётся вручную старый шаблон дорабатывать до нового. В целом, это выполнимая задача, но немного муторная. В итоге решаемая тем или иным путём.

Заключение

В целом, процесс обновления одиночного сервера Zabbix представляет из себя простую задачу. Если у вас используются proxy, то сначала обновляем сервер, а потом прокси. Обновлять прокси не обязательно, но крайне рекомендуется. Полная поддержка прокси сервером возможна только в рамках одной релизной ветки. Прокси прошлого релиза поддерживаются в ограниченном формате.

Все способы оповещений, как и интеграции, обновляются вручную, как и шаблоны. Автоматически они не приедут на сервер вместе с обновлением. Обновляется только серверная часть. Всё, что касается внешних сущностей, добавляемых через импорт конфигурационных yaml или xml файлов (в старых версиях), обновляются вручную и отдельно.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

17 комментариев

  1. Владимир, привет.
    Подскажи, а почему докерезированный вариант Zabbix тобой не рассматривается в качестве способа установки по-умолчанию?
    Он же проще и в миграции, и в обновлении. К чему все эти "танцы" с пакетами и версиями PHP - для наглядности?
    з.ы. По идее, даже вариант с настройкой iptables в сочетании с сервисами в докере можно реализовать, если это железный сервер.

    • А в чём смысл использования Docker в данном случае? Zabbix Server это просто один пакет, который успешно ставится через пакетный менеджер. Это как раз тот случай, когда Docker совершенно не нужен. Он не для таких ситуаций придуман. Лишняя прослойка будет. Ты же не катишь обновления сервера каждый день. Это случается обычно раз в несколько лет, когда выходит новый релиз. А всё состояние Zabbix Server хранится в его базе и конфигурационном файле. Даже если надо перенести его, то это не проблема.

      • Думаю, что этот подход имеет ряд недостатков, например:
        - для VPS - контейнеры подходят больше
        - лишний уровень изоляции, а не "прослойки" - тоже скорее плюс, т.к. оверхед на контейнерезации минимален
        - возможность хранения конфигов и скриптов в git, что в сочетании с менеджерами конфигурации дает IAC + возможность просмотра изменений и прочие гитовые плюшки

        Ну а о том зачем придуман докер - вопрос философский. Его можно начать с firejail на BSD и закончить оркестраторами а-ля k8s.

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

        Результат - меньше пакетов, меньше зависимостей, проще и быстрее обслуживание. Все, что хоть как-то можно вывести в изолированную среду - выносится в контейнеры и не зависит ни от php/python'ов на сервере ни от остального окружения. Таким образом на сервере могут сосуществовать сервисы, имеющие разные зависимости, что в случае использования пакетных менеджеров хостовой системы - просто не возможно.

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

  2. Проблемы с русским языком интерфейса не возникло после обновления до 7.0
    В 6.4 русский имелся. Обновился до 7.0 - русский в настройках интерфейса выбран, но интерфейс все равно на английском. Думал Zabbix убрал поддержку, но смотрю у вас интерфейс на русском.
    Куда еще посмотреть? Локаль RU установлена.

    • Проблемы с русским языком интерфейса не возникло после обновления до 7.0 ?

    • Я с таким не сталкивался и не видел подобных отзывов. Скорее всего у Вас какая-то локальная проблема.

  3. Интересно, а был ли опыт миграции с appliance на полноценную версию?
    Если коротко, то развернут appliance 6.4, хочу перевести на полноценную инсталляцию на Debian 12. Может был у кого опыт?
    С предыдущей версии appliance 5 переносил все в 6.4, относительно недавно, вручную...

    • Собственно, а какой тут опыт нужен? Всё состояние Zabbix хранится в конфигурационном файле сервера и базе данных. Для переноса Zabbix Server на другой сервер достаточно установить там такую же версию сервера, перенести конфигурационный файл сервера и перенести дамп базы данных. Вот и весь переезд.

      У меня статья есть по этой теме: https://serveradmin.ru/pereezd-ili-perenos-zabbix-server/

  4. Обновляйте сервера своевременно и будет вам счастье! Конечно если вы любите красивые цыфорки в uptime - это конечно не Ваш вариант... Но будьте благоразумны! Ядро сейчас поддерживается всего 2 года! Самое старое сейчас это что то типа 5.10, а это минимум Deb11/centos8 или что вы там у себя крутите. Обновился сейчас с 6.4.чототам до 7.0(psql/nginx) - пришлось забэкапить конфиг, ну и переписать новый. ВСЁ. Скачал deb пакет, apt update && apt upgrate -y и поехали. Ну да, я предусмотрительно снял бэкап с сервера и свежий бэкап базы перед обновлением - бэкапы надо делать, ну хотя бы на случай "ой бля".

  5. Владимир

    Обновил, все ок.
    Но zabbix-server не запускается

    Unable to start Zabbix server due to unsupported MySQL database version (8.00.26).
    Must be at least (8.00.30).

  6. Андрей

    теоретически обновиться с более младших версий можно но на на практике это сложно, максимум между LTS версией т.е с 6 на 7

  7. Вчера тоже обновил с 6.4 до 7, но словил ошибку:
    [Z3005] query failed: [1419] You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) [create trigger hosts_name_upper_insert
    before insert on hosts for each row
    set new.name_upper=upper(new.name)]
    database upgrade failed

    Вылечил просто:
    mysql -u root -p
    SELECT Host,USER,Super_priv FROM mysql.user;
    И обновил на привилегии пользоватля:
    UPDATE mysql.user SET Super_Priv='Y' WHERE USER='zabbix' AND host='localhost';

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar