3 Makra użytkownika z kontekstem
Przegląd
Opcjonalny kontekst może być używany w makrach użytkownika, co pozwala zastąpić wartość domyślną wartością specyficzną dla danego kontekstu.
Kontekst jest dołączany do nazwy makra; składnia zależy od tego, czy kontekst jest statyczną wartością tekstową:
{$MACRO:"tekst statyczny"}
czy wyrażeniem regularnym:
{$MACRO:regex:"wyrażenie regularne"}
Należy pamiętać, że makro z kontekstem wyrażenia regularnego może być zdefiniowane wyłącznie
w konfiguracji makr użytkownika. Jeśli prefiks regex: zostanie użyty w innym miejscu jako
kontekst makra użytkownika, na przykład w wyrażeniu wyzwalacza, zostanie potraktowany jako
kontekst statyczny.
Ujmowanie kontekstu w cudzysłów jest opcjonalne (zobacz także ważne uwagi).
Przykłady kontekstu makra:
| Przykład | Opis |
|---|---|
{$LOW_SPACE_LIMIT} |
Makro użytkownika bez kontekstu. |
{$LOW_SPACE_LIMIT:/tmp} |
Makro użytkownika z kontekstem (ciąg statyczny). |
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} |
Makro użytkownika z kontekstem (wyrażenie regularne). To samo co {$LOW_SPACE_LIMIT:/tmp}. |
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} |
Makro użytkownika z kontekstem (wyrażenie regularne). Dopasowuje wszystkie ciągi poprzedzone prefiksem /var/log/. |
Przykłady użycia
Makra użytkownika z kontekstem można definiować w celu uzyskania bardziej elastycznych progów w wyrażeniach wyzwalaczy (na podstawie wartości pobranych przez wykrywanie niskiego poziomu). Na przykład można zdefiniować następujące makra:
- {$LOW_SPACE_LIMIT} = 10
- {$LOW_SPACE_LIMIT:/home} = 20
- {$LOW_SPACE_LIMIT:regex:"\^/[a-z]+$"} = 30
Następnie makro wykrywania niskiego poziomu może zostać użyte jako kontekst makra w prototypie wyzwalacza dla wykrywania zamontowanych systemów plików:
last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}
Po wykryciu w wyzwalaczach będą stosowane różne progi niskiej ilości wolnego miejsca w zależności od wykrytych punktów montowania lub typów systemów plików. Zdarzenia problemów będą generowane, jeśli:
- katalog /home ma mniej niż 20% wolnego miejsca na dysku
- katalogi pasujące do wzorca regexp (takie jak /etc, /tmp lub /var) mają mniej niż 30% wolnego miejsca na dysku
- katalogi, które nie pasują do wzorca regexp i nie są /home, mają mniej niż 10% wolnego miejsca na dysku
Ważne uwagi
- Jeśli istnieje więcej niż jedna makrodefinicja użytkownika z kontekstem, Zabbix najpierw spróbuje dopasować makra z prostym kontekstem, a następnie makra kontekstowe z wyrażeniami regularnymi w niezdefiniowanej kolejności.
Nie twórz różnych makr kontekstowych pasujących do tego samego ciągu, aby uniknąć niezdefiniowanego zachowania.
- Jeśli makro wraz z jego kontekstem nie zostanie znalezione na hoście, w podłączonych szablonach ani globalnie, wyszukiwane jest makro bez kontekstu.
- W kontekście obsługiwane są tylko makra wykrywania niskiego poziomu. Wszelkie inne makra są ignorowane i traktowane jako zwykły tekst.
Technicznie rzecz biorąc, kontekst makra jest określany przy użyciu reguł podobnych do parametrów klucza pozycji, z wyjątkiem tego, że kontekst makra nie jest analizowany jako kilka parametrów, jeśli zawiera znak ,:
- Kontekst makra musi być ujęty w
", jeśli kontekst zawiera znak}lub zaczyna się od znaku". Cudzysłowy wewnątrz ujętego w cudzysłów kontekstu muszą być poprzedzone znakiem ucieczki\. - Sam znak
\nie jest znakowany znakiem ucieczki, co oznacza, że niemożliwe jest użycie ujętego w cudzysłów kontekstu kończącego się znakiem\— makro {$MACRO:"a:\b\c\"} jest nieprawidłowe. - Początkowe spacje w kontekście są ignorowane, końcowe nie:
- Na przykład {$MACRO:A} jest takie samo jak {$MACRO: A}, ale nie jak {$MACRO:A }.
- Wszystkie spacje przed początkowym cudzysłowem i po końcowym cudzysłowie są ignorowane, ale wszystkie spacje wewnątrz cudzysłowów nie:
- Makra {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } oraz {$MACRO: "A" } są takie same, ale makra {$MACRO:"A"} i {$MACRO:" A "} nie są.
Wszystkie poniższe makra są równoważne, ponieważ mają ten sam kontekst: {$MACRO:A}, {$MACRO: A} oraz {$MACRO:"A"}. Stanowi to kontrast wobec kluczy pozycji, gdzie 'key[a]', 'key[ a]' oraz 'key["a"]' są semantycznie takie same, ale różnią się pod względem unikalności.