6 Regles LLD personalitzades

Vista general

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.

Exemple

El format JSON requerit s'il·lustra millor amb un exemple. Suposem que som executant un antic agent Zabbix 1.8 (un que no admet "vfs.fs.discovery"), però encara hem de descobrir sistemes de fitxers. Aquí hi ha un senzill script Perl per a Linux que descobreix sistemes de fitxers muntats i genera 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 símbols permesos per als noms de macro LLD són 0-9 , A-Z , _ , . Les lletres minúscules no s'admeten als noms.

Tot seguit es mostra un exemple de la seva sortida (reformatat per a més claredat). JSON per a comprovacions de decoberta 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 utilitzats en els prototips, l'alternativa és extreure els valors de macro LLD mitjançant 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";

Tot seguit podeu veure un exemple de la seva sortida (reformatat per a més claredat). JSON per a 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"  }
       ]

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, podeu emprar els noms que vulgueu. En cas que s'empri JSONPath, la fila LLD serà un element de matriu que pot ser un objecte, però també pot ser una altra matriu o un valor.

Tingueu en compte que, si feu servir un paràmetre d'usuari, el valor de retorn és limitat a 16Mo. Per obtindre més informació, consulteu límits de dades per als valors de retorn d'LLD.