Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

7 Reglas de descubrimiento personalizadas

Descripción general

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

Para ello, se debe crear un elemento personalizado que devuelva una cadena JSON, especificando los objetos encontrados y, opcionalmente, algunas de sus propiedades. 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 de sistemas de archivos), es posible devolver más.

Ejemplo

El formato requerido de la cadena JSON se ilustra mejor con un ejemplo. Supongamos que estamos ejecutando un agente Zabbix 1.8 antiguo (uno que no soporta "vfs.fs.discovery"), pero aún necesitamos descubrir sistemas de archivos. Aquí hay un sencillo script en Perl para Linux que descubre los sistemas de archivos montados y los muestra en JSON, incluyendo tanto el nombre como el tipo del sistema de archivos. Una forma de usarlo sería como un UserParameter 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 salida (reformateada para mayor claridad). El 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 las macros LLD utilizadas en los prototipos, la alternativa es extraer los valores de las macros LLD usando JSONPath {#FSNAME}$.fsname y {#FSTYPE}$.fstype, haciendo posible así el siguiente 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 salida (reformateada para mayor claridad). El 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 los nombres de macro FSNAME/FSTYPE con reglas LLD personalizadas, puede usar los nombres que desee. En caso de que se utilice JSONPath, 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 más detalles, consulte límites de datos para valores de retorno de LLD.