Como ya comentamos en una ocasión anterior Zabbix es un sistema de monitorización altamente configurable, tanto que nos permite crear nuestros propios scripts de check, en esta ocasión vamos a configurar alarmas que nos comprueben el estado de salud de las conocidas controladoras de disco LSI.
El repo de los scripts utilizados se puede localizar en la siguiente dirección:
https://github.com/lesovsky/zabbix-extensions/tree/master/files/hwraid-megacli
Definimos los UserParameters:
UserParameter=megacli.adp.discovery,/var/lib/zabbix/externalscripts/megacli-adp-discovery.sh
UserParameter=megacli.ld.discovery,/var/lib/zabbix/externalscripts/megacli-ld-discovery.sh
UserParameter=megacli.pd.discovery,/var/lib/zabbix/externalscripts/megacli-pd-discovery.sh
Instalamos un cron ya que las unidades del auto-discovery son items reportados mediante zabbix-trapper:
0 */1 * * * /var/lib/zabbix/externalscripts/megacli-raid-data-processor.sh
Nos bajamos los scripts configurados y eliminamos el sudo según necesidades:
cd /var/lib/zabbix/externalscripts/
wget
https://raw.githubusercontent.com/lesovsky/zabbix-extensions/master/files/hwraid-megacli/scripts/megacli-adp-discovery.sh
sed -i ’s/sudo//g’ megacli-adp-discovery.sh
wget
https://raw.githubusercontent.com/lesovsky/zabbix-extensions/master/files/hwraid-megacli/scripts/megacli-ld-discovery.sh
sed -i ’s/sudo//g’ megacli-ld-discovery.sh
wget
https://raw.githubusercontent.com/lesovsky/zabbix-extensions/master/files/hwraid-megacli/scripts/megacli-pd-discovery.sh
sed -i ’s/sudo//g’ megacli-pd-discovery.sh
wget
https://raw.githubusercontent.com/lesovsky/zabbix-extensions/master/files/hwraid-megacli/scripts/megacli-raid-data-processor.sh
sed -i ’s/sudo//g’ megacli-raid-data-processor.sh
sed -i ’s//usr/libexec/zabbix-extensions/scripts///var/lib/zabbix/externalscripts//g’ megacli-raid-data-processor.sh
chmod 700 *.sh
NOTA: Si utilizamos proxys el script original parsea mal los datos:
zbx_server=$(grep ^Server= /etc/zabbix/zabbix_agentd.conf |cut -d= -f2|cut -d, -f1)
zbx_server=$(grep ^Server= /etc/zabbix/zabbix_agentd.conf |cut -d= -f2|cut -d, -f2)
El script no está bien programado, por ejemplo si la temperatura es N/A falla, cambiamos:
value=$(sed -n -e "/pd begin $adp $enc $pd/,/ld end $adp $enc $pd/p" $data_out |grep -m1 -w "^Drive Temperature" |awk '{print $3}' |grep -oE '[0-9]+')
value=$(sed -n -e "/pd begin $adp $enc $pd/,/ld end $adp $enc $pd/p" $data_out |grep -m1 -w "^Drive Temperature" |awk '{print $3}' |grep -oE '[0-9]+')
if [ -z $value ]; then
value='0'
fi
Reiniciamos el servicio:
Importamos el template en zbx:
Aplicamos el template al server en cuestión desde la interfaz web del Zabbix.
TROUBLESHOOTING
Los items provienen del cronjob, ejecutamos el script y consultamos los datos colectados:
"node00" megacli.adp.name[0] Supermicro SMC2208
"node00" megacli.ld.degraded[0] 0
"node00" megacli.ld.offline[0] 0
"node00" megacli.pd.total[0] 2
"node00" megacli.pd.critical[0] 0
"node00" megacli.pd.failed[0] 0
"node00" megacli.mem.err[0] 0
"node00" megacli.mem.unerr[0] 0
"node00" megacli.ld.state[0:0] Optimal
"node00" megacli.pd.media_error[0:252:0] 0
"node00" megacli.pd.other_error[0:252:0] 0
"node00" megacli.pd.pred_failure[0:252:0] 0
"node00" megacli.pd.state[0:252:0] Online
"node00" megacli.pd.temperature[0:252:0]
"node00" megacli.pd.media_error[0:252:1] 0
"node00" megacli.pd.other_error[0:252:1] 0
"node00" megacli.pd.pred_failure[0:252:1] 0
"node00" megacli.pd.state[0:252:1] Online
"node00" megacli.pd.temperature[0:252:1] 0
NOTA: Todas las líneas a enviar deberían de ser:
<hostname> <key> <value>
Podemos simular alarmas para comprobar que Zabbix nos avisa en caso de problemas:
"node00" megacli.pd.critical[0] 1
Tamibién podemos comprobar la alarma pero saltándonos los scripts intermedios: