3 Gebruikersmacro's met context

Overzicht

Een optionele context kan worden gebruikt in gebruikersmacro's, waardoor de standaardwaarde kan worden overschreven door een contextspecifieke waarde.

De context wordt toegevoegd aan de naam van de macro; de syntaxis hangt af van of de context een statische tekstwaarde is:

{$MACRO:"statische tekst"}

of een reguliere expressie:

{$MACRO:regex:"reguliere expressie"} 

Merk op dat een macro met een context van reguliere expressie alleen kan worden gedefinieerd in de configuratie van gebruikersmacro's. Als het voorvoegsel regex: ergens anders wordt gebruikt als gebruikersmacro-context, zoals in een triggervoorwaarde, wordt het behandeld als een statische context.

Het aanhalen van de context is optioneel (zie ook belangrijke opmerkingen).

Voorbeelden van macrocontext:

Voorbeeld Beschrijving
{$LOW_SPACE_LIMIT} Gebruikersmacro zonder context.
{$LOW_SPACE_LIMIT:/tmp} Gebruikersmacro met context (statische string).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Gebruikersmacro met context (reguliere expressie). Hetzelfde als {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Gebruikersmacro met context (reguliere expressie). Komt overeen met alle strings die beginnen met /var/log/.

Gebruiksscenario's

Gebruikersmacro's met context kunnen worden gedefinieerd om flexibelere drempelwaarden in triggerevaluaties te bereiken (gebaseerd op de waarden die zijn opgehaald door laagniveaudetectie). Bijvoorbeeld, u kunt de volgende macro's definiëren:

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

Vervolgens kan een macro voor laagniveaudetectie worden gebruikt als macrocontext in een triggervoorbeeld voor de detectie van gemonteerde bestandssystemen:

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

Na de detectie zullen verschillende lage-diskruimte-drempels van toepassing zijn in triggerevaluaties, afhankelijk van de gedetecteerde koppelingspunten of bestandssysteemtypes. Probleemgebeurtenissen worden gegenereerd als:

  • de /home-map minder dan 20% vrije schijfruimte heeft
  • mappen die overeenkomen met het regex-patroon (zoals /etc, /tmp of /var) minder dan 30% vrije schijfruimte hebben
  • mappen die niet overeenkomen met het regex-patroon en niet /home zijn, hebben minder dan 10% vrije schijfruimte

Belangrijke opmerkingen

  • Als er meer dan één gebruikersmacro met context bestaat, zal Zabbix eerst proberen om de eenvoudige contextmacro's te matchen en daarna contextmacro's met reguliere expressies in een ongedefinieerde volgorde.

Maak geen verschillende contextmacro's die overeenkomen met dezelfde tekenreeks om ongedefinieerd gedrag te voorkomen.

  • Als een macro met zijn context niet wordt gevonden op een host, gekoppelde sjablonen of wereldwijd, wordt gezocht naar de macro zonder context.
  • Alleen laag-niveau ontdekkingsmacro's worden ondersteund in de context. Andere macro's worden genegeerd en behandeld als platte tekst.

Technisch gezien wordt macrocontext gespecificeerd met regels die vergelijkbaar zijn met de parameters van item sleutels, behalve dat macrocontext niet wordt geparseerd als meerdere parameters als er een ,-teken is:

  • Macrocontext moet worden geciteerd met " als de context een }-teken bevat of begint met een "-teken. Aanhalingstekens binnen geciteerde context moeten worden ontsnapt met het \-teken.
  • Het \-teken zelf wordt niet ontsnapt, wat betekent dat het onmogelijk is om een geciteerde context te hebben die eindigt met het \-teken - de macro {$MACRO:"a:\b\c\"} is ongeldig.
  • De voorloopspaties in de context worden genegeerd, de achterloopspaties niet:
    • Bijvoorbeeld {$MACRO:A} is hetzelfde als {$MACRO: A}, maar niet {$MACRO:A }.
  • Alle spaties voor aanhalingstekens aan het begin en na aanhalingstekens aan het einde worden genegeerd, maar alle spaties binnen aanhalingstekens niet:
    • Macro's {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } en {$MACRO: "A" } zijn hetzelfde, maar macro's {$MACRO:"A"} en {$MACRO:" A "} zijn dat niet.

De volgende macro's zijn allemaal gelijkwaardig, omdat ze dezelfde context hebben: {$MACRO:A}, {$MACRO: A} en {$MACRO:"A"}. Dit staat in contrast met itemsleutels, waar 'key[a]', 'key[ a]' en 'key["a"]' semantisch hetzelfde zijn, maar verschillend voor het doel van uniciteit.