Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

1 マクロ関数

概要

マクロ関数は、macroの値をカスタマイズする機能を提供します。

マクロは、必ずしも簡単に扱えない値を解決することがあります。値が長かったり、抽出したい特定の部分文字列が
含まれていたりする場合があります。このような場合に、マクロ関数が役に立ちます。

マクロ関数の書式は:

{<macro>.<func>(<params>)}

ここで:

  • <macro> - カスタマイズするマクロ (例 {ITEM.VALUE} や {L#LDMACRO} など)です。
  • <func> - 適用する関数です。
  • <params> - カンマで区切られた関数パラメータのリストです。パラメータが '' '' (スペース) で始まる場合、 " で始まる場合、あるいは ), , を含む場合は、引用符で囲む必要があります。

例:

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

サポートされるマクロ関数

関数
説明 パラメーター サポート対象
fmtnum (<digits>)
小数点以下に表示される桁数を制御する数値の書式設定 digits - 小数点以下の桁数。 末尾のゼロは生成されません。 {ITEM.VALUE}
{ITEM.LASTVALUE}
式マクロ
fmttime (<format>,<time_shift>)
時間のフォーマット format - strftime 関数のフォーマットと互換性のある必須のフォーマット文字列

time_shift - フォーマット前の時間に適用されるタイム シフト。
-<N><time_unit> または +<N><time_unit> で開始する必要があります。
N - 加算または減算する時間単位の数。
time_unit - h (時間)、d (日)、w (週)、M (月)または y (年)
Zabbix 5.4以降、 time_shift パラメータは複数ステップの時間操作をサポートし、時間単位の先頭にシフトするために /<time_unit> を含めることができます (/d - 真夜中、/w - 初日) 曜日 (月曜日)、/M - 月の最初の日など)例:
-1w - ちょうど 7 日前
-1w/w - 前の週の月曜日
-1w/w+1d - 前週の火曜日
時間操作は優先度なしで左から右に計算されることに注意してください。 たとえば、-1M/d+1h/w((-1M/d)+1h)/w として解析されます。
{TIME}
iregsub (<pattern>,<output>)
正規表現一致 (大文字と小文字を区別しない) による部分文字列の抽出 pattern - 一致する正規表現
output - 出力オプション。 \1 - \9 プレースホルダーはグループをキャプチャするためにサポートされています。 \0 一致したテキストを返します。
{ITEM.VALUE}
{ITEM.LASTVALUE}
ローレベルディスカバリマクロ (ローレベルディスカバリルールフィルタを除く)
regsub (<pattern>,<output>)
正規表現一致(大文字と小文字を区別する)による部分文字列の抽出 pattern - 一致する正規表現
output - 出力オプション。 \1 - \9 プレースホルダーはグループをキャプチャするためにサポートされています。 \0 一致したテキストを返します。
{ITEM.VALUE}
{ITEM.LASTVALUE}
ローレベルディスカバリマクロ (ローレベルディスカバリルールフィルタを除く)

関数がサポートされている場所 で使用され、マクロ関数をサポートしていないマクロに適用されると、そのマクロは 'UNKNOWN' と評価されます。

pattern が正しい正規表現でない場合、マクロは 'UNKNOWN' と評価されます (ローレベルディスカバリマクロを除く。この場合、関数は無視され、マクロは展開されないままです)。

マクロ関数がサポートされていない場所でマクロに適用された場合、その関数は無視されます。

マクロ関数を使用してマクロ値をカスタマイズする方法を、受信値に関する以下の例で説明します:

受信値 マクロ 出力
24.3413523 {{ITEM.VALUE}.fmtnum(2)} 24.34
24.3413523 {{ITEM.VALUE}.fmtnum(0)} 24
12:36:01 {{TIME}.fmttime(%B)} October
12:36:01 {{TIME}.fmttime(%d %B,-1M/M)} 1 September
123Log line {{ITEM.VALUE}.regsub(^[0-9]+, Problem)} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} Problem ID: 123
Log line {{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} ''Problem ID: ''
MySQL crashed errno 123 {{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} '' Problem ID: MySQL_123 ''
123 Log line {{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} *UNKNOWN* (invalid regular expression)
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} customername
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} 1
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (invalid regular expression)
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} {$MACRO:"customername"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} {$MACRO:"1"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} {$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"} (invalid regular expression)
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}" "{$MACRO:\"customername\"}"
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}" "{$MACRO:\"1\"}")
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}") (invalid regular expression)
全アイテム値の表示

{ITEM.VALUE} および {ITEM.LASTVALUE} マクロが解決された時に長い値になる場合は20 文字に切り捨てられます。 これらのマクロの完全な値を表示するには、次のようなマクロ関数を使用します。

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