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.