Instalación de Zabbix 2.2 en Raspberry Pi

Hola de nuevo, vamos a hacer una pequeña parada antes de terminar nuestras migraciones a KVM. Como os comenté en mi anterior post, yo utilizo zabbix para monitorizar mis servidores y los de la empresa para la que trabajo. Si tenéis montado un sistema de este tipo podréis comparar fácilmente si al migrar de tipo de virtualización vuestros servidores obtienen un mejor rendimiento.

Por todo lo anterior, hoy vamos a ver cómo instalar nuestro querido monitor de sistemas en una simple Raspberry Pi2. Digo simple, pero en realidad es un bichito bastante potente, a mí me ha sorprendido gratamente. Ahora mismo estoy testeando sólo tres servidores, la propia Raspberry Pi2, el otro servidor ARM que tengo en casa y por supuesto el servidor que aloja este blog.

Con un servidor PostgreSQL 9.4, el apache y el php necesarios para que zabbix muestre el panel de control, así como el proceso que recoge los datos de estos servidores, yo diría que la cosa está bastante bien. Cuando vayamos escalando el sistema veremos cómo se comporta, pero tengo confianza en ella.

Estas instrucciones de instalación nos servirán para montar un servidor zabbix en cualquier máquina configurada con una distribución basada en Debian sin mayores complicaciones. Para empezar lo primero que debemos hacer es instalar el servidor, es una perogrullada, sí, pero no tengo otra forma de decirlo:

# apt-get install zabbix-server-pgsql zabbix-frontend-php php5-pgsql ntp

Los nombres de los paquetes son autoexplicativos, el que os puede llamar la atención es el tercero de ellos, pero la razón es bastante simple. Debemos asegurarnos que los relojes de todos los servidores que vayamos a monitorizar estén sincronizados y de ahí la necesidad del servidor de sincronización horaria.

Dependiendo de la distribución que estéis utilizando estos paquetes instalarán unas versiones u otras, además tendrán las dependencias elegidas por cada mantenedor. En principio lo normal es que se instale también el apache, el php, el postgresql y alguna cosilla más. Os diré que también es posible utilizar el paquete zabbix-server-mysql, pero ya sabéis de mis preferencias.

He observado que el paquete para la versión 2.4 de zabbix ya ha entrado en la distribución sid de debian por lo que no creo que fuera muy complicado instalarla en la Raspberry Pi2 aunque fuese compilando los paquetes en la propia pi, pero lo dejaremos para más adelante, cuando tenga un día tonto. Ya me compilé todos los paquetes necesarios para actualizar mi owncloud a la última versión en una ubuntu 12.04.5, el apache 2.4, la última versión de php y algún paquete más y fue muy entretenido.

Volvemos a lo nuestro, una vez terminado el proceso automático de instalación de paquetes podemos pasar a crear nuestra base de datos de zabbix:

# su - postgres
$ createdb zabbix
$ createuser -SDRP zabbix
Enter password for new role: *****  
Enter it again: *****  

Recordad que la contraseña debéis utilizarla después durante la fase de configuración de zabbix por lo que no deberéis perderla. Ahora debemos cambiar el archivo que controla los accesos a la base de datos, /etc/postgresql/9.4/main/pg_hba.conf, y dejarlo como sigue:

[...]
# Database administrative login by Unix domain socket
local   all             postgres                                trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust  
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust  
# IPv6 local connections:
host    all             all             ::1/128                 trust  
[...]

Simplemente hemos cambiado el tipo de acceso a trust ya que tradicionalmente siempre he tenido problemas con el método por defecto, os confesaré que no sé si todavía hace falta hacer este cambio. Para que el cambio surta efecto debemos reiniciar el servicio:

# systemctl restart postgresql.service

Cómo habéis podido observar hemos dejado atrás el siempre fiable service para pasarnos de lleno a systemd, no entraré en polémicas aquí, es el sistema de arranque que utiliza debian actualmente y es el que usaré yo de ahora en adelante siempre que la distribución me lo permita.

