Такође је могуће креирати потпуно прилагођено LLD правило, откривање било ког тип ентитета - на пример, базе података на серверу базе података.
Да бисте то урадили, треба креирати прилагођену ставку која враћа JSON, наводећи пронађене објекте и опционо - нека њихова својства. Износ од макроа по ентитету није ограничен - док уграђена правила откривања враћа један или два макроа (на пример, два за откривања систем датотека), могуће је вратити више.
Потребни JSON формат стринга је најбоље илустрован примером. Претпоставимо да користите стари Zabbix 1.8 агент (онај који не подржава vfs.fs.discovery кључ), али и даље морате открити системе датотека. Ево једноставне Perl скрипте за Linux који открива монтиране датотеке система и излаз у JSON формату, који укључује и име и тип датотеке система. Један од начина да се користи је као UserParameter са кључем "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";
Дозвољени симболи за имена LLD макроа су 0-9 , A-Z , _ , . Мала слова нису подржана у именима.
Пример његовог излаза (реформатиран ради јасноће) је приказан испод. JSON за прилагођене провере откривања мора да прати исти формат.
[
{ "{#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" }
]
У претходном примеру је потребно да кључеви одговарају LLD макроима који се користе у прототиповима, алтернатива је издвајање LLD макро вредности користећи JSONPath {#FSNAME}
→ $.fsname
и {#FSTYPE}
→ $.fstype
, чиме је омогућен такав сценарио::
#!/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";
Пример његовог излаза (реформатиран ради јасноће) је приказан испод.
[
{ "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" }
]
Затим, у пољу Филтер правила откривања, можете навести "{#FSTYPE}" као макро и "rootfs|ext3" као регуларни израз.
Не морате користити имена макроа попут FSNAME/FSTYPE са прилагођеним LLD правилима, слободни сте да користите било која имена која желите. У случају да се користи JSONPath тада ће LLD ред бити елемент низа који може бити објекат, али може бити и други низ или вредност.
Имајте на уму да је, ако користите кориснички параметар, враћена вредност ограничена на 16MB. За више детаља погледајте ограничења података за LLD враћене вредности.