[comment]: # ({73d3f62e-73d3f62e})
# 3 コンテキストユーザーマクロ

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

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

オプションのコンテキストは、[ユーザーマクロ](/manual/config/macros/user_macros)で使用でき、デフォルト値をコンテキスト固有の値で上書きできます。

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

    {$MACRO:"static text"}

または、正規表現の場合:

    {$MACRO:regex:"regular expression"} 

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

コンテキストの引用符は省略可能です（[重要な注意事項](#important-notes)も参照）。

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

|例|説明|
|-------|-----------|
|`{$LOW_SPACE_LIMIT}`|コンテキストなしのユーザーマクロ。|
|`{$LOW_SPACE_LIMIT:/tmp}`|コンテキストありのユーザーマクロ（静的文字列）。|
|`{$LOW_SPACE_LIMIT:regex:"^/tmp$"}`|コンテキストありのユーザーマクロ（正規表現）。`{$LOW_SPACE_LIMIT:/tmp}` と同じです。|
|`{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"}`|コンテキストありのユーザーマクロ（正規表現）。/var/log/ で始まるすべての文字列に一致します。|

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

[comment]: # ({2a65d6fe-d403a5a0})
#### ユースケース

コンテキストを持つユーザーマクロを定義して、トリガー式で(ローレベルディスカバリによって取得された値に基づく)より柔軟なしきい値を実現できます。たとえば、次のマクロを定義できます。

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

次に、ローレベルディスカバリマクロを、マウントされたファイルシステムディスカバリのトリガープロトタイプでマクロコンテキストとして使用できます:

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

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

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

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

[comment]: # ({4d28ca51-4d28ca51})
#### 重要事項

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

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

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

技術的には、マクロ コンテキストは [item key](/manual/config/items/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"\]' が意味的に同じである項目キーとは対照的ですが、一意性のために異なります。

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