[comment]: # translation:outdated

[comment]: # ({73d3f62e-73d3f62e})
# 3 Makra użytkownika z kontekstem

[comment]: # ({/73d3f62e-73d3f62e})

[comment]: # ({d01ca156-4232eb11})
#### Przegląd

Opcjonalny kontekst może być używany w [makrach
użytkownika](/manual/config/macros/user_macros), umożliwiając zastąpienie
wartości domyślnej 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
tylko w konfiguracji makr użytkownika. Jeśli prefiks `regex:` zostanie użyty
gdzie indziej 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](#important-notes)).

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 rozpoczynające się od /var/log/.|

[comment]: # ({/d01ca156-4232eb11})

[comment]: # ({2a65d6fe-d403a5a0})
#### 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

[comment]: # ({/2a65d6fe-d403a5a0})

[comment]: # ({4d28ca51-4d28ca51})
#### 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.

::: notewarning
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](/manual/config/items/item/key), 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.

[comment]: # ({/4d28ca51-4d28ca51})
