8 Własne reguły LLD

Przegląd

Możliwe jest również utworzenie całkowicie niestandardowej reguły LLD, wykrywającej dowolny typ encji — na przykład bazy danych na serwerze bazodanowym.

Aby to zrobić, należy utworzyć niestandardową pozycja, która zwraca ciąg JSON, określający znalezione obiekty oraz opcjonalnie — niektóre ich właściwości. Liczba makr na encję nie jest ograniczona — podczas gdy wbudowane reguły wykrywania zwracają jedno lub dwa makra (na przykład dwa w przypadku wykrywania systemów plików), możliwe jest zwrócenie większej liczby.

Przykład

Wymagany format ciągu JSON najlepiej zilustrować na przykładzie. Załóżmy, że używasz starego agenta Zabbix 1.8 (takiego, który nie obsługuje klucza vfs.fs.discovery), ale nadal musisz wykrywać systemy plików. Poniżej znajduje się prosty skrypt Perl dla systemu Linux, który wykrywa zamontowane systemy plików i zwraca dane w formacie JSON, zawierające zarówno nazwę systemu plików, jak i jego typ. Jednym ze sposobów użycia go byłoby zastosowanie go jako UserParameter z kluczem 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";

Dozwolone symbole w nazwach makr LLD to 0-9 , A-Z , _ , .. Małe litery nie są obsługiwane w nazwach.

Przykład danych wyjściowych (przeformatowany dla większej czytelności) pokazano poniżej. JSON dla niestandardowych kontroli wykrywania musi mieć ten sam 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"  }
]

W poprzednim przykładzie wymagane jest, aby klucze odpowiadały nazwom makr LLD używanym w prototypach; alternatywnie można wyodrębnić wartości makr LLD za pomocą JSONPath {#FSNAME}$.fsname oraz {#FSTYPE}$.fstype, co umożliwia użycie takiego skryptu:

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

Przykład danych wyjściowych (przeformatowany dla większej czytelności) pokazano poniżej.

[
    { "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"  }
]

Następnie w polu Filter reguły wykrywania możesz określić {#FSTYPE} jako makro, a rootfs|ext3 jako wyrażenie regularne.

Nie musisz używać nazw makr takich jak FSNAME/FSTYPE w niestandardowych regułach LLD; możesz używać dowolnych nazw. Jeśli używany jest JSONPath, wiersz LLD będzie elementem tablicy, który może być obiektem, ale może też być inną tablicą lub wartością.

Pamiętaj, że w przypadku użycia parametru użytkownika wartość zwracana jest ograniczona do 16 MB. Więcej informacji znajdziesz w sekcji limity danych dla wartości zwracanych LLD.