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