2 ユーザーマクロ
概要
ユーザーマクロは、Zabbixでより柔軟に設定できるようにするためにサポートされています。これに加えて、サポートされているマクロが標準で用意されています。
ユーザーマクロは、グローバル、テンプレート、およびホストレベルで定義できます。これらのマクロには特別な構文があります。
{$MACRO}
Zabbixは、次の優先順位に従ってマクロを解決します。
- ホストレベルのマクロ(最初に確認されます)。
- ホストの第1レベルのテンプレート(つまり、ホストに直接リンクされたテンプレート)で定義されたマクロ。テンプレートIDでソートされます。
- ホストの第2レベルのテンプレートで定義されたマクロ。テンプレートIDでソートされます。
- ホストの第3レベルのテンプレートで定義されたマクロ。テンプレートIDでソートされます。以下同様です。
- グローバルマクロ(最後に確認されます)。
つまり、あるマクロがホストに存在しない場合、Zabbixはより深い階層のホストテンプレート内でそのマクロを探します。それでも見つからない場合は、存在すればグローバルマクロが使用されます。
同じ名前のマクロが、同じレベルの複数のリンクされたテンプレートに存在する場合、IDが最も小さいテンプレートのマクロが使用されます。そのため、複数のテンプレートに同じ名前のマクロを持たせることは設定上のリスクになります。
Zabbixがマクロを見つけられない場合、そのマクロは解決されません。
複雑な設定をより分かりやすくするため、Configurationセクション(たとえばトリガー一覧)では、マクロ(ユーザーマクロを含む)は意図的に未解決のまま残されます。
ユーザーマクロは次の場所で使用できます。
グローバルマクロとホストマクロの一般的な使用例
- グローバルマクロを複数の場所で使用し、マクロの値を変更すると、ワンクリックですべての場所に設定変更が適用されます。
- ホスト固有の属性(パスワード、ポート番号、ファイル名、正規表現など)を持つテンプレートを活用します。
グローバルマクロの追加、更新、削除はすべてのホストのインクリメンタル設定の更新を強制するため、グローバルマクロよりもホストマクロの使用を推奨します。詳細は、Passive and active agent checksを参照してください。
設定
ユーザーマクロを定義するには、Webインターフェースの該当する場所に移動します。
- グローバルマクロの場合は、Administration > Macros を開きます。
- ホストおよびテンプレートレベルのマクロの場合は、ホストまたはテンプレートのプロパティを開き、Macros タブを確認します。
ユーザーマクロには、次の属性があります。

| Parameter | Description |
|---|---|
| Macro | マクロ名。名前は中括弧で囲み、ドル記号で始める必要があります。 例: {$FRONTEND_URL}。マクロ名に使用できる文字は、A-Z(大文字のみ)、0-9、_、. です。 |
| Value | マクロの値。3種類の値タイプがサポートされています: Text(デフォルト) - プレーンテキストの値 Secret text - 値はアスタリスクでマスクされます Vault secret - 値には vault secret へのパス/クエリが含まれます。 値タイプを変更するには、値入力欄の末尾にあるボタンをクリックします。 ユーザーマクロ値の最大長は 2048 文字です。 |
| Description | このマクロに関する追加情報を入力するためのテキストフィールドです。 |
ユーザーマクロを設定する際は、コンテキストに応じて次の動作に注意してください。
- ユーザーマクロがテンプレートのアイテムやトリガーで使用される場合は、それらのマクロをテンプレートにも追加することを検討してください(グローバルに定義されている場合でも同様です)。そうすることで、Text タイプのマクロは、テンプレートを XML にエクスポートして別のシステムにインポートした後でも、期待どおりに動作します(secret macro の値は exported されません)
- ユーザーマクロがトリガー式で使用される場合、それらのマクロはパラメーターまたは定数を参照している場合にのみ解決されます。ホスト、アイテムキー、関数、演算子、または別のトリガー式を参照している場合は解決されません(secret macro はトリガー式では使用できません)
- ユーザーマクロが、ホストプロトタイプを含む low-level discovery ルールを持つホストで使用されている場合、discovered hosts はそのホストで定義されたすべてのユーザーマクロを継承します
例
例 1
"Status of SSH daemon" item キーにホストレベルマクロを使用する。
net.tcp.service[ssh,,{$SSH_PORT}]
この項目は、複数のホストで {$SSH_PORT} の値が定義されている場合に、複数のホストに割り当てることができます。
例 2
"CPU load is too high" トリガー でのホストレベルマクロの使用:
last(/ca_001/system.cpu.load[,avg1])>{$MAX_CPULOAD}
このようなトリガーは、個々のホストで編集するのではなく、テンプレート上で作成されることになります。
値の量を関数のパラメーターとして使用する場合(例えば, max(/host/key,#3)),
SOME_PERIOD => #3
というようにマクロ定義にハッシュ記号を入れてください。
例 3
"CPU load is too high" トリガーで2つのマクロを使用する:
min(/ca_001/system.cpu.load[,avg1],{$CPULOAD_PERIOD})>{$MAX_CPULOAD}
マクロはトリガー関数(この例では関数min())のパラメータとして使用することができることに注意。
例 4
agent の利用不可条件と item の更新間隔を同期させる。:
- {INTERVAL} マクロを定義し、item の更新間隔に使用する。
- {INTERVAL} を agent 使用不可トリガーのパラメータとして使用する。
nodata(/ca_001/agent.ping,{$INTERVAL})=1
例 5
稼働時間の設定を一元管理します:
- グローバルな {$WORKING_HOURS} マクロを
1-5,09:00-18:00に設定する; - Administration > General > GUI の Working time フィールドで使用する;
- Users > Users のユーザーの Media タブにある When active フィールドで使用する;
- 稼働時間中により頻繁なアイテム監視を設定するために使用する:

- Time period のアクション条件で使用する;
- 必要に応じて、Administration > Macros で稼働時間を調整する。
例 6
ホストプロトタイプマクロを使用して、検出されたホストの item を設定します:
ホストプロトタイプで、{$SNMPVALUE} を {#SNMPVALUE}low-level discovery マクロ値として定義します:

- ホストプロトタイプに Generic SNMPv2 テンプレートを割り当てます。
- {SNMPVALUE} を使用します。汎用SNMPv2テンプレート項目の SNMP OID* フィールドに {$SNMPVALUE} を使用します。
ユーザーマクロのコンテキスト
user macros with context を参照してください。