Zabbix, howto monitoring raid hardware

El otro día me preguntó un compañero cómo hacer para monitorizar un RAID desde zabbix. Tras las primeras pesquisas, la pregunta obvia es qué tipo de RAID se quiere monitorizar, hardware o software. Cada uno tiene sus utilidades y sus métodos de acceso y control.
En este post vamos a comentar cómo hacer para monitorizar el estado de un RAID hardware, concretamente un RAID que emplee el módulo megaraid del kernel. Aunque realmente tanto da la utilidad que empleemos, pues a nivel de zabbix realmente es lo mismo. Algo consultará el estado del RAID y nos lo devolverá y será zabbix el encargado de notificarnos si se ha producido un cambio de estado o no.
En este caso, para hacerlo más real y con datos de equipos de verdad en el que comprobar que funcionen, vamos a ver cómo emplearlo. Lo primero será comprobar que nuestra controladora RAID es compatible con el software que vamos a instalar, MegaRAID SAS, para ello el módulo megaraid* deberá estar cargado.
shell> lsmod |grep raid
megaraid_sas           45561  2
Como podemos observar lo tenemos disponible. Por lo tanto vamos a instalar el software necesario. Éste no está disponible en los repositorios oficiales de debian/ubuntu, así que tendremos que recurrir al repositorio que el propio fabricante ofrece. Creamos para ello el fichero /etc/apt/sources.list.d/megaraid.list con el siguiente contenido, según sea debian/ubuntu y la versión del mismo.
# ubuntu
deb http://hwraid.le-vert.net/ubuntu/ lucid main

#debian
deb http://hwraid.le-vert.net/debian/ squeeze main
Tras ello,
shell> apt-get update
Ahora que ya tenemos los paquetes disponibles, vamos a ver lo que hay para instalar,
shell> apt-cache search megaraid
  dellmgr - Manage DELL PERC/CERC cards based on LSI MegaRAID chip
  megacli - LSI Logic MegaRAID SAS MegaCLI
  megaclisas-status - get RAID status out of LSI MegaRAID SAS HW RAID
  megactl - LSI MegaRAID SCSI/SAS reporting tool
  megamgr - Manage LSI MegaRAID chip based cards
  megaraid-status - get RAID status out of LSI MegaRAID SCSI/SAS HW RAID
Estos son los nuevos paquetes disponibles, así que instalamos el software que nos interesa para monitorizar el estado de RAID. Aunque hay más utilidades, en este caso sólo nos interesa controlar el estado del equipamiento.
shell> apt-get install megaraid-status megaclisas-status
Cuando finalice la instalación de todo el nuevo software se iniciará un pequeño daemon, megaraidsas-statusd, que se encargará de chequear el correcto funcionamiento del RAID y en caso de que detecte alguna variación de estado, enviará un mail de advertencia. Este comportamiento es por defecto y si no nos interesa, simplemente paramos el nuevo daemon y listo.
A nosotros lo que realmente nos interesa es que nuestra herramienta de monitorización, zabbix, lea el estado del RAID en nos envíe una alerta en caso de que algo falle. Para hacerlo tendremos que ejecutar el comando megaraidsas-status (en mi caso, ya que tengo una unidad sas) o megaraid-status en cualquier otro caso. La salida que este comando nos ofrece es la siguiente,
shell> megaraidsas-status
  -- Arrays informations --
  -- ID | Type | Size | Status
  a0d0 | RAID 17 | 0B | optimal

  -- Disks informations
  -- ID | Model | Status | Warnings
  a0e64s0 | ATA ST950NS 465GiB | online
  a0e64s1 | ATA ST950NS 465GiB | online
  a0e64s2 | ATA ST950NS 465GiB | online
  a0e64s3 | ATA ST950NS 465GiB | online
Primero nos informa acerca del estado del RAID completo (en mi caso optimal) y luego del estado de cada uno de los discos (en este caso, online los 4 discos que tengo).
Si este mismo comando lo ejecutamos en un equipo que tenga el RAID con un disco fallando, la salida será,
shell> megaraidsas-status
  -- Arrays informations --
  -- ID | Type | Size | Status
  a0d0 | RAID 17 | 0B | DEGRADED

  -- Disks informations
  -- ID | Model | Status | Warnings
  a0e64s0 | ATA ST950NS 465GiB | online
  a0e64s1 | ATA ST950NS 465GiB | online
  a0e64s2 | ATA ST950NS | BAD
  a0e64s3 | ATA ST950NS 465GiB | online
  There is at least one disk/array in a NOT OPTIMAL state.
