7 Règles LLD personnalisées

Vue d'ensemble

Il est également possible de créer une règle LLD entièrement personnalisée, permettant de découvrir n'importe quel type d'entités - par exemple, des bases de données sur un serveur de base de données.

Pour ce faire, un élément personnalisé doit être créé afin de renvoyer une chaîne JSON, en spécifiant les objets trouvés et, éventuellement, certaines de leurs propriétés. Le nombre de macros par entité n'est pas limité - alors que les règles de découverte intégrées renvoient soit une, soit deux macros (par exemple, deux pour la découverte du système de fichiers), il est possible d'en renvoyer davantage.

Exemple

Le format de chaîne JSON requis est le mieux illustré par un exemple. Supposons que nous exécutons un ancien agent Zabbix 1.8 (qui ne prend pas en charge vfs.fs.discovery), mais que nous ayons tout de même besoin de découvrir les systèmes de fichiers. Voici un simple script Perl pour Linux qui détecte les systèmes de fichiers montés et produit une sortie au format JSON, incluant à la fois le nom et le type du système de fichiers. Une façon de l'utiliser serait comme UserParameter avec la clé 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";

Les symboles autorisés pour les noms de macros LLD sont 0-9 , A-Z , _ , .. Les lettres minuscules ne sont pas prises en charge dans les noms.

Un exemple de sa sortie (reformatée pour plus de clarté) est présenté ci-dessous. Le JSON pour les vérifications de découverte personnalisées doit suivre le même 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"  }
]

Dans l'exemple précédent, il est nécessaire que les clés correspondent aux noms des macros LLD utilisés dans les prototypes ; l'alternative consiste à extraire les valeurs des macros LLD à l'aide de JSONPath {#FSNAME}$.fsname et {#FSTYPE}$.fstype, ce qui rend possible un script comme celui-ci :

#!/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";

Un exemple de sa sortie (reformatée pour plus de clarté) est présenté ci-dessous. Le JSON pour les vérifications de découverte personnalisées doit suivre le même 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"  }
]

Ensuite, dans le champ "Filter" de la règle de découverte, nous pourrions spécifier {#FSTYPE} comme macro et rootfs|ext3 comme expression régulière.

Vous n'avez pas besoin d'utiliser les noms de macros FSNAME/FSTYPE avec des règles LLD personnalisées, vous êtes libre d'utiliser les noms de votre choix. Si JSONPath est utilisé, alors la ligne LLD sera un élément de tableau qui peut être un objet, mais aussi un autre tableau ou une valeur.

Notez que, si vous utilisez un paramètre utilisateur, la valeur de retour est limitée à 16 MB. Pour plus de détails, voir limites de données pour les valeurs de retour LLD.