Monitorizar entorno de máquinas virtuales VMware en Zabbix

De nuevo un entrada dedicada a Zabbix, el Sistema de Monitorización creado por Alexei Vladishev.

En este caso explicaros cómo es posible monitorizar las màquinas virtuales de un entorno VMware sin necesidad de instalar agentes en todas las máquinas. La monitorización la haremos utilizando el vCenter (Virtual Center) de nuestro entorno VMware.

Este “autodiscover” de máquinas virtuales  está disponible a partir de la versión 2.2 de Zabbix y es necesario tener un usuario administrador del entorno VMware y un vCenter.

El “autodiscover” no sólo añadirá las máquinas virtuales a Zabbix, si no que también tendremos disponibles en nuestro Zabbix los servidores ESX  y los clusters de nuestro entorno de virtualización. En nomenclatura Zabbix nos aparecerán tres grupos de monitorización, Discover VMware Cluster, Discover VMware Hypervisors y Discover VMware VMs.

Instalar agente Zabbix en vCenter

El primer paso para hacer el “autodiscover” es tener instalado el agente de Zabbix en nuestro servidor Virtual Center. Una vez instalado ya podemos añadir el vCenter como un nuevo host a monitorizar en Zabbix.

En general la instalación del agente Zabbix és muy senzilla. En este caso mucho más al tratarse de un servidor Windows ya que en el proceso sólo hay que indicarle la IP y puerto del servidor Zabbix.

Añadir Host vCenter en Zabbix

  VirCenter_zabbix

Asignarle la plantilla de Zabbix “Template Virt VMware”

Zabbix_vmware_template

Configurar la Macro de acceso al vCerter vía SDK

En este paso hay que añadir la Url de acceso al SDK de virtual center además de un usuario y password con permisos de administrador.

Zabbix_Macros_vcenter

Revisar las “Discovery Rules”

Revisar que las tres reglas de búsqueda de Máquinas Virtuales, Clusters y Hypervisors están activas y guardar el nuevo Host.

zabbix_discovery_rules

Una vez guardado el nuevo Host vCenter empezará el proceso de “Discovery” en Zabbix y en un tiempo no muy largo, en mi caso no tardó más de 10 minutos, aparecerán en los tres grupos todas las máquinas virtuales, los ESX y los clusters que tengamos en el entorno virtual.

A tener en cuenta que en este caso Zabbix monitoriza lo que el servidor  vCenter le proporciona de las máquinas. En algunos casos puede ser suficiente, pero en otros no te quedará más remedio que añadir las máquinas manualmente previa instalación del agente correspondiente.

Migrando Zabbix de MySQL a PostgreSQL

No hace mucho me vi obligado a migrar a PostgreSQL la base de datos de Zabbix que tenía en MySQL y aunque Zabbix soporta las dos bases de datos la migración no fue sencilla. Cómo seguro que alguien más se puede ver en la situación aquí os dejo una guía de lo que a mí me funcionó.

Zabbix es un Sistema de Monitorización creado por Alexei Vladishev y está diseñado para monitorizar y registrar el estado de varios servicios de red, Servidores, Webs …

La decisión de migrar a PostgreSQL básicamente fue porque  la base de datos de Zabbix creció muy rápidamente y nos empezaba a dar problemas de rendimiento. Debido a que Zabbix era la única aplicación que usaba MySQL en nuestro entorno decidimos pasar a PostgreSQL de la que tenemos más experiencia.

Proceso de Migración

En primer lugar un repaso a las versiones de los sistemas implicados:

  • Linux CentOS 6.4
  • Zabbix 2.2
  • MySQL Percona 5.6
  • PostgreSQL 9.1.3

Para realizar la migración utilicé documentación de Zabbix.org donde explican como hacer un Upgrade de la versión de Zabbix 1.8 a 2.0 para después migrar de MySQL a PostgreSQL. En mi caso no me funcionó del todo el proceso de migración y por eso esta guía:

Exportar base de datos MySQL

En mi caso no me funcionó un dump en SQL si no que tuve que hacer un dump en formato CSV. Tampoco me era necesaria la información de histórico así que prescindí de las siguientes tablas:

    • zabbix.acknowledges
    • zabbix.alerts
    • zabbix.events
    • zabbix.history
    • zabbix.history_log
    • zabbix.history_str
    • zabbix.history_str_sync
    • zabbix.history_sync
    • zabbix.history_text
    • zabbix.history_uint
    • zabbix.history_uint_sync
    • zabbix.proxy_dhistory
    • zabbix.proxy_history
    • zabbix.trends
    • zabbix.trends_uint
    • zabbix.user_history

Export de todas las tablas de Zabbix en CSV.


> mkdir /tmp/zabbix/CSV; chown -R mysql: /var/tmp/zabbix
> for i in `find /var/lib/mysql/zabbix/ -type f | \
 sed 's/\....$//' | sort | uniq | sed 's#/var/lib/mysql/zabbix/##'`; do
 mysqldump -t -T/tmp/zabbix/CSV zabbix $i --fields-terminated-by=';' ;
done

Crear base de datos Zabbix en PostgreSQL

Para crear la base de datos Zabbix en PostgreSQL lo mejor es utilizar el schema.sql para PostgreSQL que viene en la distribución de Zabbix. Para que posteriormente la carga de datos no tenga problemas de restricciones eliminamos de schema.sql todos los ADD CONSTRAINT (los necesitaremos para “subir” restricciones después de la carga de datos).