Como podemos observar nos está diciendo que el disco 3 está BAD y por lo tanto el estado general del RAID es DEGRADED. Así de fácil sabemos desde nuestro sistema GNU/Linux que un RAID ha fallado y además qué disco es el que falló.
La pregunta ahora es, cómo unir esto con zabbix. Pues simplemente creamos una nueva key como la que sigue,
zabbix: item RAID status
Las partes importantes del nuevo Item son:
  • Key: system.raid.status
  • Type of information: Text
La key que hemos creamos no existe, sino que 'nos la hemos inventado' y por lo tanto necesitamos crearla en el equipo. Para hacer este tipo de cosas, en el fichero de configuración del agente zabbix (zabbix_agentd.conf) tenemos los UserParameter, que son parámetros o key's que creamos nosotros directamente y hacemos que nos devuelven el valor que deseamos. Para usarlo con el software de MegaRAID debemos crear un nuevo UserParameter tal que así,
UserParameter=system.raid.status, /usr/sbin/megaraidsas-status | grep RAID | awk '{print $8}'
Si ejecutáis el comando completo podréis ver que la salida es optimal o DEGRADED, según el estado del RAID. Lo que a nosotros nos interesa es justamente eso, almacenar una única cadena ya que luego a la hora de hacer un trigger será mucho más simple.
Si lo hacéis tal que así, obtendréis un maravillo error "ZBX_NOTSUPPORTED", esto es por que el usuario zabbix no tiene permisos para ejecutar dicho comando. Lo ideal sería ahora darle permisos en el fichero /etc/sudoers para permitirle la ejecución, sin embargo esto no funciona. Tras dárselo aparecerá un nuevo fallo.
shell> sudo -u zabbix /usr/sbin/megaraidsas-status 
unable to open device /dev/megaraid_sas_ioctl_node: Permission denied
No se permite acceso al dispositivo como usuario zabbix, así que investigando un poco lo que hace el daemon, es sencillo creo un nuevo UserParameter que funcione y además así nos aseguramos de tener el daemon también ejecutándose. Este nuevo servicio crea, por defecto, bajo /var/run dos ficheros megaraidsas-statusd.[pid|status]. El segundo es el que almacena la salida y que sí puede ser leído por cualquier usuario sin problema ninguno. Así que lo vamos a emplear para tal efecto. Puesto que dicho fichero sólo existe si hay un fallo en el RAID, vamos a dejar el UserParameter así,
UserParameter=system.raid.status, if [ -e /var/run/megaraidsas-statusd.status ]; then cat /var/run/megaraidsas-statusd.status | grep RAID | awk '{print $8}'; else echo "optimal"; fi
Si existe recuperamos el valor, si no existe es el que RAID está correcto y devolvemos optimal.
Ahora que ya tenemos el Item y podemos recuperar valores, sólo queda crear un trigger que salte en caso de que el estado del RAID no sea optimal. Para ello, creamos un nuevo trigger relacionado con el Item recién creado y con estos valores:
  • Name: {HOSTNAME} RAID problem
  • Expression: {Template Linux RAID:system.raid.status.str("DEGRADED")}=1
  • Severity: High
  • Enabled: True
Con ello cualquier RAID que sufra algún problema zabbix nos alertará inmediatamente.

La entrada Zabbix, howto monitoring raid hardware la puedes leer en Puppet Linux.


3 comentarios :

  1. Tenemos que colocar: "UserParameter=system.raid.status, if [ -e /var/run/megaraidsas-statusd.status ]; then cat /var/run/megaraidsas-statusd.status | grep RAID | awk '{print $8}'; else echo "optimal"; fi " no zabbix_agent.conf ? Como hacemos para testar?

    ResponderEliminar
    Respuestas
    1. Sí, efectivamente es necesario poner ese userparameter en la conf del agente y reiniciarlo.
      Para probarlo, desde el server zabbix, con zabbix_get -k system.raid.status deberías de tener salida correcta o el error que hay.

      Eliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios