3 コンテキストユーザーマクロ

概要

user macros では、任意のコンテキストを使用して、デフォルト値をコンテキスト固有の値で上書きできます。

コンテキストはマクロ名の後ろに付加されます。構文は、コンテキストが静的なテキスト値かどうかによって異なります。

{$MACRO:"static text"}

または正規表現の場合:

{$MACRO:regex:"regular expression"} 

正規表現コンテキストを持つマクロは、ユーザーマクロの設定でのみ定義できることに注意してください。regex: プレフィックスがトリガー式など、他の場所でユーザーマクロのコンテキストとして使用される場合は、静的コンテキストとして扱われます。

コンテキストの引用符は省略可能です(重要な注意事項も参照してください)。

マクロコンテキストの例:

Example Description
{$LOW_SPACE_LIMIT} コンテキストなしのユーザーマクロ。
{$LOW_SPACE_LIMIT:/tmp} コンテキスト付きのユーザーマクロ(静的文字列)。
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} コンテキスト付きのユーザーマクロ(正規表現)。{$LOW_SPACE_LIMIT:/tmp} と同じです。
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} コンテキスト付きのユーザーマクロ(正規表現)。/var/log/ で始まるすべての文字列に一致します。

ユースケース

コンテキスト付きのユーザーマクロを定義すると、トリガー式でより柔軟なしきい値を実現できます(low-level discovery によって取得された値に基づく)。たとえば、次のマクロを定義できます。

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

このとき、マウント済みファイルシステムの discovery 用トリガープロトタイプで、low-level discovery マクロをマクロコンテキストとして使用できます。

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

discovery の後は、検出されたマウントポイントやファイルシステムの種類に応じて、トリガーに異なる低空き容量のしきい値が適用されます。障害イベントは、次の場合に生成されます。

  • /home フォルダの空きディスク容量が 20% 未満
  • 正規表現パターンに一致するフォルダ(/etc、/tmp、/var など)の空きディスク容量が 30% 未満
  • 正規表現パターンに一致せず、かつ /home でもないフォルダの空きディスク容量が 10% 未満

重要事項

  • コンテキストを持つ複数のユーザー マクロが存在する場合、Zabbix は最初に単純なコンテキスト マクロを照合し、次にコンテキスト マクロを未定義の順序で正規表現と照合しようとします。

未定義の動作を避けるために、同じ文字列に一致する別のコンテキスト マクロを作成しないでください。

  • コンテキストを持つマクロがホスト、リンクされたテンプレート、またはグローバルで見つからない場合、コンテキストのないマクロが検索されます。
  • コンテキストでは、ローレベルディスカバリマクロのみがサポートされています。 その他のマクロはすべて無視され、プレーン テキストとして扱われます。

技術的には、マクロ コンテキストは item key パラメータと同様のルールを使用して指定されますが、, 文字がある場合、マクロ コンテキストは複数のパラメータとして解析されません。

  • コンテキストに } 文字が含まれている場合、または " 文字で始まる場合、マクロ コンテキストは " で引用する必要があります。 引用されたコンテキスト内の引用符は、\ 文字でエスケープする必要があります。
  • \ 文字自体はエスケープされません。つまり、\ 文字で終わる引用符付きコンテキストを持つことは不可能です - マクロ {$MACRO:"a:\b\c\"} は無効です。
  • コンテキスト内の先頭のスペースは無視されますが、末尾のスペースは無視されます:
    • たとえば、{$MACRO:A} は {$MACRO: A} と同じですが、{$MACRO:A } とは異なります。
  • 先頭の引用符の前と末尾の引用符の後のすべてのスペースは無視されますが、引用符内のすべてのスペースは無視されません。
    • マクロ {$MACRO:"A"}、{$MACRO: "A"}、{$MACRO:"A" }、および {$MACRO: "A" } は同じですが、マクロ {$MACRO:"A"} および {$MACRO:" A "} ではありません。

{$MACRO:A}、{$MACRO: A}、および {$MACRO:"A"} のマクロは、同じコンテキストを持っているため、すべて同等です。 これは、'key[a]'、'key[ a]'、および 'key["a"]' が意味的に同じである項目キーとは対照的ですが、一意性のために異なります。