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