> cat schema.sql | grep "ADD CONSTRAINT" > schema_constraint.sql</span>
> cat schema.sql | grep -v "ADD CONSTRAINT" > schema_modified.sql

Creamos el usuario Zabbix en el PostgreSQL y la base de datos:

> su - postgres -c 'PGPASSWORD=Zabbix22; yes $PGPASSWORD | createuser -P -SdR zabbix'
> echo 'CREATE DATABASE zabbix OWNER zabbix' | psql -U postgres
> export PGPASSWORD=Zabbix22
> psql -U zabbix zabbix < /usr/share/zabbix-postgresql/schema_modified.sql

Cargar los datos exportados de MySQL

Los datos exportados del MySQL en formato CSV los cargamos en PostgreSQL con el comando COPY que copia los datos de un fichero en una tabla.

Antes de hacer el COPY  primero transformar los ‘/r’ de retorno de carro ya que si no el proceso fallará ya que PostgreSQL no interpretará bien el fichero. Este es el error que devuelve PostgreSQL.


ERROR: literal carriage return found in data
HINT: Use "\r" to represent carriage return."

Para cada fichero el retorno de carro ‘\r’ se substituye por ^M con el comando sed:


# Para cada fichero CSV

> sed 's/^M/\\r/' alerts.txt > alerts2.txt

Cargar los datos a la base de datos Zabbix, cómo usuario postgres:


> su - postgres

postgres> psql zabbix
#Para cada fichero CSV
$  COPY alerts FROM 'tmp/zabbix/CSV/alerts.txt' DELIMITER ';' CSV;

Después de cargar los datos y si no hay ningún error podemos “levantar”  CONSTRAINTS

> psql -U zabbix zabbix < /usr/share/zabbix-postgresql/schema_constraint.sql

Si has llegado hasta aquí ya te debería de funcionar todo, aunque por seguridad yo cargué el fichero images.sql que también está disponible en la distribución de Zabbix.

Links de Ayuda

Como recuperar disco duro ilegible

Hace un tiempo se me estropeó un disco duro del que no tenía ningún backup automático. Así que me vi en la situación de tener que intentar recuperar los datos que había perdido.

Proceso bastante largo y tuve que hacer muchas pruebas y creo que vale la pena explicarlo.

Windows no arranca

Así empezó la “pesadilla”.  A pesar de que el disco duro que se estropeó no era el disco de sistema, Windows no conseguía arrancar ni tan sólo en modo a prueba de fallos. Windows  al intentar acceder al disco se quedaba colgado.

SystemRescueCD

Justo después intenté arrancar con Linux a ver si en este caso si que conseguía ver el disco. Para asegurarme que tenía todas la herramientas necesarias decidí que lo mejor era utilizar alguna distribución de Linux preparada para este cometido. De todas las posibles me convenció SystemRescueCD y la instalé para que arrancara desde un pendrive USB.

Linux si que arrancaba sin problemas pero tampoco conseguía montar el disco duro.

Intenté varias cosas que no funcionaron:

  • Montarlo manualmente, se trataba de un disco particionado en NTFS:
# Buscar las particiones NTFS.  ¡ No encontró ninguna!
root> fdisk -l | grep ntfs

# Montarlo a mano. ¡Imposible montarlo!
root> mount -t ntfs /dev/sdb1 /mnt/ntfs
  • Recuperarlo con un “File System Check”. Paso arriesgado ya que en realidad el disco no funcionaba bien, no es que tuviera algún problema en el sistema de ficheros.
# Ningún resultado ya que no se identificaba ni que había un partición NTFS
root> ntfsfix -bd /dev/sdb1
  • Verificar si GParted era capaz de ver alguna cosa.

gparted-crash

TestDisk

Finalmente con la herramienta TestDisk conseguí, acceder a la partición y copiar los datos.

# Listar todas las particiones
root> testdisk /list

# Acceder a testdisk
root> testdisk
TestDisk 6.5, Data Recovery Utility, October 2006
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Destro de TestDisk seguimos los siguientes pasos:

  • Nos preguntará si queremos hacer un log de todos lo pasos que realizamos. Le decimos que sí [Create] 
  • Nos pedirá qué partición queremos usar. La escogemos [Proceed]
  • Nos preguntará que tipo de partición es y escogeremos [Intel  ]  Intel/PC partition
  • A continuación nos mostrará las siguientes opciones:
[ Analyse  ]  Analyse current partition structure and search for lost partitions
[ Advanced ]  Filesystem Utils
[ Geometry ]  Change disk geometry
[ Options  ]  Modify options
[ MBR Code ]  Write TestDisk MBR code to first sector
[ Delete   ]  Delete all data in the partition table
[ Quit     ]  Return to disk selection
  • En mi caso sólo quería recuperar los datos, no recuperar el disco así que fuí directamente a [Advanced] y escogí la partición y allí estaban mis datos.
  • Una vez dentro de TestDisk seleccioné todos los ficheros que quería recuperar, los copié y los pegué a una partición segura.

El disco hacía un ruido horrible pero TestDisk no daba ningún error. Lo dejé copiando al cabo de 8 horas ya tenía mis 4Gb de datos recuperados.

Moraleja: No olvides de hacer BACKUP de tus datos.