1 マクロ関数

概要

マクロ関数を使用すると、マクロの値をカスタマイズできます(たとえば、特定の部分文字列を短縮したり抽出したりできます)。これにより、より扱いやすくなります。

マクロ関数の構文は次のとおりです。

{macro.func(params)}

ここで

  • macro - カスタマイズするマクロ。
  • func - 適用する関数(サポートされている関数を参照)。
  • params - 関数パラメータのカンマ区切りリスト。次の場合は二重引用符で囲む必要があります。
    • 先頭がスペースまたは二重引用符である場合。
    • 閉じ括弧またはカンマを含む場合。

例:

{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}

マクロ関数は次でサポートされています。

マクロ関数は、上記のマクロがサポートされているすべての場所で使用できます。
ただし、明示的にマクロのみが想定されている場合は除きます(たとえば、ホストマクロまたはローレベルディスカバリルールのフィルターを設定する場合)。

参照: 既知の問題

1 つのマクロにつき 1 つの関数のみサポートされます。複数のマクロ関数を連結して使用することはできません。

マクロ関数を他のコンテキスト(関数、アイテムキー、別のマクロなど)の中で使用する場合については、エスケープの例を参照してください。

サポートされている関数

関数は追加情報なしでリストされています。 関数をクリックすると詳細が表示されます。

関数 説明
btoa マクロ値をBase64形式にエンコードします。
fmtnum 小数点以下の桁数を制御するための数値フォーマットです。
fmttime 時刻フォーマットです。
htmldecode マクロ値をHTMLエンコードからデコードします。
htmlencode マクロ値をHTMLエンコードにエンコードします。
iregsub 正規表現マッチングによる部分文字列抽出(大文字と小文字を区別しません)。
lowercase マクロ値の文字を小文字に変換します。
regrepl マクロ値内の文字/部分文字列を置換します。
regsub 正規表現マッチングによる部分文字列の抽出(大文字と小文字を区別します)。
tr マクロ値の文字を変換します。
uppercase マクロ値の文字を大文字に変換します。
urldecode URLエンコードからマクロ値をデコードします。
urlencode マクロ値をURLエンコードにエンコードします。

関数の詳細

オプションの関数パラメータは < > で示されます。

btoa

マクロ値をBase64エンコーディングに変換します。
Base64エンコーディングは、バイナリデータをテキストとして表現する方法であり、テキストベースのプロトコル上でバイナリコンテンツを保存したり、安全に送信したりする際に役立ちます。

例:

{{ITEM.VALUE}.btoa()} - "zabbix" のような値を "emFiYml4" にBase64エンコードします

この関数は、Zabbix 7.0.4 以降でサポートされています。

fmtnum(digits)

小数点以下に表示する桁数を制御するための数値書式設定です。

パラメータ:

  • digits - 小数点以下の桁数。 有効範囲: 0~20。 末尾のゼロは出力されません。

例:

{{ITEM.VALUE}.fmtnum(2)} - 受信した値 "24.3483523" から "24.35" を返します
{{ITEM.VALUE}.fmtnum(0)} - 受信した値 "24.3483523" から "24" を返します
fmttime(format,<time_shift>)

時刻のフォーマット。
この関数は、以下のいずれかの時刻形式の値を返すマクロで使用できます。

  • hh:mm:ss
  • yyyy-mm-ddThh:mm:ss[tz] (ISO8601 標準)
  • UNIX タイムスタンプ

パラメーター:

  • format - 必須のフォーマット文字列。strftime 関数のフォーマットと互換性があります。
  • time_shift (オプション) - フォーマット前の時刻に適用する時間シフト。-<N><time_unit> または +<N><time_unit> で始まる必要があります。
  • N - 加算または減算する時間単位の数。
  • time_unit - h(時)、d(日)、w(週)、M(月)、またはy(年)

コメント:

  • time_shift パラメータは複数段階の時間演算をサポートし、時間単位の先頭にシフトするための /<time_unit> を含めることができます。 (/d - 午前0時、/w - 週の初日(月曜日)、/M - 月の初日 など)。 例:-1w - ちょうど7日前、-1w/w - 先週の月曜日、-1w/w+1d - 先週の火曜日。
  • 時間演算は優先順位なしに左から右へ計算されます。 例えば、-1M/d+1h/w((-1M/d)+1h)/w と解釈されます。

