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.
El formato JSON requerido se ilustra mejor con un ejemplo. Supongamos que est¨¢mos ejecutando un antiguo agente Áú»¢¶Ä²© 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.