3 トリガーの式
概要
このページでは、トリガー式の構文と評価の詳細について説明します。
単純な式の構文は次のとおりです。
function(/host/item,time_period)<operator><constant>
この式では、演算子の左側の最初のオペランドは、括弧内にパラメータ(通常はデータアイテムと期間)を持つ関数です。
関数は、設定された期間中に受信したデータを分析するために使用され、計算値が得られます。
この値は、演算子を使用して2番目のオペランドと比較されます。この例では2番目のオペランドは定数ですが、別の関数にすることもできます。
例:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
このトリガーは、過去5分間にeth0で受信したバイト数が常に100キロバイトを超えていた場合に発生します。この場合、式は真となり、障害が作成されます。
トリガー式は非常に柔軟です。より複雑な式では、複数の関数、演算子、定数を組み合わせることができます。
関連情報:
- トリガーの例
- トリガーによる障害検知(一般的な紹介)
関数
関数を使用すると、収集した値を分析できます。たとえば、平均値を計算したり、特定の文字列を検索したりできます。
詳細については、該当する関数グループをクリックしてください。
| 関数グループ | < | 関数 | |
|---|---|---|---|
| 集計関数 | < | avg, bucket_percentile, count, histogram_quantile, item_count, kurtosis, mad, max, min, skewness, stddevpop, stddevsamp, sum, sumofsquares, varpop, varsamp | |
| Foreach関数 | avg_foreach, bucket_rate_foreach, count_foreach, exists_foreach, last_foreach, max_foreach, min_foreach, sum_foreach | ||
| ビット演算関数 | < | bitand, bitlshift, bitnot, bitor, bitrshift, bitxor | |
| 日付・時刻関数 | < | date, dayofmonth, dayofweek, now, time | |
| 履歴関数 | < | change, changecount, count, countunique, find, first, firstclock, fuzzytime, last, lastclock, logeventid, logseverity, logsource, logtimestamp, monodec, monoinc, nodata, percentile, rate | |
| トレンド関数 | < | baselinedev, baselinewma, trendavg, trendcount, trendmax, trendmin, trendstl, trendsum | |
| 数学関数 | < | abs, acos, asin, atan, atan2, avg, cbrt, ceil, cos, cosh, cot, degrees, e, exp, expm1, floor, log, log10, max, min, mod, pi, power, radians, rand, round, signum, sin, sinh, sqrt, sum, tan, truncate | |
| 演算子関数 | < | between, in | |
| 予測関数 | < | forecast, timeleft | |
| 文字列関数 | < | ascii, bitlength, bytelength, char, concat, insert, jsonpath, left, length, ltrim, mid, repeat, replace, right, rtrim, trim, xmlxpath | |
特に記載がない限り、これらの関数は以下でサポートされています:
Foreach関数は集計計算でのみサポートされています。
通常、関数は比較のために数値を返します。 文字列を返す場合は、= および <> 演算子で比較できます(異なるホストで一致しないソフトウェアを検出するの例を参照)。
関数パラメータ
関数パラメータでは、以下を指定できます。
- ホストのアイテム履歴を参照する関数の場合、アイテムキー(
/host/key) - 期間(およびその他の関数固有のパラメータ)
- その他の式
アイテムのキー
参照されるアイテムは、サポートされている状態でなければなりません(ただし、nodata()関数はサポートされていないアイテムにも計算されます)。
最初のパラメータでホスト名を省略する(つまり、function(//key,parameter,...)のように記述する)ことは、特定のコンテキストでのみサポートされています。
これらのコンテキストでは、{HOST.HOST}マクロも使用できます。
イベント名フィールドおよび"トリガー"マップ要素の場合、トリガー式内の特定のアイテムを参照するために{HOST.HOST<1-9>}を使用できます。
これらのコンテキストでホスト名を省略したり、{HOST.HOST}に置き換えたりした場合、参照はトリガー式内の最初のアイテムまたはグラフの最初のアイテムを指します。
これらのサポートされているコンテキスト以外でトリガー式内のホスト名を省略すると、エラーになります。
イベント名マクロでのダブルスラッシュの使用例については、長期間のCPU負荷の比較の例を参照してください。
時間期間
関数固有のパラメータはアイテムキーの後に配置され、アイテムキーとはカンマで区切られます。
ほとんどの数値関数は時間期間をパラメータとして受け付けます。 これにより、関心のある間隔を指定できます。 時間期間(30s、10m、1h)または値の範囲(#5 - 最新の5つの値)として指定できます。
秒または時間サフィックスを使用して時間期間を示すことができます。 ハッシュマーク(#)を前に付けると、パラメータの意味が異なります:
| 式 | 説明 |
|---|---|
| sum(/host/key,10m) | 直近10分間の値の合計 |
| sum(/host/key,#10) | 最新10個の値の合計 |
ハッシュマーク付きのパラメータは、last関数では意味が異なり、N番目に前の値を示します。たとえば、値が30、70、20、60、50(最新から最も古い順)であれば:
last(/host/key,#2)は '70' を返しますlast(/host/key,#5)は '50' を返します
時間期間は「現在」までの期間で測定されます。「現在」とはトリガーの最新の再計算時刻(計算頻度を参照)であり、サーバーの「現在」時刻ではありません。
時間期間は以下のいずれかを指定します:
- 「現在-時間期間」から「現在」まで(または時間シフトを使用する場合は「現在-時間シフト-時間期間」から「現在-時間シフト」まで)のすべての値を考慮する
- 「現在」までの過去から最大num個の値のみを考慮する
- 指定された時間期間またはnum個の値が0の場合、この関数を使用するトリガーまたは計算アイテムはサポート対象外となります
注意点:
- トリガーで単一の関数(データ履歴を参照)が使用されている場合、「現在」は常に最新の受信値です。たとえば、最後の値が1時間前に受信された場合、時間期間は1時間前の最新値までと見なされます。
- 新しいトリガーは最初の値が受信されるとすぐに計算されます(履歴関数)。日付と時刻およびnodata()関数では30秒以内に計算されます。したがって、トリガーが作成されてから設定された時間期間(たとえば1時間)がまだ経過していなくても、トリガーは計算されます。また、値の範囲がたとえば最新10個の値に設定されていても、最初の値の後にトリガーが計算されます。
時間シフト
関数パラメータとして時間または値のカウントを指定する場合、オプションで時間シフトがサポートされています。 このパラメータを使用すると、過去の特定の期間のデータを参照できます。
時間シフトは now で始まり(現在時刻を指定)、+N<時間単位> または -N<時間単位>(N個の時間単位を加算または減算)を続けて指定します。
たとえば、avg(/host/key,1h:now-1d) は、1日前の1時間の平均値を返します。
月(M)および年(y)単位で指定した時間シフトは、トレンド関数でのみサポートされます。他の関数では、秒(s)、分(m)、時間(h)、日(d)、週(w)がサポートされています。
絶対時間期間での時間シフト
絶対時間期間は、時間シフトパラメータでサポートされています。たとえば、1日なら0時から0時、1週間なら月曜日から日曜日、1か月なら月初から月末までです。
絶対時間期間の時間シフトは now で始まり(現在時刻を指定)、任意の数の時間操作を続けて指定します。/<時間単位> - 時間単位の開始と終了を定義します(例:1日なら0時から0時)、+N<時間単位> または -N<時間単位> - N個の時間単位を加算または減算します。
時間シフトの値は0以上である必要があり、時間期間の最小値は1であることに注意してください。
| パラメータ | 説明 |
|---|---|
| 1d:now/d | 昨日 |
| 1d:now/d+1d | 今日 |
| 2d:now/d+1d | 直近2日間 |
| 1w:now/w | 先週 |
| 1w:now/w+1w | 今週 |
その他の式
関数のパラメータには、次の構文のように他の式を含めることができます。
min(min(/host/key,1h),min(/host2/key2,1h)*10)
関数がアイテムの履歴を参照する場合、他の式は使用できませんのでご注意ください。 たとえば、次の構文は許可されません:
min(/host/key,#5*10)
関数パラメータとしての他のトリガー式は、トリガー内の非履歴関数に限定されますが、この制限は計算アイテムには適用されません。
演算子
(実行優先度の降順で) トリガーでサポートされている演算子は次のとおりです。
| 優先度 | 演算子 | 定義 | 不明な値に関する注意 | オペランドをfloat型に強制変換 1 |
|---|---|---|---|---|
| 1 | - | 単項マイナス | -Unknown → Unknown | はい |
| 2 | not | 論理NOT | not Unknown → Unknown | はい |
| 3 | * | 乗算 | 0 * Unknown → Unknown (はい、Unknown、0以外 - 算術演算でUnknownを失わないため) 1.2 * Unknown → Unknown |
はい |
| / | 除算 | Unknown / 0 → エラー Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
はい | |
| 4 | + | 算術加算 | 1.2 + Unknown → Unknown | はい |
| - | 算術減算 | 1.2 - Unknown → Unknown | はい | |
| 5 | < | より小さい。演算子は次のように定義されます: A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | はい |
| <= | 以下。演算子は次のように定義されます: A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | はい | |
| > | より大きい。演算子は次のように定義されます: A>B ⇔ (A>B+0.000001) |
はい | ||
| >= | 以上。演算子は次のように定義されます: A>=B ⇔ (A≥B-0.000001) |
はい | ||
| 6 | = | 等しい。演算子は次のように定義されます: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
いいえ 1 | |
| <> | 等しくない。演算子は次のように定義されます: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
いいえ 1 | ||
| 7 | and | 論理AND | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
はい |
| 8 | or | 論理OR | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
はい |
1 文字列オペランドは、以下の場合に数値型にキャストされます:
- 他のオペランドが数値型の場合
- オペランドに=または<>以外の演算子が使用されている場合
(キャストに失敗した場合は、数値型オペランドが文字列オペランドにキャストされ、両方のオペランドが文字列として比較されます。)
not、and、or演算子は大文字と小文字を区別し、小文字で記述する必要があります。 また、スペースまたは括弧で囲む必要があります。
単項-およびnotを除くすべての演算子は、左結合です。 単項-およびnotは非結合(つまり、--1やnot not 1の代わりに-(-1)やnot (not 1)を使用する必要があります)。
評価結果:
- <、<=、>、>=、=、<>演算子は、指定された関係が真の場合はトリガー式で「1」、偽の場合は「0」を返します。 少なくとも1つのオペランドがUnknownの場合、結果はUnknownになります。
- andは既知のオペランドの場合、両方のオペランドが「0」と等しくない場合は「1」を返し、それ以外の場合は「0」を返します。不明なオペランドの場合、andは一方のオペランドが「0」と等しい場合のみ「0」を返し、それ以外の場合は「Unknown」を返します。
- orは既知のオペランドの場合、いずれかのオペランドが「0」と等しくない場合は「1」を返し、それ以外の場合は「0」を返します。不明なオペランドの場合、orは一方のオペランドが「0」と等しくない場合のみ「1」を返し、それ以外の場合は「Unknown」を返します。
- 論理否定演算子notの既知のオペランドに対する結果は、オペランドの値が「0」と等しくない場合は「0」、オペランドの値が「0」と等しい場合は「1」です。 不明なオペランドの場合、notは「Unknown」を返します。
不明な式の状態
トリガー式に不明なオペランドが現れる可能性があるのは、以下の場合です。
- サポートされていないアイテムが使用されている場合
- サポートされているアイテムに対する関数の評価がエラーになる場合
この場合、トリガー式は一般的に不明(評価できないため)となります。
不明なトリガーについて通知を受け取ることができます。
例外
不明なオペランドがあっても、以下のような場合にはトリガー式が既知の結果(障害/正常)に評価されることがあります。
nodata()関数は、参照されるアイテムがサポートされているかどうかに関係なく評価されます。- AND/ORを含む式は、2つの場合に既知の結果に評価されることがあります。
- ケース1: "
1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..."は既知の結果('1'または"障害")に評価されます。 - ケース2: "
0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..."は既知の結果('0'または"正常")に評価されます。
- ケース1: "
- サポートされているアイテムに対する関数の評価がエラーになる場合、関数値は
不明となり、以降の式評価で不明なオペランドとして扱われます。
不明なオペランドは、上記のような論理式の場合のみ"消える"ことがあります。
算術式の場合、不明なオペランドは常に不明となります(0による除算を除く)。
不明な式の状態は、トリガーの状態(障害/正常)を変更しません。
したがって、トリガーの状態が"障害"(ケース1参照)だった場合、既知の部分が解決されても('1'が'0'になっても)、式が不明に評価されるため、トリガーの状態は変更されません。
複数のサポートされていないアイテムを含むトリガー式が不明に評価された場合、Webインターフェースのエラーメッセージは最後に評価されたサポートされていないアイテムを指します。
値のキャッシュ
トリガーの評価に必要な値は、Zabbixサーバーによってキャッシュされます。 このため、サーバーの再起動後しばらくの間、トリガーの評価によってデータベースの負荷が高くなります。 アイテムの履歴値が削除された場合(手動またはハウスキーパーによる)、値のキャッシュはクリアされません。そのため、サーバーはトリガー関数で定義された期間より古い値になるか、サーバーが再起動されるまでキャッシュされた値を使用します。
キャッシュに最近のデータがなく、関数でクエリ期間が定義されていない場合、Zabbixはデフォルトで過去1週間までさかのぼってデータベースから履歴値を取得します。