Una vez hecho todo esto ya podemos generar los esquemas iniciales que necesitará zabbix para su puesta en marcha:

# su - postgres
$ zcat /usr/share/zabbix-server-pgsql/schema.sql.gz | psql -h localhost zabbix zabbix
Password for user zabbix: *****  
[...]
$ zcat /usr/share/zabbix-server-pgsql/images.sql.gz | psql -h localhost zabbix zabbix
Password for user zabbix: *****  
[...]
$ zcat /usr/share/zabbix-server-pgsql/data.sql.gz | psql -h localhost zabbix zabbix
Password for user zabbix: *****  
[...]

Ahora ya podemos lanzar tranquilamente nuestro servidor, pero antes lo activaremos en el arranque. Para ello editamos el archivo /etc/default/zabbix-server y cambiamos la variable START a yes:

START=yes  

Ahora sí:

# service zabbix-server start

Resulta que este servicio todavía no se ha actualizado a systemd por lo que usaremos el antiguo método de arranque. Ya tenemos el servicio corriendo, el problema es que la interfaz web es independiente por eso nuestro siguiente paso es configurarla. Lo primero es activarla en apache:

# ln -s /usr/share/doc/zabbix-frontend-php/examples/apache.conf /etc/apache2/conf-available/zabbix.conf
# a2enconf 
Your choices are: charset localized-error-pages other-vhosts-access-log security serve-cgi-bin zabbix  
Which conf(s) do you want to enable (wildcards ok)?  
 zabbix
Enabling conf zabbix.  
To activate the new configuration, you need to run:  
 service apache2 reload

Ahora modificaremos algunos parámetros de php para que el frontend de zabbix funcione correctamente. Editamos el archivo /etc/php5/apache2/php.ini y cambiamos los siguientes parámetros:

