7 Reglas de descubrimiento personalizadas

Descripción general

También es posible crear una regla LLD completamente personalizada, descubriendo cualquier tipo de entidades, por ejemplo, bases de datos en un servidor de bases de datos.

Para hacerlo, se debe crear una métrica personalizada que devuelva JSON, especificando objetos encontrados y, opcionalmente, algunas propiedades de los mismos. La cantidad de macros por entidad no está limitada, mientras que las reglas de descubrimiento integradas devuelven una o dos macros (por ejemplo, dos para el descubrimiento del sistema de archivos ), es posible devolver más.

Ejemplo

El formato JSON requerido se ilustra mejor con un ejemplo. Supongamos que estámos ejecutando un antiguo agente Zabbix 1.8 (uno que no admite "vfs.fs.discovery"), pero aún necesitamos descubrir sistemas de archivos. Aquí está un script Perl simple para Linux que descubre sistemas de archivos montados y genera JSON, que incluye tanto el nombre como el tipo del sistema de archivos. Una manera de usarlo sería como un parámetro de usuario con la clave "vfs.fs.discovery_perl":

#!/usr/bin/perl
       
       $first = 1;
       
       print "[\n";
       
       for (`cat /proc/mounts`)
       {
           ($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
       
           print "\t,\n" if not $first;
           $first = 0;
       
           print "\t{\n";
           print "\t\t\"{#FSNAME}\":\"$fsname\",\n";
           print "\t\t\"{#FSTYPE}\":\"$fstype\"\n";
           print "\t}\n";
       }
       
       print "]\n";

Los símbolos permitidos para los nombres de macros LLD son 0-9, A-Z, _, . No se admiten letras minúsculas en los nombres.

A continuación se muestra un ejemplo de su resultado (reformateado para mayor claridad). JSON para comprobaciones de descubrimiento personalizadas debe seguir el mismo formato.

[
           { "{#FSNAME}":"/",                           "{#FSTYPE}":"rootfs"   },
           { "{#FSNAME}":"/sys",                        "{#FSTYPE}":"sysfs"    },
           { "{#FSNAME}":"/proc",                       "{#FSTYPE}":"proc"     },
           { "{#FSNAME}":"/dev",                        "{#FSTYPE}":"devtmpfs" },
           { "{#FSNAME}":"/dev/pts",                    "{#FSTYPE}":"devpts"   },
           { "{#FSNAME}":"/lib/init/rw",                "{#FSTYPE}":"tmpfs"    },
           { "{#FSNAME}":"/dev/shm",                    "{#FSTYPE}":"tmpfs"    },
           { "{#FSNAME}":"/home",                       "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/tmp",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/usr",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/var",                        "{#FSTYPE}":"ext3"     },
           { "{#FSNAME}":"/sys/fs/fuse/connections",    "{#FSTYPE}":"fusectl"  }
       ]

En el ejemplo anterior se requiere que las claves coincidan con los nombres de la macro LLD utilizados en prototipos, la alternativa es extraer valores de la macro LLD usando JSONPath {#FSNAME}$.fsname y {#FSTYPE}$.fstype, haciendo así posible dicho script:

#!/usr/bin/perl
        
       $first = 1;
        
       print "[\n";
        
       for (`cat /proc/mounts`)
       {
           ($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
        
           print "\t,\n" if not $first;
           $first = 0;
        
           print "\t{\n";
           print "\t\t\"fsname\":\"$fsname\",\n";
           print "\t\t\"fstype\":\"$fstype\"\n";
           print "\t}\n";
       }
        
       print "]\n";

A continuación se muestra un ejemplo de su resultado (reformateado para mayor claridad). JSON para comprobaciones de descubrimiento personalizadas debe seguir el mismo formato.

[
           { "fsname":"/",                           "fstype":"rootfs"   },
           { "fsname":"/sys",                        "fstype":"sysfs"    },
           { "fsname":"/proc",                       "fstype":"proc"     },
           { "fsname":"/dev",                        "fstype":"devtmpfs" },
           { "fsname":"/dev/pts",                    "fstype":"devpts"   },
           { "fsname":"/lib/init/rw",                "fstype":"tmpfs"    },
           { "fsname":"/dev/shm",                    "fstype":"tmpfs"    },
           { "fsname":"/home",                       "fstype":"ext3"     },
           { "fsname":"/tmp",                        "fstype":"ext3"     },
           { "fsname":"/usr",                        "fstype":"ext3"     },
           { "fsname":"/var",                        "fstype":"ext3"     },
           { "fsname":"/sys/fs/fuse/connections",    "fstype":"fusectl"  }
       ]

Luego, en el campo "Filtro" de la regla de descubrimiento, podríamos especificar "{#FSTYPE}" como macro y "rootfs|ext3" como expresión regular.

No es necesario utilizar nombres de macro FSNAME/FSTYPE con nombres personalizados. En las reglas de LLD, es libre de usar los nombres que quiera. En caso de JSONPath se usa, entonces la fila LLD será un elemento de matriz que puede ser un objeto, pero también puede ser otra matriz o un valor.

Tenga en cuenta que, si utiliza un parámetro de usuario, el valor de retorno está limitado a 16 MB. Para obtener más detalles, consulte los límites de datos para valores de retorno de LLD.