8 Règles LLD personnalisées
Aperçu
Il est également possible de créer une règle LLD entièrement personnalisée, permettant de découvrir tout type d’entités, par exemple des bases de données sur un serveur de bases de données.
Pour ce faire, un élément personnalisé doit être créé afin de renvoyer une chaîne JSON, 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 une ou deux macros seulement (par exemple, deux pour la découverte des systèmes de fichiers), il est possible d’en renvoyer davantage.
Exemple
Le format requis pour la chaîne JSON est plus facile à comprendre à l’aide d’un exemple. Supposons que vous utilisiez un ancien agent Zabbix 1.8 (qui ne prend pas en charge la clé vfs.fs.discovery), mais que vous ayez tout de même besoin de découvrir les systèmes de fichiers. Voici un script Perl simple pour Linux qui découvre 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 de 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,
rendant ainsi possible un script de ce type :
#!/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.
[
{ "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, vous pouvez spécifier "{#FSTYPE}" comme macro et "rootfs|ext3" comme expression régulière.
Vous n’êtes pas obligé d’utiliser des noms de macros comme 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 peut aussi être un autre tableau ou une valeur.
Notez que, si vous utilisez un paramètre utilisateur, la valeur de retour est limitée à 16 Mo. Pour plus de détails, voir les limites de données pour les valeurs de retour LLD.