Feb 27, 2010

Instalación del servidor Zabbix a partir del código fuente

Zabbix es bajo mi punto de vista, el mejor sistema de monitorización existente en el mundo del software libre. Las mejores introducidas a partir de la versión 1.8 han sido bastante importantes.

A veces vamos a tener la necesidad de instalar Zabbix a partir de su código fuente, debido por ejemplo a que los repositorios de nuestra distribución Linux no dispongan de la última versión, o que por ejemplo, al compilarlo directamente en nuestro sistema queramos ganar en optimización y rendimiento, o habilitar alguna configuración que no venga a través del paquete base.

A continuación voy a mostrar cómo instalar Zabbix a partir de sus ficheros fuente. Para ello voy a utilizar una distribución CentOS 5.4 de 64 bits y una versión 1.8.1 de Zabbix.

Lo primero que vamos a hacer es instalar RPMForge, con el objetivo de agregar repositorios adicionales a las listas que por defecto trae CentOS. También actualizaremos el sistema.

[root@centos ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# yum update -y

A continuación instalaremos los paquetes adicionales que requiere Zabbix, como por ejemplo PHP y el servidor web Apache, y una base de datos, en nuestro caso elegiremos MySQL.

[root@centos ~]# yum install -y gcc mysql-server mysql-devel curl-devel httpd php php-mysql php-bcmath php-gd php-xml php-mbstring net-snmp-devel fping e2fsprogs-devel zlib-devel libgssapi-devel krb5-devel openssl-devel libidn-devel iksemel-devel

Después lanzaremos MySQL y haremos que el servicio de base de datos y Apache se inicien automáticamente al arrancar el sistema operativo. También ejecutaremos la aplicación mysql_secure_installation con el objetivo de establecer el password para el usuario 'root', remover el usuario 'anonymous' y eliminar la base de datos test.

[root@centos ~]# service mysqld start

[root@centos ~]# chkconfig mysqld on ; chkconfig httpd on

[root@centos ~]# mysql_secure_installation

Ahora bajaremos el código fuente de Zabbix y los descomprimiremos. Sólo nos quedará por compilarlo y generar los binarios correspondientes.

[root@centos ~]# wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/1.8.1/zabbix-1.8.1.tar.gz?use_mirror=switch

[root@centos ~]# tar xvzf zabbix-1.8.1.tar.gz ; cd zabbix-1.8.1

[root@centos zabbix-1.8.1]# ./configure --enable-agent --enable-ipv6 --enable-proxy --enable-server --with-mysql --with-libcurl --with-net-snmp --with-jabber

[root@centos zabbix-1.8.1]# make ; make install

El siguiente paso consistirá en crear todos los directorios necesarios para Zabbix, añadir un usuario denominado 'zabbix' al sistema y copiar los archivos de arranque y configuración a sus respectivos directorios.

[root@centos zabbix-1.8.1]# mkdir -p /etc/zabbix/alert.d /etc/zabbix/externalscripts /var/log/zabbix-server /var/log/zabbix-agent /var/run/zabbix-server /var/run/zabbix-agent /usr/local/share/zabbix

[root@centos zabbix-1.8.1]# adduser -r -d /var/run/zabbix-server -s /sbin/nologin zabbix

[root@centos zabbix-1.8.1]# cp -a misc/conf/zabbix_server.conf misc/conf/zabbix_agentd.conf /etc/zabbix

[root@centos zabbix-1.8.1]# cp misc/init.d/redhat/8.0/zabbix_server misc/init.d/redhat/8.0/zabbix_agentd /etc/init.d

[root@centos zabbix-1.8.1]# chown -R zabbix:zabbix /var/run/zabbix* /var/log/zabbix* /etc/zabbix

Una vez depositado cada fichero en su lugar, modificaremos ciertos parámetros que por defecto vienen en dichos archivos.

[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_server.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-server/zabbix_server.log

# Nombre del archivo de PID
PidFile=/var/run/zabbix-server/zabbix_server.pid

# Password de la base de datos
DBPassword=xxxxxx

# Ubicación de los scripts de alerta
AlertScriptsPath=/etc/zabbix/alert.d/

# Ubicación de los scripts externos
ExternalScripts=/etc/zabbix/externalscripts


[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_agentd.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-agent/zabbix_agentd.log

# Habilitar el uso de comandos remotos
EnableRemoteCommands=1

# Número máximo de segundos para el procesamiento
Timeout=10

# Nombre del host (comando hostname)
Hostname=centos.local

# Dirección IP del servidor Zabbix
Server=::ffff:127.0.0.1


[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_server
...
# Orden de arranque y apagado
# chkconfig: - 80 30

# Ubicación del binario
progdir="/usr/local/sbin/"

# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...


[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_agentd
...
# Ubicación del binario
progdir="/usr/local/sbin/"

# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...

También estableceremos permisos de lectura y escritura para el fichero de configuración de Zabbix sólo para el propietario (hemos definido dentro del fichero la clave de administración de bases de datos para el usuario root).

[root@centos zabbix-1.8.1]# chmod 600 /etc/zabbix/zabbix_server.conf

En el fichero /etc/services definiremos los servicios para el agente y servidor de Zabbix.

[root@centos ~]# echo "zabbix-agent    10050/tcp  Zabbix Agent"   >> /etc/services
[root@centos ~]# echo "zabbix-agent 10050/udp Zabbix Agent" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/tcp Zabbix Trapper" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/udp Zabbix Trapper" >> /etc/services

Ahora vamos a configurar la parte web:

[root@centos ~]# cp -ar frontends/php/* /usr/local/share/zabbix

[root@centos ~]# chown -R zabbix:zabbix /usr/local/share/zabbix

[root@centos ~]# echo "Alias /zabbix /usr/local/share/zabbix" > /etc/httpd/conf.d/zabbix.conf

[root@centos ~]# service httpd start

Ahora sólo nos quedará que hacer que los servicios de Zabbix se arranquen automáticamente al iniciar la máquina. Iniciaremos también el agente de Zabbix.

[root@centos ~]# chkconfig zabbix_server on ; chkconfig zabbix_agentd on

[root@centos ~]# chmod +x /etc/init.d/zabbix_server /etc/init.d/zabbix_agentd

[root@centos ~]# service zabbix_agentd start

En este momento abriremos un navegador web y pondremos la siguiente URL: http://192.168.1.10/zabbix (192.168.1.10 es la dirección IP de mi servidor).

Si tenemos activado SELinux, veremos que éste nos impide el acceso. Esto se debe a que los contextos de los archivos PHP no están correctamente establecidos; lo arreglaremos con la siguiente sentencia. A su vez, también activaremos la variable booleana httpd_can_network_connect para permitir que scripts externos se puedan conectar al servidor Apache.

[root@centos ~]# chcon -R -t httpd_sys_content_t /usr/local/share/zabbix

[root@centos ~]# setsebool -P httpd_can_network_connect on

Lo primero que aparecerá será un asistente que comprobará los pre-requisitos de la instalación. Como puede verse en la siguiente imagen, hay varios puntos que no son correctos y que afectan al fichero php.ini.


Modificaremos los valores solicitados:

[root@centos ~]# cat /etc/php.ini
...
# Cantidad máxima de memoria que un script puede consumir
memory_limit = 256M

# Tamaño máximo del archivo que se puede subir al servidor web
post_max_size = 32M

# Tiempo máximo de ejecución para cada script
max_execution_time = 600

# Zona horaria
date.timezone = Europe/Madrid

# Soporte adicional para cadenas multi-byte
mbstring.func_overload = 2


[root@centos ~]# service httpd restart

Una vez establecidos dichos valores, pulsaremos sobre el botón Retry. En la siguiente pantalla de configuración el asistente nos indica que tenemos que crear la base de datos manualmente.


Crearemos una nueva base de datos en MySQL con el nombre 'zabbix', utilizando los esquemas que generamos durante la compilación.

[root@centos ~]# (echo "CREATE DATABASE zabbix;" ; echo "USE zabbix;" ; cat create/schema/mysql.sql ; cat create/data/data.sql ; cat create/data/images_mysql.sql) | mysql -h 127.0.0.1 -u root --password=xxxxxx

Al finalizar el asistente, se grabarán los datos de conexión con la base de datos en el fichero zabbix.conf.php. Debido a que este fichero contendrá la password de la base de datos, le asignaremos permisos de lectura-escritura sólo al propietario. También iniciaremos el servidor de Zabbix.

[root@centos ~]# chmod 600 /usr/local/share/zabbix/conf/zabbix.conf.php

[root@centos ~]# service zabbix_server start

5 comments:

  1. Mil gracias!!! Ahora veremos si puedo utilizar SNMP!

    ReplyDelete
  2. Lleva a cabo todos y cada uno de los pasos aqui mencionados.. pero cuando voy a la direccion web xxx.xxx.xxx/zabbix no me muestra nada.. se queda en blanco.. que puedo hacer?

    ReplyDelete
  3. Mira que no haya ningún firewall que esté cortando las conexiones, desactiva SELinux (o echa un vistazo a sus logs), mira los logs de Apache, intenta abrir la página desde el propio equipo donde está Zabbix (por ejemplo con wget o lynx), etc.

    ReplyDelete
  4. Hola tengo el mismo problema de eldershyq. ya baje el SElinux y tampoco. trato de subir el zabbix server y me da el siguiente error: Iniciando zabbix_server: /usr/local/sbin/zabbix_server: error while loading shared libraries: libnetsnmp.so.25: cannot open shared object file: No such file or directory

    ReplyDelete
  5. Hola,

    con respecto al problema de libnetsnmp.so, asegúrate que tienes bien instalado el paquete net-snmp-devel. Ya de paso, revisa uno por uno que tienes el resto de paquetes correctamente instalados.

    Otra cosa, eldershyq cuando pone la dirección web no le sale nada, y eso no tiene nada que ver con el binario de zabbix. Zabbix_server no se dedica a servir páginas webs, sino a recoger datos y escribirlos en la base de datos.

    Y para que lo entiendas, incluso teniendo el zabbix_server detenido, deberías poder entrar perfectamente al frontal web de Zabbix, ya que la web es servida por Apache.

    Luego si tu caso es que no puedes entrar a la URL de Zabbix, deberías mirar los logs de Apache para ver por qué no es capaz de servirte las páginas PHP que constituyen el frontal web de Zabbix.

    Un saludo,

    ReplyDelete