You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

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"のような値をBase64で"emFiYml4"にエンコードします
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 - 深夜, /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エンコードからデコードします。

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

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

例:

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

マクロ値をHTMLエンコーディングに変換します。

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

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

例:

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

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

パラメータ:

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

コメント:

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

例:

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

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

例:

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

マクロ値内の文字または部分文字列の置換。

パラメータ:

  • 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 はマッチしたテキストを返します。

コメント:

  • 正規表現にマッチしない場合、関数は空文字列を返します。
  • 関数パターンが不正な正規表現の場合、マクロは '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)

マクロ値の文字の音訳。

  • 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はサポートしていません。

例:

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

マクロ値をURLエンコードからデコードします。

例:

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

マクロ値をURLエンコーディングに変換します。

例:

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

追加例

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

{#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}マクロの長い値は、一部のフロントエンドの場所で20文字に切り捨てられます。 これらのマクロの完全な値を表示するには、以下のようなマクロ関数を使用できます。

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

詳細は、{ITEM.VALUE}および{ITEM.LASTVALUE}のマクロ詳細も参照してください。