7 計算
概要
計算アイテムは、既存のアイテムの値に基づいて計算を行うことができます。たとえば、あるアイテム値の1時間ごとの平均を計算したり、アイテムグループの合計値を計算したりする場合に使用します。これが計算アイテムの目的です。
計算には以下の両方が使用できます:
- 個々のアイテムの単一値
- 集計のために複数のアイテムを選択する複雑なフィルター(詳細は集計計算を参照)
計算アイテムは仮想データソースを作成する方法です。すべての計算はZabbixサーバーのみで実行されます。値は使用する算術式に基づいて定期的に計算されます。
結果のデータは他のアイテムと同様にZabbixデータベースに保存されます。履歴値とトレンド値の両方が保存され、グラフも生成できます。
計算結果が浮動小数点値の場合、計算アイテムの情報の型が数値(整数)であれば整数に切り捨てられます。
また、キャッシュに最近のデータがなく、関数で問い合わせ期間が定義されていない場合、Zabbixはデフォルトで過去1週間までさかのぼって履歴値をデータベースに問い合わせます。
計算アイテムは、トリガー式と構文を共有します。 トリガー式に慣れている場合、計算アイテムはしきい値との比較なしに、いくつかの値を分析する関数と考えることができます。
計算アイテムでは文字列との比較も許可されています。 計算アイテムは、他のアイテムタイプと同様にマクロや他のエンティティから参照できます。
計算アイテムを使用するには、アイテムタイプ計算を選択します。
設定可能なフィールド
キーは、(ホストごとに)一意のアイテム識別子です。サポートされている記号を使用して任意のキー名を作成できます。
計算式は式フィールドに入力します。式とキーの間に関連性はありません。キーのパラメータは式内で一切使用されません。
単純な式の構文は次のとおりです。
function(/host/key,<parameter1>,<parameter2>,...)
ここで:
| 要素 | 説明 |
|---|---|
function |
サポートされている関数のいずれか: last, min, max, avg, countなど |
host |
計算に使用するアイテムのホスト。 現在のホストは省略可能です(例: function(//key,parameter,...)のように)。 |
key |
計算に使用するアイテムのキー。 バイナリまたはJSONのデータ型で値を返すアイテムはサポートされていません。 |
parameter(s) |
関数のパラメータ(必要な場合)。 時間のサフィックスおよびメモリサイズのサフィックスがサポートされています。 |
式内のユーザーマクロは、関数パラメータ、アイテムフィルタパラメータ、または定数を参照する場合に展開されます。関数名、ホスト名、アイテムキー、アイテムキーパラメータ、または演算子を参照する場合は展開されません。
より複雑な式では、関数、演算子、括弧を組み合わせて使用できます。トリガー式でサポートされているすべての関数と演算子を使用できます。論理や演算子の優先順位もまったく同じです。
トリガー式とは異なり、Zabbixは計算アイテムを新しい値を受信したときではなく、アイテムの更新間隔に従って処理します。
計算アイテムの式で履歴関数によって参照されるすべてのアイテムは、存在し、データを収集している必要があります。また、参照されるアイテムのアイテムキーを変更した場合は、そのキーを使用しているすべての式を手動で更新する必要があります。
計算アイテムがサポート対象外になる場合はいくつかあります:
- 参照アイテムが
- 見つからない
- 無効になっている
- 無効なホストに属している
- サポートされていない(ただし、nodata()関数および不明な値を持つ演算子を除く)
- 関数を計算するためのデータがない
- ゼロによる除算
- 不正な構文の使用
使用例
例1
'/' のディスク空き容量のパーセンテージを計算します。
Use of function last:
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])
Zabbixはフリーディスクスペースとトータルディスクスペースの最新値を取得し、指定された計算式に従ってパーセンテージを計算します。
例2
Zabbixで処理された値の10分間の平均値を計算します。
Use of function 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を参照してください。