Zabbix – aktualizace na poslední verzi 6.2

V tomto článku si ukážeme, jak zaktualizovat Zabbix na poslední verzi 6.2 a začít naplno využívat všechna vylepšení a technické novinky, které přináší.

Přípravné kroky

  • Přečtěte si „poznámky k vydané verzi“ (release notes) [ Official release notes for Zabbix 6.2 ]
  • Přečtěte si důkladně dokument „poznámky k aktualizaci“ (upgrade notes) [ Official upgrade notes for Zabbix 6.2 ]
  • 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 je nutné zkontrolovat 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.2.

php-fpm -v
mysql -V

Záloha konfiguračních souborů Zabbix

Než se pustíme do dalších kroků, je vždy velice důležité si pro jistotu zazálohovat 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 v tomto případě muset 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 bude třeba zastavit až přímo před aktualizací repozitářů a balíčků zabbix-proxy.

Záloha databáze

Následně spustíme zálohu databáze (následující příklady se týkají MySQL).

V případě, že je databáze malá (do desítek GB) a nepoužíváme partitioning, pak záloha nebude trvat tak dlouho.

Provedeme tedy zálohu celé databáze Zabbix:

screen -S backup
mysqldump -uroot -p zabbix --extended-insert --single-transaction | bzip2 -9 > /<backup directory>/zabbix_db_backup-$(date "+%Y-%m-%d_%H.%M.%S").sql.bz2

Pokud je databáze větší anebo používáte partitioning, pak nejprve z databáze zazálohujeme pouze konfigurační tabulky:

mysqldump –uroot -p zabbix --ignore-table=zabbix.history \
--ignore-table=zabbix.history_uint --ignore-table=zabbix.history_str \
--ignore-table=zabbix.history_log --ignore-table=zabbix.history_text \
--ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint > zabbix_config_dump-$(date "+%Y-%m-%d_%H.%M.%S")sql

A následně až zazálohujeme zbytek databázových dat, a to s pomocí innobackupex, který zálohuje i transakční logy a umožňuje tak dělat inkrementální zálohy:

screen -S backup
innobackupex -p<password> /<backup_directory>/
innobackupex -p<password> --apply-log --use-memory=4G /<backup_directory>/`date`/

Pro značné urychlení procesu aktualizace je také možné smazat veškeré předchozí události (events), v případě MySQL např. takto:

mysql -uroot -p zabbix
mysql> DELETE from events where source > 0 limit 10000;

Aktualizace PHP

Nová verze Zabbix 6.2 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 smažeme aktuální verzi MariaDB

dnf remove mariadb-*

Následně stáhneme pomocný skript pro instalaci konkrétní verze MariaDB repozitářů:

cd /tmp
curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup

Tento skript pak spustíme s parametrem --mariadb-server-version, ve kterém definujeme konkrétní, Zabbixem podporovanou verzi MariaDB.

V případě Zabbix 6.2 je to verze MariaDB 10.7:

bash mariadb_repo_setup --mariadb-server-version=10.7

Nyní je nutné zresetovat module stream balíčkovacího systému dnf tak, aby si uvědomil změnu ve zdroji instalovaných balíků pro daný software (v našem případě pro MariaDB):

dnf -y module reset mariadb

Posléze již přistoupíme k samotné instalaci spávné verze MariaDB, službu spustíme a nastavíme její automatické spouštění po startu.

dnf install MariaDB-server MariaDB-client MariaDB-backup -y
systemctl enable mysqld.service --now

Po úspěšné aktualizaci balíčků MariaDB 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:

mysql_upgrade

Nyní už jen zkontrolujeme aktuální verzi MariaDB.

mysql -V

Aktualizace Zabbix

Potom, co jsme vše úspěšně zazálohovali a zaktualizovali všechny verze návazných komponent dle oficiální matice kompatibility nové verze Zabbixu, 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.2/rhel/8/x86_64/zabbix-release-6.2-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

Následně nainstalujeme balíček zabbix-web-service ve verzi pro Zabbix 6.2 a nastavíme jí automatické spouštění po startu:

dnf install zabbix-web-service -y
systemctl enable zabbix-web-service --now

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

nano /etc/zabbix/zabbix_server.conf
StartReportWriters=1
WebServiceURL=http://localhost:10053/report

Nyní můžeme zaktualizovat veškeré další komponenty, a to postupně i na všech Zabbix Proxy:

dnf upgrade zabbix*

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 je jako backend pro Zabbix proxy použita databáze 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 úprav 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 zase v souboru:

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

Aktualizace databáze pro 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.

Na následujícím odkazu z oficiální dokumentace se dozvíte více: https://www.zabbix.com/documentation/6.2/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 určený k přípravě právě pro tuto aktualizaci, který nám jednotlivé tabulky přejmenuje.

Pozor! V novějších verzích Zabbix je tato cesta jiná, a to /usr/share/zabbix-sql-scripts/ !

mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-sql-scripts/mysql/history_pk_prepare.sql

Databázovému serveru nastavíme napevno fyzickou cestu, kde se nachází databázová data.

Nejprve se k serveru připojíme pomocí příkazu mysql a v této konzoli následně zjistíme, co má server v této proměnné nastaveno:

SELECT @@secure_file_priv;

Pokud je výsledná hodnota prázdná (jako na příkladu výše), pak odejdeme z konzole mysql a provedeme potřebné úpravy na úrovni OS.

V případě, že cesta neexistuje, pak ji nejprve musíme vytvořit a nastavit korektní oprávnění:

mkdir /var/lib/mysql-files/
chown mysql:mysql /var/lib/mysql-files/

Následně otevřeme konfigurační soubor databázového serveru:

nano /etc/my.cnf.d/server.cnf

A upravíme hodnotu této konfigurační direktivy na požadovanou cestu (níže je příklad implicitní hodnoty).

secure_file_priv = "/var/lib/mysql-files/"

Soubor uložíme a zrestartujeme službu databázového serveru.

systemctl restart mysql

Nyní si můžeme ověřit to, že databázový server novou cestu skutečně bere v potaz. Opět se připojíme k databázové konzoli příkazem mysql a spustíme následující dotaz.

SELECT @@secure_file_priv;

Po těchto úkonech můžeme překročit k samotné aplikaci aktualizačního patche databázového schématu.

Opět se připojíme k DB serveru pomocí příkazu mysql a nastavíme nezbytnou proměnnou max_statement_time na nekonečno (nula) a pro další činnosti vybereme databázi ‚zabbix‘.

mysql
mysql> SET @@max_statement_time=0;
mysql> use zabbix;

Zde pak spustíme níže zmíněný SQL skript, který nám připraví tabulky pro následnou změnu schématu.

SELECT * INTO OUTFILE '/var/lib/mysql-files/history.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_old;
LOAD DATA INFILE '/var/lib/mysql-files/history.csv' IGNORE INTO TABLE history FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_uint_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_uint.csv' IGNORE INTO TABLE history_uint FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_str_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_str.csv' IGNORE INTO TABLE history_str FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_log_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_log.csv' IGNORE INTO TABLE history_log FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

SELECT * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_text_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_text.csv' IGNORE INTO TABLE history_text FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';

Tímto je příprava pro aktualizaci databázového schématu ukončena a můžeme opětovně nastartovat Zabbix server, který při svém spuštění samotné změny v databázi provede.

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ě:

mysql
use 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;

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 je 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 je 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.

Aktualizace - Konfigurace reportingu Zabbix 6.2

A to je vše! Nyní můžete začít využívat váš nově zaktualizovaný Zabbix ve verzi 6.2 se všemi jeho novými opravami a technologickými vylepšeními.