3 Benutzermakros mit Kontext
Übersicht
Ein optionaler Kontext kann in Benutzer- Makros 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 Anführungszeichen für den Kontext sind optional (siehe auch wichtige Hinweise).
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/. |
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
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.
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 ä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.