トリガーで使用される式は非常に柔軟です。 これらを使用して、監視している統計情報に関する複雑な論理テストを作成できます。
単純な式では、いくつかのパラメータを持つ関数がアイテムに適用されます。 関数は、演算子と定数を使用してしきい値と比較される結果を返します。
単純で有用な式の構文は、function(/host/key,parameter)<operator><constant>です。
例:
これは、過去5分間に受信したバイト数が常に100キロバイトを超えていた場合にトリガーされます。
構文はまったく同じですが、機能的な観点からは、トリガー式には2つのタイプがあります:
問題式のみを定義する場合、この式は問題のしきい値と問題の復旧しきい値の両方として使用されます。 問題式がTRUEと評価されると、問題が発生します。 問題式がFALSEと評価されると、問題は解決されます。
問題式と補足的な復旧式の両方を定義する場合、問題の解決はより複雑になります: 問題式がFALSEであるだけでなく、復旧式もTRUEでなければなりません。 これはヒステリシスを作成し、トリガーのフラッピングを回避するのに役立ちます。
復旧式で{TRIGGER.VALUE}マクロを使用しても非効率的です。なぜなら、この式はトリガーが「問題」状態のときにのみ評価されるためです。そのため、式を評価している間、{TRIGGER.VALUE}は常に「1」(「問題」状態を示す)になります。
関数を使用すると、収集した値の計算(平均、最小、最大、合計)、文字列の検索、現在時刻やその他の要素の参照が可能です。
サポートされている関数の完全なリストが利用可能です。
通常、関数は比較のために数値を返します。 文字列を返す場合は、= および <> 演算子で比較が可能です(例を参照)。
関数パラメータでは、以下を指定できます。
ホストとアイテムキーは /host/key の形式で指定できます。
最初のパラメータでホスト名を省略する(つまり function(//key,parameter,...) のように記述する)ことは、特定のコンテキストでのみサポートされています。
これらのコンテキストでは、{HOST.HOST}マクロも使用できます。
イベント名フィールドや"トリガー"マップ要素の場合、トリガー式内の特定のアイテムを参照するために{HOST.HOST<1-9>}を使用できます。
これらのコンテキストでホスト名を省略したり、{HOST.HOST}に置き換えたりした場合、参照はトリガー式内の最初のアイテムまたはグラフの最初のアイテムを指します。
これらのサポートされているコンテキスト以外でトリガー式内のホスト名を省略すると、エラーとなります。
イベント名マクロでのダブルスラッシュの使用例については、例18を参照してください。
参照されるアイテムは、サポートされている状態でなければなりません(nodata()関数のみ、サポートされていないアイテムにも計算されます)。
他のトリガー式を関数パラメータとして使用する場合、トリガー内では履歴関数以外に制限されますが、この制限は計算アイテムには適用されません。
The referenced item must be in a supported state (except for nodata() function, which is calculated for unsupported items as well).
Omission of the host name in the first parameter (i.e. as in function(//key,parameter,...)) is only supported in certain contexts:
In these contexts, you may also use the {HOST.HOST} macro. {HOST.HOST<1-9>} could be used in the case of the Event name field and the "Trigger" map element to refer to a specific item in the trigger expression. When the host name is omitted or replaced by {HOST.HOST} in these contexts, the reference points to the first item in the trigger expression or to the first item in the graph. Outside of these supported contexts, omitting the host name in trigger expressions will result in an error. See Compare long-term CPU loads example for an illustration of double-slash usage in Event name macros.
関数固有のパラメータはアイテムキーの後に配置され、アイテムキーとはカンマで区切られます。 これらのパラメータの完全なリストについては、サポートされている関数を参照してください。
ほとんどの数値関数は、パラメータとして時間を受け取ります。 秒または時間のサフィックスを使用して時間を指定できます。 ハッシュマーク(#)を前に付けると、パラメータの意味が異なります。
| 式 | 説明 |
|---|---|
| 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' を返します関数パラメータとして時間または値のカウントを指定する場合、オプションで時間シフトがサポートされています。 このパラメータを使用すると、過去のある期間のデータを参照できます。
時間シフトは 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(/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) を使用する必要があります)。
評価結果:
It is possible that an unknown operand appears in a trigger expression when:
In this case the trigger expression generally evaluates to Unknown (as it cannot be evaluated)
It is possible to get notified on unknown triggers.
Exceptions
Despite an unknown operand, trigger expressions can be evaluated to known result (Problem/OK) in some cases:
nodata() function is evaluated regardless of whether the referenced item is supported or not.1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..." evaluates to known result ('1' or "Problem"),0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..." evaluates to known result ('0' or "OK").Unknown and it takes part as unknown operand in further expression evaluation.Unknown operands may "disappear" only in logical expressions as described above. In arithmetic expressions unknown operands always lead to Unknown (except division by 0).
Unknown expression state does not change the trigger state (Problem/OK). So, if trigger state was "Problem" (see Case 1), it stays in the problem state even if the known part is resolved ('1' becomes '0'), because the expression is now evaluated to Unknown and that does not change the trigger state.
If a trigger expression with several unsupported items evaluates to Unknown, the error message in the frontend refers to the last unsupported item evaluated.
トリガーの評価に必要な値は、Zabbixサーバーによってキャッシュされます。 このため、サーバーの再起動後しばらくの間、トリガーの評価によってデータベースの負荷が高くなります。 アイテムの履歴値が削除された場合(手動またはハウスキーパーによる)、値のキャッシュはクリアされません。そのため、サーバーはトリガー関数で定義された期間より古い値になるか、サーバーが再起動されるまでキャッシュされた値を使用します。
キャッシュに最近のデータがなく、関数でクエリ期間が定義されていない場合、Zabbixはデフォルトで過去1週間までさかのぼってデータベースから履歴値を取得します。