#3 Gebruikersmacro's met context

Overzicht

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

De context wordt toegevoegd aan de macronaam; 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 gebruikersmacronconfiguratie. Als het voorvoegsel regex: elders wordt gebruikt als context voor gebruikersmacro, bijvoorbeeld in een triggerevaluatie, wordt het behandeld als een statische context.

Het aanhalingsteken voor 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 aantekeningen

  • Als er meer dan één gebruikersmacro met context bestaat, zal Zabbix eerst proberen om overeenkomende eenvoudige contextmacro's te vinden en vervolgens 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 templates of wereldwijd, wordt er gezocht naar de macro zonder context.
  • Alleen macro's voor laagniveaudetectie worden ondersteund in de context. Alle andere macro's worden genegeerd en behandeld als gewone tekst.

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

  • Macrocontext moet tussen aanhalingstekens (") worden geplaatst als de context het teken } bevat of begint met een teken ". Aanhalingstekens binnen de geciteerde context moeten worden voorafgegaan door 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 en na aanhalingstekens worden genegeerd, maar alle spaties binnen aanhalingstekens niet:
    • Macros {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } en {$MACRO: "A" } zijn hetzelfde, maar macros {$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 in tegenstelling tot item sleutels, waarbij 'sleutel[a]', 'sleutel[ a]' en 'sleutel["a"]' semantisch hetzelfde zijn, maar verschillend zijn voor doeleinden van uniciteit.