Category Archives: IT

El libro de OpenLayers 3

Antonio Santiago (@acanimal), amigo y compañero de fatigas y diversión en mi trabajo, acaba de publicar su segundo libro sobre OpenLayers, “The book of OpenLayers 3”.

OpenLayers es una biblioteca de JavaScript de código abierto diseñada para mostrar mapas interactivos en los navegadores web.

El libro, autopublicado en la plataforma LeanPub, hace un repaso suficientemente extensivo cómo para acabar dominando la API que ofrece OpenLayers. El libro, a parte de la explicación de librería, contiene una gran cantidad de ejemplos a modo de Cookbook (libro de recetas).

El libro está orientado tanto a programadores que se inicien en OpenLayers como para los que ya conocen la librería y quieren profundizar en la versión 3 de OpenLayers.

 

Si no conoces OpenLayers, puedes echar un vistazo a la página de ejemplos de la versión 3 y ver lo que podrías llegar a hacer si decides utilizar esta librería para hacer tus mapas.

Finalmente felicitar a Antonio por su enorme trabajo (casi un año des de que empezó a escribirlo) y animaros a comprarlo si queréis, y difundirlo, ya que se trata de un libro autopublicado sin ninguna campaña de marketing detrás.

Monitorizar Filer NetAPP con Zabbix

Vuelvo a la carga con Zabbix esta vez para explicaros como monitorizar una cabina de almacenamiento NetApp incluyendo el “autodiscover” de todos los volúmenes y luns que tenga. En este caso utilizaremos SNMP (Simple Network Management Protocol).

Añadir Plantilla NetApp

Antes de añadir el Host NetApp es necesario añadir una plantilla “Template” Zabbix que incluye: los Items a monitorizar del Filer NetApp, Triggers preconfigurados, Gráficos, … Este template netapp_FAS.xml.gz está disponible en la página de Templates de Zabbix.

Añadir una plantilla es muy senzillo simplemente hay que ir al menú Configuration -> Template -> Import y cargar la plantilla.

Añadir “Value Mappings”

El siguiente paso es añadir el mapeo de valores que devuelve el NetApp vía SNMP (MIB: Management Information Base). Con el “Value Mappings” se le informa a Zabbix que variables ofrece NetApp y a que corresponden. Por ejemplo, Zabbix ha de saber que la variable NetApp AutosupportStatus que ofrece el Filer vía SNMP puede estar asignada a cuatro valores diferentes y que si devuelve 1  es que el Autosupport de NetApp está ok, que si devuelve 2 es que hay algún error de smtp, etc …

Por suerte la información de los MIBs SNMP de NetApp también están disponibles en los foros de Zabbix.

El único inconveniente es que los “Value Mappings” hay que añadirlos a mano vía “Administration -> General -> Value Mapping”.

Configuration-of-value-mapping

Añadir Host NetApp en Zabbix

Cómo he explicado antes en este caso no es posible instalar ningún agente en el Filer NetApp así que la monitorización se hace vía SNMP. El host se añade des del menú Administration->Hosts y se rellena la IP del Filer y el Puerto SNMP.

Configuration-of-hosts

“Autodiscover” de Volúmenes y Luns

Hasta aquí monitorizaríamos el Filer pero no los tamaños de los Volúmenes y Luns que contiene. Para monitorizarlos también,  cómo en el caso de monitorización del Virtual Center de VMware los “autodiscovers” están desactivados y hay que activarlos.

Configuration-of-discovery-rules

Además de los Volúmenes y Luns la plantilla dispone de “autodiscover” de Raid Disks, Spare Disks  y Quotas.

Una vez activados los “autodiscovers” nos aparecerán los nuevos Items en unos minutos, es decir todos los Volúmenes y Luns del Filer y sus Triggers asociados por defecto.

Configuration-of-items

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.