例:

{{TIME}.fmttime(%B)} - 受信した値"1633098961"から"October"を返します。
{{TIME}.fmttime(%d %B,-1M/M)} - 受信した値"1633098961"から"1 September"を返します。
htmldecode

マクロ値をHTMLエンコーディングからデコードします。
この関数は Zabbix 7.0.4 以降でサポートされています。

以下の文字がサポートされています。

Value デコード後の値
&amp; &
&lt; <
&gt; >
&quot; "
&#039; '
&#39; '

例:

{{ITEM.VALUE}.htmldecode()} - "&lt;" のような値を "<" にHTMLデコードします
htmlencode

マクロ値をHTMLエンコードに変換します。
この関数は Zabbix 7.0.4 以降でサポートされています。

以下の文字がサポートされています。

エンコード後の値
& &amp;
< &lt;
> &gt;
" &quot;
' &#39;

例:

{{ITEM.VALUE}.htmlencode()} - "<" のような文字を "&lt;" にHTMLエンコードします
iregsub(pattern,output)

正規表現の一致による部分文字列の抽出(大文字・小文字を区別しない)。

パラメータ:

  • pattern - 一致させる正規表現;
  • output - 出力オプション。 \1 - \9 プレースホルダーはキャプチャグループに対応しています。 \0 は一致したテキストを返します。

コメント:

  • 正規表現に一致しない場合、この関数は空文字列を返します。
  • 関数の pattern が不正な正規表現である場合、マクロは 'UNKNOWN' と評価されます(ただし、ローレベルディスカバリマクロは例外で、この場合は関数は無視され、マクロは未解決のままになります)。
  • 置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - "fail"、"error"、"fault"、または "problem" の部分文字列を受信した場合(大文字・小文字を区別しない)は "ERROR" に解決されます。一致しない場合は空文字列を返します
lowercase

マクロ値のすべての文字を小文字に変換します。
シングルバイト文字セット(ASCII など)で動作し、UTF-8 はサポートしていません。
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

{{ITEM.VALUE}.lowercase()} - "Zabbix SERVER" のような値を "zabbix server"(小文字)に変換します
regrepl(pattern,replacement,<pattern2>,<replacement2>,...)

マクロ値内の文字/部分文字列の置換。
この関数は libpcre2 ライブラリでのみサポートされることに注意してください。
Zabbixサーバー/プロキシが libpcre でコンパイルされている場合、この関数は UNKNOWN を返します。
この関数は Zabbix 7.0.4 以降でサポートされています。

パラメータ:

  • pattern - 一致させる正規表現;
  • replacement - 置換文字列。
    \1 - \9 プレースホルダーは、キャプチャグループを参照するために置換文字列内でサポートされています。