post_max_size = 16M  
max_execution_time = 300  
max_input_time = 300  
date.timezone = "Europe/Madrid"  (see http://www.php.net/manual/en/timezones.php)  

Ya podremos activar las nuevas configuraciones en apache:

# systemctl reload apache2.service

Si lo anterior ha funcionado nos podremos dirigir a la siguiente dirección para acceder a la pantalla de configuración del frontend de zabbix:

http://<ip_servidor_zabbix>/zabbix  

Ante nuestros ojos aparecerá un cómodo asistente que nos guiará paso a paso para terminar la configuración. El primer y segundo paso deben ser correctos por la configuración anterior que hemos hecho, son sólo comprobaciones. En el tercero nos aparecerá la pantalla para configurar el acceso a la base de datos, en nuestro caso éstos deben ser los valores:

Database type   PostgreSQL  
Database host   localhost  
Database port   0  
Database name   zabbix  
User            zabbix  
Password        <contraseña>  

La herramienta nos permite testear la conexión, con estos datos nos debe dar el OK. El último paso fallará porque no puede crear un archivo de configuración en el directorio /etc/zabbix, lógico ya que este directorio no está dentro de los dominios de apache, por lo que no tiene permisos para crearlo. Lo único que tendremos que hacer es descargarlo y copiarlo al lugar correcto, la misma pantalla nos lo indicará. Una vez copiado en su lugar, pinchando en 'Retry' podremos terminar el proceso de instalación.

El usuario inicial es Admin con la contraseña zabbix, lo primero que podemos hacer es entrar y cambiar el password de acceso e incluso el usuario, si no nos gusta la letra mayúscula.

Primer acceso a Zabbix

Aquí debo comentaros una cosa sobre el idioma. En la empresa en la que trabajo la costumbre es instalar todas las cosas por defecto en inglés por lo que no me preocupé por el idioma en esta instalación. Investigando por ahí he visto que para esta versión de zabbix los idiomas que no están completamente traducidos no podemos elegirlos directamente en la interfaz. Editando el fichero /usr/share/zabbix/include/locales.inc.php y cambiando la siguiente línea por su valor true:

  'es_ES' => array('name' => _('Spanish (es_ES)'),        'display' => true),

ya podremos elegirlo, una vez reiniciado el apache.

No sé si con una instalación directamente en español de la Raspberry Pi nos aparecerá, intuyo que no, de todas formas para asegurarnos que tenemos las locales correctas podemos ejecutar el siguiente comando:

# apt-get install task-spanish

y reconfigurando las locales asegurándonos de elegir el español por defecto:

# dpkg-reconfigure locales

En las siguientes capturas puede ser que algunas palabras aparezcan en inglés, es normal ya que, como he dicho más arriba, la traducción no está completa. Suponiendo que la interfaz nos aparece en inglés directamente, una vez dentro de ella nos dirigimos a 'Administration -> Users' para seleccionar el español para nuestro usuario.

Dentro de esta pantalla podremos ver los diferentes grupos de usuarios que se crean por defecto. El esquema del panel de control de zabbix y de todos sus formularios es similar, las listas en el centro de las mismas y a la derecha, dependiendo de la pantalla, unos desplegables que nos permiten cambiar la vista de éstas así como botones para crear elementos nuevos.

Administración de usuarios Seleccionaremos el usuario 'Admin' para cambiar los datos que precisemos. Como habéis comprobado en la captura yo ya tengo cambiado el usuario, además tengo añadido un usuario explícito para el español ya que si no, las capturas iban a ser un lío. En la siguiente pantalla podéis ver las diferentes opciones que se pueden cambiar para cada usuario, es todo bastante intuitivo.

Configuración de usuario

Como podéis ver en el idioma tenemos un aviso que no tiene que ver explícitamente con la configuración de español, más bien con el resto de idiomas pero no os preocupéis, con el truco que hicimos antes el único problema será que no aparecerán algunas frases traducidas. La pestaña Medio nos sirve para activar el canal para enviar las notificaciones referentes a este usuario, pero ése será otro tema a tratar en profundidad próximamente. Ahora mismo nos interesa la pestaña Permisos en la que podremos configurar lo que nuestro usuario puede o no puede hacer. En la captura siguiente podremos ver todos los permisos activados ya que de momento nuestro usuario tiene el rol de Super Administrador, si en el futuro necesitáis añadir más usuarios podréis juguetear con todos estos permisos que os darán bastante juego.

Permisos de usuarios

En principio todos estos permisos se manejan desde la configuración de grupos pero eso exigiría una explicación más amplia. Por ahora vamos a aprender cómo añadir un primer servidor para monitorizar y a partir de ahí ya tendréis todas las herramientas para empezar a administrar vuestra red de servidores. La primera máquina que vamos a añadir, cómo no, es el propio servidor de zabbix. Este servidor tiene un template especial pero el mecanismo para añadir más máquinas es similar. Lo primero que debemos hacer es instalar el agente de zabbix en el propio servidor, para ello accedemos a él vía ssh y ejecutamos la siguiente orden:

# apt-get install zabbix-agent

Una vez terminado el proceso debemos cambiar la configuración del agente para que apunte a nuestro servidor. En este caso nos valdría con la configuración por defecto, ya que apunta a localhost, pero para que lo podáis utlizar en algún servidor más vamos a explicar los parámetros que hay que cambiar en el archivo /etc/zabbix/zabbix_agentd.conf:

[...]
Server=127.0.0.1  
[...]
ServerActive=127.0.0.1  
[...]
Hostname=Zabbix server  
[...]

Si esta misma operación la queréis realizar para cualquier otro host os recuerdo que debéis cambiar estos dos primeros parámetros para que apunten al servidor de zabbix y el tercero para que tenga un nombre distintivo y único que pueda ser distinguido del resto de agentes desplegados. El segundo parámetro se refiere al control que ejerce el servidor sobre el agente, hay ciertos tipos de templates que exigen que el servidor ordene ciertas acciones al agente, en configuraciones más complejas, como las que requieren proxies intermedios estas acciones no son posibles ya que no hay una visión directa del servidor sobre el agente pero por ahora todos los templates activos nos sirven y lo configuraremos con este parámetro apuntando directamente al servidor.

Reiniciamos el agente y ya podemos pasar al panel de control para configurar el último paso para este primer servidor:

# systemctl restart zabbix-agent

Ahora si os dirigís al apartado 'Configuración -> Equipos' podréis acceder a la configuración del agente y seleccionando 'Zabbix Server' veréis el siguiente formulario:
Este formulario os servirá tanto para configurar el agente del propio servidor como para cualquier otro host que queráis añadir para su monitorización. El Host name debe coincidir con el nombre que consignéis en la configuración del agente. Luego están los grupos a los que queréis que pertenezca vuestra máquina nueva y lo realmente importante, las interfaces del agente. En mi caso siempre tiro de dirección ip. Al principio de la implantación en Mirai probamos con el nombre dns, pero el rendimiento del servidor de zabbix se resentía, intuimos que por la resolución de nombres, así que optamos por simplificarlo y utilizar sólo la ip. De hecho nuestros servidores del datacenter están conectados a nuestro servidor de la oficina mediante una vpn exclusiva que nos da más libertad a la hora de implementar nuevos items de monitorización. Os lo aconsejo y de hecho en algún post futuro explicaremos cómo configurar fácilmente una vpn mediante Softether, una herramienta muy potente.

Otra pestaña a tener en cuenta es la referente a las plantillas:
En esta pantalla podréis asignar las plantillas que queráis a vuestros futuros servidores monitorizados. Éstas son las que definen los monitores e iniciadores que conformarán los datos relacionados con nuestras máquinas. Por ahora podéis experimentar un poco con los templates por defecto, en otro post añadiremos plantillas nuevas y refinaremos un poco las existentes para que veáis todo el jugo que se le puede sacar a zabbix. En el caso que nos ocupa habréis podido observar cómo tenemos dos asociadas a nuestro servidor de zabbix: App Zabbix Server y OS Linux.

Estas plantillas también tienen definidas unos cuantos gráficos que realmente nos darán una vista de lo que sucede en estas máquinas monitorizadas. Como ejemplo os muestro el gráfico de uso de CPU del propio servidor para que os hagáis una idea de los que nos puede brindar esta potente pieza de software:
Como véis la cpu de la raspberry pi 2 apenas sufre, aunque hay que tener en cuenta que sólo está monitorizando tres máquinas y con las plantillas por defecto. También habréis observado cómo se puede seleccionar el periodo de tiempo que se quiere visualizar mediante la barra superior de tiempos. También podréis seleccionar cualquier otro gráfico que esté definido en las plantillas mediante los desplegables situados en la esquina superior derecha del formulario, tendréis uso de memoria, tráfico de red y algunas métricas más muy interesantes.

Creo que con este primer acercamiento tendréis suficiente información para poder empezar a juguetear con zabbix y tener controlado perfectamente vuestro parque de servidores. Ya entraremos en más profundidad con los disparadores y los avisos que podemos configurar para poder reaccionar rápidamnetne a cualquier fallo en nuestra infraestructura.

Os aconsejo que si váis a experimentar con KVM y tenéis alguna máquina corriendo con VirtualBox instaléis un agente de zabbix en ella y realicéis algunas tareas que consuman CPU en serio, las apuntáis y cuando expliquemos cómo migrar máquinas de un sistema a otro realicéis las mismas tareas para comparar los resultados con los gráficos de zabbix. Si con los resultados en la mano no os decidís a cambiar me lo comentáis en los siguientes posts.

Y ahora para despedirnos os aconsejaré una canción que Sting escribió para el disco Synchronicity, de The Police, del año 1983, aunque os recomiendo la versión que rescató el propio Sting, ya en solitario, en el disco homónimo Bring On The Night, un directo grabado durante sus actuaciones del año 1985 que convirtió en disco en el año 1986. También muy recomendable el documental que originó su grabación, sólo por la envidia de ver a Sting con sus músicos ensayando en un castillo de Versalles alquilado para la ocasión.

Suerte.