Advertising:
Low Level Discovery
Jump to navigation
Jump to search
Pre Requisitos
- Instalar JQ desde Epel Repository
Crear las funciones que nos ayudaran a gestionar el LLD
- La primera funcion genera el LLD Nota: La idea es que el JSON que se genera sea dinámico. Este es el principal beneficio del LLD, que autodescubra los elementos que queremos monitorizar de forma autónoma y cree los items segun el elemnto descubierto. Como vemos en el siguiente script, una host puede tener 1 HDD o N, pero sea cual sea el numero de discos, los queremos tener monitorizados a todos. Si no queremos que todo lo autodescubierto se monitorice podemos aplicar filtros al autodiscover creando expresiones regulares generales (Administration -> General -> Regular Expressions). UserParameter=lld.disk, /usr/bin/iostat -y 2>/dev/null | /usr/bin/sed -n '/Device/,$p' | /usr/bin/awk 'BEGIN{sep="";print "{\"data\":["} NR!=1 { if($1) { print sep"{\"{#DEV}\":\""$1"\"}" } sep=","}END{print "]}"}'
Nota: Este script genera una salida con el formato que espera Zabbix { "data": [ { "{#DEV}": "sda" }, { "{#DEV}": "dm-0" }, { "{#DEV}": "dm-1" }, { "{#DEV}": "dm-2" } ] }
- La segunda funcion la utilizaremos dentro de un item prototype para recuperar el estado de cada dispositivo UserParameter=dev.putilization[*], /usr/bin/iostat -yx 1 2 $1 | /usr/bin/tail -2 | /usr/bin/head -1 | /usr/bin/awk '{print $NF}'
Nota: Se pasa a la funcion el DEVICE para el cual queremos recuperar el % de Utilizacion.
Creamos un Template en el cual utilizaremos lo que definimos anteriormente
Configuration -> Template -> Create Template Template name: Template DEMO LLD Groups: Templates <<ADD>> - Seleccionamos y vamos Discovery rules -> Create Discovery rules Name: LLD Devices Type: Zabbix Agent Key : lld.disk <- ES LA KEY definida en el userparameter del agente <<ADD>>
- Dentro del LLD que creamos "LLD Devices" creamos un Item Prototype Item prototypes -> Create Item Prototype Name: % Utilization Type: Zabbix Agent Key : dev.putilization["{#DEV}"] <- ES LA KEY definida en el userparameter del agente que se le pasa como parámetro la macro del LLD Type of information: Numeric Unsigned Units: % <<ADD>>
Creamos el userparameterdemo.conf
# vi /etc/zabbix/zabbix_agentd.d/userparameterdemo.conf UserParameter=lld.disk, /usr/bin/iostat -y 2>/dev/null | /usr/bin/sed -n '/Device/,$p' | /usr/bin/awk 'BEGIN{sep="";print "{\"data\":["} NR!=1 { if($1) { print sep"{\"{#DEV}\":\""$1"\"}" } sep=","}END{print "]}"}' UserParameter=dev.putilization[*], /usr/bin/iostat -yx 1 2 $1 | /usr/bin/tail -2 | /usr/bin/head -1 | /usr/bin/awk '{print $NF}' # systemctl restart zabbix-agent.service
Creamos un Trigger Prototype para que genere una alerta
Trigger prototypes -> Create Trigger prototype Name: {HOST.NAME} - {#DEV} High % Usage Severity: Hight Expression: {Template DEMO LLD:dev.putilization["{#DEV}"].max(#3)}>50 or {Template DEMO LLD:dev.putilization["{#DEV}"].nodata(5m)}=1
Nota: Si el valor supera el 50% o no hay datos recolectados en 5m salta la alarma
# zabbix_server -R config_cache_reload
Ejemplo
- Generamos un poco de carga y vemos como se comporta el nuevo Trigger # dd if=/dev/sda of=/dev/null bs=1024