Zabbix – aktualizace na poslední verzi 6.4

Tentokrát si ukážeme jak zaktualizovat Zabbix na nejnovější verzi 6.4, a to včetně upgrade PHP a PostgreSQL!

Přípravné kroky

  • Přečtěte si „poznámky k vydané verzi“ (release notes) [ Official release notes for Zabbix 6.4 ]
  • Přečtěte si důkladně dokument „poznámky k aktualizaci“ (upgrade notes) [ Official upgrade notes for Zabbix 6.4 ]
  • Zkontrolujte a případně optimalizujte výkon současné databáze dle doporučení vendora a s ohledem na požadavky Zabbix instance
  • Zkontrolujte, zda verze veškerých komponent odpovídají matici kompatiblity nové verze Zabbix
  • Zazálohovat konfigurační soubory Zabbix serveru a Zabbix proxy
  • Zázálohovat databáze Zabbix serveru, případně Zabbix proxy
  • Zazálohovat veškeré možné úpravy „na míru“, které byly na úrovni Zabbix ručně provedeny

Kontrola verzí

Nejprve zkontrolujeme verze všech komponent, na kterých je běh Zabbixu a jeho součástí závislý tak, aby přesně odpovídal oficiální matici kompatibility pro Zabbix 6.4.

php-fpm -v
postgres -V

Záloha konfiguračních souborů Zabbix

Než se pustíme do dalších kroků, si pro jistotu zazálohujeme i veškeré konfigurační soubory Zabbix serveru a Zabbix Proxy, případně zvažte také zálohu konfiguračních souborů web serveru.

cp /etc/zabbix/zabbix_server.conf /<backup directory>/
cp /etc/zabbix/zabbix_agentd.conf /<backup directory>/
cp /usr/share/zabbix/alertscripts/* /<backup directory>/
cp /usr/share/zabbix/externalscripts/* /<backup directory>/
cp -R /usr/share/zabbix/ /<backup directory>/
cp /etc/httpd/conf/httpd.conf /<backup directory>/
cp /etc/httpd/conf.d/zabbix.conf /<backup directory>/
cp /etc/zabbix/web/zabbix.conf.php /<backup directory>/

Zastavení služeb

Nejprve zastavíme Zabbix server, aby do databáze již nic nezapisoval.

systemctl stop zabbix-server

Pokud jako backend Zabbix proxy používáme SQLite, pak zastavíme i jednotlivé Zabbix proxy, jelikož jejich databázi po aktualizaci budeme muset v tomto případě smazat.

systemctl stop zabbix-proxy

V případě, že chceme, aby data a aktivní konfigurace ze Zabbix serveru byla na Zabbix proxy serverech zachována, pak před aktualizací doporučujeme změnit konfiguraci Zabbix proxy a převést je na MySQL nebo PostgreSQL databázi. Tento postup je dopodrobna popsán v oficiální dokumentaci Zabbix.

Po tomto zásahu nebude nutné jednotlivé Zabbix proxy servery po dobu aktualizace Zabbix serveru vypínat a můžeme je nechat sbírat a ukládat data i v době nedostupnosti Zabbix serveru.

Služby jednotlivých Zabbix proxy zastavíme až přímo před aktualizací repozitářů a balíčků zabbix-proxy.

Aktualizace PHP

Nová verze Zabbix 6.4 vyžaduje pro svůj chod i PHP v rozmezí verzí 7.4.0 až 8.2.x (Zabbix od verze 6.2.8 podporuje PHP verze 8.2.x).

Dle našich zkušeností doporučujeme nainstalovat PHP 8.0, ve verzi PHP novější než 7.6 je již podpora pro PCRE2, kterou Zabbix využívá.

Případnou aktualizaci pak jednoduše provedeme změnou nastavení balíčkovacího systému dnf na úrovni OS.

dnf module switch-to php:8.0 -y

Aktualizace databáze

Nejprve zastavíme aktuálně běžící službu PostgreSQL.

systemctl stop postgresql-11

Následně nainstalujeme konkrétně podporovanou verzi, v našem případě PostgreSQL verze 15:

dnf install -y postgresql15-server

Nyní můžeme přistoupit k inicializaci databáze nové verze PostgreSQL:

/usr/pgsql-15/bin/postgresql-15-setup initdb

Po úspěšné instalaci všech závislostí spustíme dodaný aktualizační skript, který kvůli kompatibilitě zkontroluje a případně i opraví interní tabulky a schémata oproti změnám mezi verzemi (pod uživatelem postgres):

su - postgres
/usr/pgsql-15/bin/pg_upgrade -b /usr/pgsql-11/bin -B /usr/pgsql-15/bin -d /var/lib/pgsql/11/data -D /var/lib/pgsql/15/data -k

Přeneseme konfiguraci oprávnění (pg_hba.conf) ze staré verze na novou:

cat /var/lib/pgsql/11/data/pg_hba.conf > /var/lib/pgsql/15/data/pg_hba.conf

Případně pak i konfiguraci samotného databázového serveru (kompatibilitu jednotlivých konfiguračních direktiv mezi verzemi si předem ověřte):

cat /var/lib/pgsql/11/data/postgresql.conf > /var/lib/pgsql/15/data/postgresql.conf

Nyní lze zakázat automatické spouštění staré služby po startu, a to příkazem:

systemctl disable postgresql-11.service

A nastartovat novou verzi databázového serveru PostgreSQL, včetně jejího automatického spouštění po startu systému.

systemctl enable postgresql-15.service --now

Po úspěšném spuštění Zabbix serveru doporučujeme provést VACUUM a reindexaci databází, toto provedeme následujícími příkazy:

su - postgres
/usr/pgsql-15/bin/vacuumdb --all --analyze-in-stages
reindexdb

Dalším krokem je smazání starého PostgreSQL clusteru.

./delete_old_cluster.sh
rm -rf 11 delete_old_cluster.sh

Nyní můžeme odebrat staré verze balíčků.

dnf remove postgresql11-*

A v posledním kroku již lze smazat složku obsahující konfigurační soubory staré verze:

rm -rf /usr/pgsql-11/

Aktualizace Zabbix

Vše jsme úspěšně zazálohovali a zaktualizovali všechny verze návazných komponent dle oficiální matice kompatibility nové verze Zabbixu.

Nyní přejdeme k aktualizaci samotného Zabbixu a všech jeho součástí.

Nejprve si stáhneme instalační balíčky pro repozitáře nové verze Zabbixu a smažeme instalační cache.

rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8.noarch.rpm
dnf clean all

Po tomto úkonu máme dostupné repozitáře nové verze a můžeme tedy zaktualizovat veškeré další komponenty Zabbix, a to postupně i na všech Zabbix Proxy:

dnf upgrade zabbix* -y

Ve verzi Zabbix 6.4 je nyní konfigurační soubor pro web server Apache oddělen z balíčků zabbix-web-service a existuje nyní jako balíček samostatný, s názvem zabbix-apache-conf.

V případě použití Apache jako web serveru pro provozování front-endu tedy tento nově-vzniknuvší balíček nainstalujeme.

Zároveň je nezbytné zaktualizovat i balíček pro zabbix-web-service na nejnovější verzi 6.4, které následně povolíme automatický start po spuštění systému.

dnf install zabbix-web-service zabbix-apache-conf -y
systemctl enable zabbix-web-service

Otevřeme konfigurační soubor Zabbix serveru, upravíme v něm následující řádky tak, jak vidíte níže.

Soubor následně uložíme a můžeme zavřít.

nano /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1
DBPassword=<heslo_do_databáze>
StartReportWriters=1
WebServiceURL=http://localhost:10053/report

Po úspěšném dokončení aktualizace Zabbix serveru a všech jeho součástí můžeme službu znovu spustit:

systemctl start zabbix-server

Pokud jako backend pro Zabbix proxy používáme databázi SQLite, pak nejprve obsah současné databáze smažeme následujícím příkazem:

rm /tmp/zabbix_proxy.db

V opačném případě lze po úspěšném dokončení aktualizace Zabbix proxy opětovně spustit i tuto službu:

systemctl start zabbix-proxy

Postupné činnosti i celý proces aktualizace, včetně případných zásahů do struktury databázového schématu lze sledovat v log souboru Zabbix serveru:

tail -f /var/log/zabbix/zabbix_server.log

Případně pro jednotlivé Zabbix proxy pak zase v souboru:

tail -f /var/log/zabbix/zabbix_proxy.log

Aktualizace databáze pro float64 a primární klíče

Od major verze Zabbix 6.0 jsou v rámci značného navýšení databázového výkonu použity pro tabulky primární klíče. Toto má zároveň příznivý vliv i na funkcionalitu HA.

V případě použití režimu HA (například Patroni) se v distribuovaném úložišti zrcadlí hodnoty key-value. Na základě informací existujících v tomto úložišti se všechny instance clusteru dohodnou například na tom, která replika se má zpropagovat jako aktuálně produkční, pokud primární instance selže. Toto napomáhá celé funkční logice clusteru v následném určení konsenzu toho, který „node“ je v danou dobu kritický tak, aby byla možnost vyhnout se případnému „split-brain“ scénáři.

Na následujícím odkazu z oficiální dokumentace se dozvíte více: https://www.zabbix.com/documentation/6.4/en/manual/appendix/install/db_primary_keys.

Pro tento úkon nejprve zastavíme Zabbix server.

systemctl stop zabbix-server

Následně nainstalujeme nový balíček obsahující databázové skripty pro Zabbix, který obsahuje i tutu samotnou aktualizaci.

dnf install zabbix-sql-scripts

Nyní do databáze aplikujeme SQL patch-e určené k přípravě právě pro tuto aktualizaci, které nám jednotlivé tabulky přejmenují.

Pozor! Ve starších verzích Zabbix je tato cesta jiná, a to /usr/share/doc/zabbix-sql-scripts/ !

cat /usr/share/zabbix-sql-scripts/postgresql/double.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql | sudo -u zabbix psql zabbix

Na úrovni databáze pak spustíme následující SQL skript, který nám exportuje současné tabulky s historickými daty a vloží tato data do tabulek nových.

INSERT INTO history SELECT * FROM history_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_uint SELECT * FROM history_uint_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_str SELECT * FROM history_str_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_log SELECT * FROM history_log_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_text SELECT * FROM history_text_old ON CONFLICT (itemid,clock,ns) DO NOTHING;

Tímto jsme dokončili přípravy pro aktualizaci databázového schématu a opětovně nastartujeme Zabbix server, který při svém spuštění provede samotné změny v databázi.

systemctl start zabbix-server

Po dokončení aktualizace, změně schématu a úspěšném nastartování Zabbix serveru lze ze Zabbix databáze smazat přípravné tabulky vytvořené skriptem výše.

To provedeme následovně:

sudo -u zabbix psql zabbix

DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;

Instalace TimescaleDB (volitelné)

Následující kroky nás provedou instalací PostgreSQL doplňku TimescaleDB.

Tyto činnosti jsou zcela volitelné, avšak mohou rapidně zvýšit výkon celého Zabbix monitoringu.

Předtím, než započne samotná instalace zastavíme Zabbix server tak, aby do databáze již nic nezapisoval:

systemctl stop zabbix-server.service

Nyní nainstalujeme oficiální repozitáře TimescaleDB dle dokumentace na tomto odkazu: https://docs.timescale.com/install/latest/self-hosted/installation-linux/.

Po úspěšné instalaci repozitářů lze přikročit k samotné instalaci doplňku TimescaleDB:

dnf install timescaledb-2-postgresql-15

Následně pak překročíme k nastavení optimálních parametrů pro běh PostgreSQL s TimescaleDB za pomoci příkazu timescaledb-tune.

Jako parametry tohoto příkazu zvolíme cestu ke konfiguračnímu souboru PostgreSQL a zároveň zvýšíme omezení na maximální počet příchozích spojení do databáze, který je implicitně pro potřeby monitoringu příliš nízký.

timescaledb-tune --pg-config=/usr/pgsql-15/bin/pg_config --max-conns=100

Pro aplikaci nově nastavených konfiguračních parametrů zrestartujeme službu PostgreSQL:

systemctl restart postgresql-15.service

Následně musíme TimescaleDB vytvořit, to provedeme pomocí tohoto příkazu:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Pak stačí již jen spustit oficiální SQL skripty přímo dodané Zabbixem, které nám předpřipraví potřebné tabulky a schémata.

Pozor! Ve starších verzích Zabbix je tato cesta jiná, a to /usr/share/doc/zabbix-sql-scripts/ !

cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

Jako poslední krok je opětovné spuštění služby Zabbix serveru:

systemctl start zabbix-server.service

Poznámka: V případě, že se po opětovném spuštění Zabbix serveru objeví chyba ohledně kombatibility databáze, pak stačí v konfiguračním souboru Zabbix serveru upravit následující direktivu.

V této verzi Zabbix toto není chyba kompatibility, ale pouze chybějící číslo TimescaleDB v samotném zdrojovém kódu Zabbixu!

Odpovídající verze databáze pak vždy hledejte v matici kompatibility v oficiální dokumentaci Zabbixu pro vaši konkrétní verzi.

AllowUnsupportedDBVersions=1

A nakonec restartujeme službu Zabbix serveru.

systemctl restart zabbix-server.service

Dokončovací práce

  • Zkontrolujte, že správně běží Zabbix server, databázový server a mají správnou verzi
  • Zkontrolujte, že běží všechny Zabbix proxy a mají správnou verzi
  • Zkontrolujte výkon Zabbix serveru a Zabbix proxy (log soubory, nepodporované položky, fronty, monitorovací skripty, atd.).
  • Zkontrolujte, zda vaše servery mají přiděleny poslední verze oficiálních šablon od Zabbixu. [ Zabbix GIT ]

Konfigurace Zabbixu pro reporting

Pro potřeby funkcí reportingu nejprve nainstalujeme Google Chrome.

Nejprve stáhneme instalační balíček, který následně také nainstalujeme:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
dnf localinstall google-chrome-stable_current_x86_64.rpm

V konfiguraci Zabbix frontendu pak upravíme parametr „Frontend URL“ na aktuálně platnou hodnotu, toto nastavení se nachází v následující cestě v menu:

Administration -> General -> Other

Příklad nastavení můžete vidět na obrázku níže.

Konfigurace reportingu Zabbix 6.4

A to je vše! Nyní můžete začít využívat váš nově zaktualizovaný Zabbix ve verzi 6.4 se všemi jeho opravami i novinkami.