7 計算

概要

計算項目を使用すると、他の項目の値を基に計算を行うことができます。

計算では、次の両方を使用できます。

  • 個々の項目の単一の値
  • 集計のために複数の項目を選択するための複雑なフィルター (aggregate calculationsを 参照してください。

このように、計算 item は仮想データソースを作成するための手段です。すべての計算はZabbix server のみによって行われます。
値は使用された算術式に基づき定期的に計算されます。

計算結果のデータは他のアイテムと同様にZabbixデータベースに保存され、ヒストリー値とトレンド値の両方が保存され、
グラフを作成することも可能です。

計算結果がfloat値の場合、計算された item の情報タイプが数値(符号なし)であれば、整数に切り詰められます。

計算 item は、トリガー式expressions と構文を共有しています。
計算 item は、文字列との比較も可能です。計算項目は、他の項目型と同様に、マクロや他のエンティティから参照することができます。

計算 item を使用するには、 item タイプ Calculated を選択します。

設定可能なフィールド

キーは、(ホストごとに)一意なアイテム識別子です。サポートされているシンボルを使用して、任意のキー名を作成することができます。

計算の定義は、の欄に入力してください。数式とキーの間には事実上何の関係もありません。
キーのパラメータは、数式では一切使用されません。

式の構文は以下の通りです。

function(/host/key,<parameter1>,<parameter2>,...)

上記構文の詳細

function サポートされている関数の 1 つ: last、min、max、avg、count など
host 計算に使用されるアイテムのホスト。
現在のホストは省略できます (つまり、function(//key,parameter,...) のように)。
key 計算に使用されるアイテムのキー。
parameter(s) 必要な場合、関数のパラメーター。

数式内のユーザー マクロは、関数パラメータ、アイテムフィルタパラメータ、または定数を参照するために使用される場合、展開されます。関数、ホスト名、アイテム キー、アイテム キー パラメータ、または演算子を参照する場合、ユーザー マクロは展開されません。

より複雑な式では、関数、演算子、および括弧を組み合わせて使用することができます。トリガー式でサポートされている
すべての関数と演算子 operatorsを使用することができます。
ロジックと演算子の優先順位は全く同じです。

Zabbixはトリガー条件式とは異なり、新しい値を受け取った時ではなく、アイテムの更新間隔に従って計算されたアイテムを処理します。

計算アイテムの式の中でヒストリ関数によって参照されるアイテムは、すべて存在しデータを収集している必要があります。
また、参照されるアイテムのアイテムキーを変更した場合、そのキーを使用しているすべての数式を手動で更新する必要があります。

計算されたアイテムは、いくつかのケースで取得不可になることがあります:

  • 参照されたアイテムが以下の場合
    • 見つからない
    • 無効
    • 無効なホストのアイテム
    • 取得不可(except with nodata() function and operators with unknown values)
  • 関数を計算するためのデータない
  • ゼロ除算
  • 不正な構文の使用

使用例

例1

'/' のディスク空き容量のパーセンテージを計算します。

last関数の使用例:

100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbixはフリーディスクスペースとトータルディスクスペースの最新値を取得し、指定された計算式に従ってパーセンテージを計算します。

例2

Zabbixで処理された値の10分間の平均値を計算します。

avg関数の使用例:

avg(/Zabbix Server/zabbix[wcache,values],10m)

長い時間の計算 item を多用すると、Zabbix server のパフォーマンスに影響を与える可能性があることに注意してください。

例3

eth0の総帯域幅を計算する。

2つの関数の合計:

last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
例4

受信トラフィックのパーセンテージを計算する。

より複雑な表現:

100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

Examples of aggregate calculationsを参照してください。