[comment]: # translation:outdated

[comment]: # ({73d3f62e-73d3f62e})
# 3 Benutzermakros mit Kontext

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

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

Ein optionaler Kontext kann in [Benutzer-
Makros](/manual/config/macros/user_macros) verwendet werden, sodass der
Standardwert durch einen kontextspezifischen Wert überschrieben werden kann.

Der Kontext wird an den Makronamen angehängt; die Syntax hängt davon ab,
ob der Kontext ein statischer Textwert ist:

    {$MACRO:"static text"}

oder ein regulärer Ausdruck:

    {$MACRO:regex:"regular expression"} 

Beachten Sie, dass ein Makro mit Kontext als regulärer Ausdruck nur in
der Konfiguration von Benutzermakros definiert werden kann. Wenn das Präfix
`regex:` an anderer Stelle als Kontext für ein Benutzermakro verwendet wird,
wie z. B. in einem Auslöser-Ausdruck, wird es als statischer Kontext behandelt.

Die Kontextangabe in Anführungszeichen ist optional (siehe auch [wichtige
Hinweise](#important-notes)).

Beispiele für Makrokontexte:

|Beispiel|Beschreibung|
|-------|-----------|
|`{$LOW_SPACE_LIMIT}`|Benutzermakro ohne Kontext.|
|`{$LOW_SPACE_LIMIT:/tmp}`|Benutzermakro mit Kontext (statische Zeichenfolge).|
|`{$LOW_SPACE_LIMIT:regex:"^/tmp$"}`|Benutzermakro mit Kontext (regulärer Ausdruck). Entspricht `{$LOW_SPACE_LIMIT:/tmp}`.|
|`{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"}`|Benutzermakro mit Kontext (regulärer Ausdruck). Entspricht allen Zeichenfolgen mit dem Präfix /var/log/.|

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

[comment]: # ({2a65d6fe-d403a5a0})
#### Anwendungsfälle

Benutzermakros mit Kontext können definiert werden, um flexiblere
Schwellenwerte in Auslöserausdrücken zu ermöglichen (basierend auf den Werten, die durch
Low-Level-Discovery abgerufen werden). Zum Beispiel können Sie die folgenden Makros definieren:

-   {$LOW\_SPACE\_LIMIT} = 10
-   {$LOW\_SPACE\_LIMIT:/home} = 20
-   {$LOW\_SPACE\_LIMIT:regex:"\^/\[a-z\]+$"} = 30

Dann kann ein Low-Level-Discovery-Makro als Makrokontext in einem
Auslöserprototyp für die Discovery eingehängter Dateisysteme verwendet werden:

    last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

Nach der Discovery gelten in
Auslösern unterschiedliche Schwellenwerte für wenig freien Speicherplatz, abhängig von den erkannten Einhängepunkten oder Dateisystemtypen.
Problemereignisse werden erzeugt, wenn:

-   der Ordner /home weniger als 20 % freien Festplattenspeicher hat
-   Ordner, die dem Regexp-Muster entsprechen (wie /etc, /tmp oder /var),
    weniger als 30 % freien Festplattenspeicher haben
-   Ordner, die dem Regexp-Muster nicht entsprechen und nicht /home sind,
    weniger als 10 % freien Festplattenspeicher haben

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

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

-   Wenn mehr als ein Benutzermakro mit Kontext vorhanden ist, versucht Zabbix zunächst, die Makros mit einfachem Kontext abzugleichen, und danach die Kontextmakros mit regulären Ausdrücken in einer nicht definierten Reihenfolge.

::: notewarning
Erstellen Sie keine unterschiedlichen Kontextmakros, die
mit derselben Zeichenfolge übereinstimmen, um undefiniertes Verhalten zu vermeiden.
:::

-   Wenn ein Makro mit seinem Kontext weder auf dem Host, in verknüpften Vorlagen noch global gefunden wird, wird nach dem Makro ohne Kontext gesucht.
-   Im Kontext werden nur Low-Level-Discovery-Makros unterstützt. Alle anderen Makros werden ignoriert und als Klartext behandelt.

Technisch wird der Makrokontext mit Regeln angegeben, die den Parametern des [Datenpunkt-Schlüssels](/manual/config/items/item/key) ähneln, mit der Ausnahme, dass der Makrokontext nicht als mehrere Parameter geparst wird, wenn ein `,`-Zeichen vorhanden ist:

-   Der Makrokontext muss mit `"` in Anführungszeichen gesetzt werden, wenn der Kontext ein `}`-Zeichen enthält oder mit einem `"`-Zeichen beginnt. Anführungszeichen innerhalb eines in Anführungszeichen gesetzten Kontexts müssen mit dem Zeichen `\` maskiert werden.
-   Das Zeichen `\` selbst wird nicht maskiert, was bedeutet, dass es unmöglich ist, einen in Anführungszeichen gesetzten Kontext zu haben, der mit dem Zeichen `\` endet - das Makro {$MACRO:"a:\\b\\c\\"} ist ungültig.
-   Führende Leerzeichen im Kontext werden ignoriert, nachfolgende Leerzeichen jedoch nicht:
    -   Zum Beispiel ist {$MACRO:A} dasselbe wie {$MACRO: A}, aber nicht
        {$MACRO:A }.
-   Alle Leerzeichen vor führenden Anführungszeichen und nach schließenden Anführungszeichen werden ignoriert, alle Leerzeichen innerhalb der Anführungszeichen jedoch nicht:
    -   Die Makros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } und {$MACRO:
        "A" } sind gleich, aber die Makros {$MACRO:"A"} und {$MACRO:" A "}
        sind es nicht.

Die folgenden Makros sind alle äquivalent, da sie denselben
Kontext haben: {$MACRO:A}, {$MACRO: A} und {$MACRO:"A"}. Dies steht im Gegensatz
zu Datenpunkt-Schlüsseln, bei denen 'key\[a\]', 'key\[ a\]' und 'key\["a"\]' semantisch gleich sind, sich jedoch im Hinblick auf die Eindeutigkeit unterscheiden.

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