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.