En este tutorial vamos a explicar como actualizar Zabbix en versiones antiguas de la rama 4.x hacia la rama actual 5.x. Son unos sencillos pasos que hay que seguir uno a uno.

Este tutorial tendremos en cuenta que esta sobre Apache y MySQL, por lo que si tenéis Nginx o PostgreSQL deberéis de cambiar mysql por pgsql.

Parar Zabbix

El primer paso es parar Zabbix para proceder a la actualización y evitar así problemas.

systemctl stop zabbix-server

Hacer copia de seguridad de Zabbix

Dependiendo de donde tengamos el servidor, podemos proceder a crear un snapshot del servidor para volver a un estado anterior en caso de que la instalación no funcione correctamente. Si no tenéis esta posibilidad entonces deberéis de hacer una copia de los datos de forma manual. Al ser un proceso largo, os lo dejo un poco resumido:

# Preparar directorios para el backup
mkdir -p /opt/zabbix_backup/bin_files /opt/zabbix_backup/conf_files /opt/zabbix_backup/doc_files
mkdir -p /opt/zabbix_backup/web_files /opt/zabbix_backup/db_files
# Copiar de los binarios, configuración, documentación, web y ficheros de la base de datos
cp -rp /etc/zabbix/zabbix_server.conf /opt/zabbix_backup/conf_files
cp -rp /usr/sbin/zabbix_server /opt/zabbix_backup/bin_files
cp -rp /usr/share/doc/zabbix-* /opt/zabbix_backup/doc_files
cp -rp /etc/httpd/conf.d/zabbix.conf /opt/zabbix_backup/conf_files 2>/dev/null
cp -rp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix_backup/conf_files 2>/dev/null
cp -rp /etc/zabbix/php-fpm.conf /opt/zabbix_backup/conf_files 2>/dev/null
# Copia del fronted de la web
cp -rp /usr/share/zabbix/ /opt/zabbix_backup/web_files
# Copia de la base de datos:
mysqldump -h localhost -u'root' -p'rootDBpass' --single-transaction 'zabbix' | gzip > /opt/zabbix_backup/db_files/zabbix_backup.sql.gz

Actualizar Zabbix Server y Frontend

Eliminamos primero el repositorio antiguo:

dpkg --purge zabbix-release

Nos descargamos el nuevo repositorio y actualizamos paquetes:

wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
apt update
apt install -y --only-upgrade zabbix-server-mysql zabbix-frontend-php 

Como que usamos Apache, deberemos de instalar el siguiente paquete también:

apt-get install -y zabbix-apache-conf

Iniciar Zabbix y actualizar la base de datos

Tras este punto, ya tenemos actualizado Zabbix. Ahora falta levantar el proceso de nuevo y revisar que la base de datos se actualiza correctamente.

Iniciamos el servicio de Zabbix Server:

systemctl start zabbix-server

La actualización de la base de datos puede durar una hora dependiendo del tamaño de la base de datos, puedes revisar el progreso en el siguiente fichero:

cat /var/log/zabbix/zabbix_server.log | grep database

Esto debería de mostrar lo siguiente:

1794:20200408:200607.700 current database version (mandatory/optional): 04040000/04040002
1794:20200408:200607.700 starting automatic database upgrade
1794:20200408:200607.706 completed 1% of database upgrade
1794:20200408:200608.804 completed 10% of database upgrade
                            .....
1794:20200408:200613.111 completed 98% of database upgrade
1794:20200408:200613.123 completed 100% of database upgrade
1794:20200408:200613.123 database upgrade fully completed
1794:20200408:200613.136 database is not upgraded to use double precision values

La actualización de la base de datos se ha completado con éxito cuando se recibe el mensaje «database upgrade fully completed» en el archivo de registro del servidor Zabbix.

Comprobaciones finales

Tras la última comprobación, ahora finalmente solo queda revisar la versión de Zabbix instalada:

zabbix_server -V
zabbix_server (Zabbix) 5.0.0

[Opcional] Arreglar aviso «database is not upgraded to use double precision values»

Con Zabbix 5.0 el tipo de datos float soporta una precisión de aproximadamente 15 dígitos y un rango mayor. Esto es por defecto para las nuevas instalaciones, pero si estás actualizando entonces hay que aplicar un parche de actualización de base de datos manual.

Los comandos de MySQL deberemos de cambiar los nombres de usuarios, contraseña y nombre de la base de datos de nuestra configuración, esto es un ejemplo:

mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;"

Nos da esta salida:

| history | CREATE TABLE history (
itemid bigint(20) unsigned NOT NULL,
clock int(11) NOT NULL DEFAULT '0',
value double(16,4) NOT NULL DEFAULT '0.0000',
ns int(11) NOT NULL DEFAULT '0',
KEY history_1 (itemid,clock)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |

Descarga el parche y aplícalo:

wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql
mysql -u'zabbix' -p'zabbixDBpass' zabbix < double.sql

Y revisamos que se ha aplicado correctamente:

mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;"

history | CREATE TABLE history (
itemid bigint(20) unsigned NOT NULL,
clock int(11) NOT NULL DEFAULT '0',
value double NOT NULL DEFAULT '0',
ns int(11) NOT NULL DEFAULT '0',
KEY history_1 (itemid,clock)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |

Luego hay que editar el fichero de configuración y añadir lo siguiente al final del fichero:

nano /etc/zabbix/web/zabbix.conf.php

Esto es lo que hay que añadir:

$DB['DOUBLE_IEEE754'] = 'true';

¡Y listo!¡Ya tienes Zabbix actualizado!

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación