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つのみであり、複数のマクロ関数を連結して使用することはできません。

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

サポートされている関数

関数は追加情報なしで一覧表示されています。
関数をクリックすると、詳細を確認できます。

Function Description
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エンコードします
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 - 週の1日目(月曜日)、/M - 月の1日目、など)。 例: -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エンコードからデコードします。

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

Value デコード後の値
&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 は一致したテキストを返します。

コメント:

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

例:

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

マクロ値のすべての文字を小文字に変換します。
シングルバイト文字セット(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 は一致したテキストを返します。

コメント:

  • 正規表現に一致しない場合、この関数は空文字列を返します。
  • 関数の 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)

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

  • 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" を改行に置換します

リテラル文字を含めるには:

backslash - \\ としてエスケープする必要があります
single quote - \' としてエスケープする必要があります
double quote - \" としてエスケープする必要があります

バックスラッシュで使用できるエスケープシーケンス:

\\\\ => \\ - 二重バックスラッシュを単一のバックスラッシュに
\\a  => \a - アラート
\\b  => \b - バックスペース
\\f  => \f - 改ページ
\\n  => \n - 改行
\\r  => \r - 復帰
\\t  => \t - 水平タブ
\\v  => \v - 垂直タブ
大文字

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

例:

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

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

例:

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

マクロ値をURLエンコード形式にエンコードします。

例:

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

追加の例

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

:::noteinfo {#IFALIAS}LLD macros であり、低レベルディスカバリのコンテキスト(ディスカバリルール、プロトタイプ、およびそれらから作成されたアイテム/トリガー)でのみ定義されます。
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} の macro details