7 Regole LLD personalizzate

Panoramica

È anche possibile creare una regola LLD completamente personalizzata, in grado di individuare qualsiasi tipo di entità - ad esempio, database su un database server.

Per farlo, è necessario creare un item personalizzato che restituisca una stringa JSON, specificando gli oggetti trovati e, facoltativamente, alcune loro proprietà. Il numero di macro per entità non è limitato - mentre le regole di discovery integrate restituiscono una o due macro (ad esempio, due per la discovery del filesystem), è possibile restituirne di più.

Esempio

Il formato della stringa JSON richiesto è illustrato al meglio con un esempio. Supponiamo di eseguire un vecchio agent Zabbix 1.8 (che non supporta vfs.fs.discovery), ma di dover comunque individuare i file system. Ecco un semplice script Perl per Linux che rileva i file system montati e restituisce l'output in JSON, includendo sia il nome del file system sia il tipo. Un modo per usarlo sarebbe come UserParameter con chiave 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";

I simboli consentiti per i nomi delle macro LLD sono 0-9 , A-Z , _ , .. Le lettere minuscole non sono supportate nei nomi.

Di seguito è mostrato un esempio del suo output (riformattato per chiarezza). Il JSON per i controlli di discovery personalizzati deve seguire lo stesso 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"  }
]

Nell'esempio precedente è richiesto che le chiavi corrispondano ai nomi delle macro LLD usate nei prototipi; in alternativa, è possibile estrarre i valori delle macro LLD usando JSONPath {#FSNAME}$.fsname e {#FSTYPE}$.fstype, rendendo possibile uno script come questo:

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

Di seguito è mostrato un esempio del suo output (riformattato per chiarezza). Il JSON per i controlli di discovery personalizzati deve seguire lo stesso 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"  }
]

Quindi, nel campo "Filter" della regola di discovery, potremmo specificare {#FSTYPE} come macro e rootfs|ext3 come espressione regolare.

Non è necessario usare i nomi delle macro FSNAME/FSTYPE con regole LLD personalizzate; sei libero di usare i nomi che preferisci. Nel caso in cui venga usato JSONPath, la riga LLD sarà un elemento di array che può essere un oggetto, ma può anche essere un altro array o un valore.

Nota che, se si usa un user parameter, il valore restituito è limitato a 16 MB. Per ulteriori dettagli, vedere limiti dei dati per i valori restituiti da LLD.