コメント:

  • パターンと置換は順番に処理され、後続の各ペアは前の置換結果に従って適用されます;
  • 置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - "oldParam" を "newParam" に置き換えます
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - 英字以外のすべての文字はバックスラッシュでエスケープされます
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - 末尾のバックスラッシュを削除します(たとえば "C:\" を "C:" に置き換える場合)
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - アイテム値内の複数の部分を置き換えます
regsub(pattern,output)

正規表現の一致による部分文字列の抽出(大文字・小文字を区別)。

パラメータ:

  • pattern - 一致させる正規表現。
  • output - 出力オプション。 \1 - \9 プレースホルダーはキャプチャグループに対応しています。 \0 は一致したテキストを返します。

コメント:

  • 正規表現に一致しない場合、この関数は空文字列を返します。
  • 関数の pattern が不正な正規表現である場合、マクロは 'UNKNOWN' と評価されます(ただし、ローレベルディスカバリのマクロは例外で、この場合は関数は無視され、マクロは未解決のままになります)。
  • 置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - "123 Log line" のような値を受信した場合は "Problem ID: 123" に展開されます
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - "fail"、"error"、"fault"、または "problem" の部分文字列を受信した場合は "ERROR" に展開されます(大文字・小文字を区別)。一致しない場合は空文字列を返します

その他の例も参照してください。

tr(characters,replacement)

マクロ値の文字を変換します。

この関数はZabbix 7.0.4以降でサポートされています。

  • characters - 置換する文字セット。
  • replacement - 位置的に対応する置換文字セット。

例:

{{ITEM.VALUE}.tr(abc, xyz)} - すべての"a"を"x"、"b"を"y"、"c"を"z"に置き換えます。
{{ITEM.VALUE}.tr(abc, xyzq)} - すべての"a"を"x"、"b"を"y"、"c"を"z"に置き換えます("q"は無視されます)
{{ITEM.VALUE}.tr(abcde, xyz)} - すべての"a"を"x"、"b"を"y"、"c"を"z"、"d"を"z"、"e"を"z"に置き換えます(つまり、xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - すべてのバックスラッシュをスラッシュに、シングルクォーテーションをダブルクォーテーションに置き換えます。
{{ITEM.VALUE}.tr(A-Z,a-z)} - すべての文字を小文字に変換します。
{{ITEM.VALUE}.tr(0-9a-z,*)} - すべての数字と小文字を"*"に置き換えます。
{{ITEM.VALUE}.tr(0-9,ab)} - すべての0を"a"に置き換え、すべての1、2、3、4、5、6、7、8、9を"b"に置き換えます。
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - すべての数字、文字の"abc"およびA~Lの範囲を"*"に置き換えます。
{{ITEM.VALUE}.tr("\n","*")} - 改行文字を"*"に置き換えます。
{{ITEM.VALUE}.tr("e", "\n")} - すべての"e"を改行文字に置き換えます。

リテラル文字を含める場合:

バックスラッシュ - \\ としてエスケープする必要があります。
シングルクォーテーション - \' としてエスケープする必要があります。
ダブルクォーテーション - \" としてエスケープする必要があります。

バックスラッシュでサポートされているエスケープシーケンス:

\\\\ => \\ - 二重のバックスラッシュを単一のバックスラッシュに変換
\\a => \a - アラート
\\b => \b - バックスペース
\\f => \f - フォームフィード
\\n => \n - 改行
\\r => \r - リターン
\\t => \t - 水平タブ
\\v => \v - 垂直タブ
uppercase

マクロ値のすべての文字を大文字に変換します。
この関数は、単一バイト文字セット(ASCII など)で動作し、UTF-8 はサポートしていません。
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

{{ITEM.VALUE}.uppercase()} - "Zabbix Server" のような値を "ZABBIX SERVER"(大文字)に変換します
urldecode

URLエンコードされたマクロ値をデコードします。
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

{{ITEM.VALUE}.urldecode()} - 「%2F」のような値をURLデコードして「/」にします
urlencode

マクロ値をURLエンコード形式にエンコードします。
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

{{ITEM.VALUE}.urlencode()} - "/" のような文字を "%2F" にURLエンコードします

追加の例

以下の表は、マクロ関数の使用例をさらに示しています。

:::noteinfo {#IFALIAS}LLDマクロ であり、低レベルディスカバリのコンテキスト(ディスカバリルール、プロトタイプ、およびそれらから作成されたアイテム/トリガー)でのみ定義されます。
LLD の外部でこれを使用すると、トークンは展開されません。 :::

マクロ関数 受信した値 出力
{{ITEM.VALUE}.regsub(^[0-9]+, Problem)} 123Log line Problem
{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} 123 Log line Problem
{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} Log line Problem ID:
{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} MySQL crashed errno 123 Problem ID: MySQL_123 
{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} 123 Log line *UNKNOWN*(無効な正規表現)
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} customername_1 customername
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} customername_1 1
{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (無効な正規表現)
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} customername_1 {$MACRO:"customername"}
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} customername_1 {$MACRO:"1"}
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} (無効な正規表現)
"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}\"}" customername_1 "{$MACRO:"\customername\"}"
"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}\"}" customername_1 "{$MACRO:"\1\"}"
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" (無効な正規表現)
アイテム値全体を表示する

テキスト/ログアイテムに対して解決された {ITEM.VALUE} および {ITEM.LASTVALUE} マクロの長い値は、一部のWebインターフェース上の場所では 20 文字に切り詰められます。
これらのマクロの完全な値を表示するには、たとえば次のようにマクロ関数を使用できます。

{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}

参照: {ITEM.VALUE} および {ITEM.LASTVALUE} の マクロの詳細