També és possible crear una regla LLD completament personalitzada, descobrint qualsevol tipus d'entitats, per exemple, bases de dades en un servidor de bases de dades.
Per fer-ho, s'ha de crear un element personalitzat que retorni JSON, especificant els objectes trobats i, opcionalment, algunes propietats. La quantitat de macros per entitat no és limitada; encara que les regles de descoberta integrades retornen una o dues macros (per exemple, dues per a la descoberta del sistema de fitxers), és possible retornar-ne més.
El format JSON requerit s'entén millor amb un exemple. Suposeu que nosaltres som executant un agent Zabbix 1.8 (antic, que no admet "vfs.fs.discovery"), però encara hem de cercar sistemes de fitxers. Aquí hi ha un senzill script Perl per a Linux que troba sistemes de fitxers muntats i genera un JSON, que inclou tant el nom com el tipus del sistema de fitxers. Una manera d'emprar-lo seria com a UserParameter amb la clau "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";
Els simbols de noms de macros LLD are 0-9 , A-Z , _ , . Les minúscules no s'admeten pas als seus noms.
Un exemple de la seva sortida (reformatat, per entendre-ho millor) es veu aquí abaix. El JSON per comprovacions de descoberta personalitzades ha de seguir el mateix format.
[
{ "{#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" }
]
A l'exemple anterior es requereix que les claus coincideixin amb els noms de macro LLD emprats als prototips, l'alternativa és extreure els valors de macro LLD emprant JSONPath {#FSNAME}
→ $.fsname
i {#FSTYPE}
→ $.fstype
, fent possible aquest 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";
Aquí sota teniu un exemple de la seva sortida (reformatat per entendre-ho millor). El JSON per les comprovacions de descoberta personalitzada ha de tindre el mateix format.
[
{ "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" }
]
Aleshores, al camp "Filtre" de la regla de descoberta, podríem especificar "{#FSTYPE}" com a macro i "rootfs|ext3" com a expressió regular.
No cal que empreu els noms de macro FSNAME/FSTYPE amb regles LLD personalitzades, sou lliure d'emprar els noms que vulgueu. En cas que es faci ús de JSONPath, llavors la filera LLD serà un element de matriu que pot ésser un objecte, però també pot ésser una altra matriu o un valor.
Tingueu en compte que, si feu servir un paràmetre d'usuari, el valor de retorn serà limitat a 16 Mo. Per obtindre més informació, consulteu els límits de dades per als valors de retorn de LLD.