7 計算
概要
このアイテムタイプでは、すでに存在するメトリクスに対して計算を実行できます。計算アイテム自体は、データを収集しません。
たとえば、次のようなことができます。
- 2つの値を数える。
- 複数のアイテム値の平均を計算する。
- アイテムのグループに対する合計値を計算する。
結果の値は、他のアイテムと同様にZabbixデータベースに保存されます。履歴値とトレンド値の両方が保存され、グラフを生成することもできます。
計算は数式に基づいて行われます。数式の構文は、トリガー式と共通です。
実際には、複雑なデータ整形ロジックを計算アイテムに持たせることで、トリガーをシンプルに保つことができます。その後、アイテムキーを使用してトリガー内でその計算アイテムを参照できます。
計算用のデータソースを指定する方法は2つあります。
- 数式内でアイテムを指定する。
- アイテムを選択するフィルターに基づいてデータ集計を行う。
2番目の方法では、グループ平均、合計などを計算できます。
すべての計算はZabbixサーバーによって実行されます。プロキシやエージェントは一切関与しません。長い期間を対象とする計算アイテムを大量に使用すると、サーバーのパフォーマンスに影響する可能性があることに注意してください。
設定可能なフィールド
キーは、(ホストごとに)一意のアイテム識別子です。サポートされている記号を使用して任意のキー名を作成できます。
計算式は式フィールドに入力します。式とキーの間に関連性はありません。キーのパラメータは式内で一切使用されません。
単純な式の構文は次のとおりです。
function(/host/key,<parameter1>,<parameter2>,...)
ここで:
| 要素 | 説明 |
|---|---|
function |
サポートされている関数のいずれか: last, min, max, avg, countなど |
host |
計算に使用するアイテムのホスト。 現在のホストは省略可能です(例: function(//key,parameter,...)のように)。 |
key |
計算に使用するアイテムのキー。 バイナリまたはJSONのデータ型で値を返すアイテムはサポートされていません。 |
parameter(s) |
関数のパラメータ(必要な場合)。 時間のサフィックスおよびメモリサイズのサフィックスがサポートされています。 |
式内のユーザーマクロは、関数パラメータ、アイテムフィルタパラメータ、または定数を参照する場合に展開されます。関数名、ホスト名、アイテムキー、アイテムキーパラメータ、または演算子を参照する場合は展開されません。
より複雑な式では、関数、演算子、括弧を組み合わせて使用できます。トリガー式でサポートされているすべての関数と演算子を使用できます。論理や演算子の優先順位もまったく同じです。
トリガー式とは異なり、Zabbixは計算アイテムを新しい値を受信したときではなく、アイテムの更新間隔に従って処理します。
計算アイテムの式で履歴関数によって参照されるすべてのアイテムは、存在し、データを収集している必要があります。また、参照されるアイテムのアイテムキーを変更した場合は、そのキーを使用しているすべての式を手動で更新する必要があります。
計算アイテムがサポート対象外になる場合はいくつかあります:
- 参照アイテムが
- 見つからない
- 無効になっている
- 無効なホストに属している
- サポートされていない(ただし、nodata()関数および不明な値を持つ演算子を除く)
- 関数を計算するためのデータがない
- ゼロによる除算
- 不正な構文の使用
単純な計算式
単純な計算式の構文は次のとおりです:
function(/host/key,<parameter1>,<parameter2>,...)
各要素の説明:
| Element | Description |
|---|---|
function |
サポートされている関数 のいずれか: last、min、max、avg、count など |
host |
計算に使用されるアイテムのホスト。 現在のホストは省略できます(つまり、 function(//key,parameter,...) のように指定できます)。 |
key |
計算に使用されるアイテムのキー。 バイナリまたはJSONのdata typeで値を返すアイテムはサポートされていません。 参照されているアイテムのキーを変更した場合、計算式内のキーも手動で更新する必要があります。 履歴関数によって参照されるすべてのアイテムは、存在していてデータを収集している必要があります。 |
parameter(s) |
必要に応じて指定する関数のパラメータ。 時間サフィックス および メモリサイズサフィックス がサポートされています。 |
より複雑な計算式では、関数、演算子、括弧を組み合わせて使用できます。
計算アイテムの計算式の例を参照してください:
一部の変数は、ユーザーマクロ を使用して計算式に渡すことができます。
ユーザーマクロが展開されるのは、関数パラメータ、アイテムフィルターパラメータ、または定数の参照に使用された場合のみであることに注意してください。
関数、ホスト名、アイテムキー、アイテムキーパラメータ、または演算子を参照する場合、ユーザーマクロは展開されません。
文字列との比較も可能です。
キャッシュ内に新しいデータがなく、かつ関数内で問い合わせ期間が定義されていない場合、Zabbix はデフォルトで最大1週間前までさかのぼってデータベースから履歴値を問い合わせます。
計算アイテムは、以下のような場合に未サポートになることがあります:
- 参照されているアイテムが
- 見つからない
- 無効である、または無効なホストに属している
- 未サポートである(nodata() 関数および unknown 値に対する operators を除く)
- 関数を計算するためのデータがない
- 0 による除算
- 構文が正しくない
データ集計
データ集計は、複数のアイテムを選択するフィルタに基づいています。データ集計も計算アイテムの一種ですが、数式では少し異なる構文を使用します。
集計値を取得するには、サポートされている集計関数のいずれかを使用します: avg、max、min、sum など。
次に、必要なアイテムを選択するために、唯一のパラメータとして foreach 関数とそのアイテムフィルタを追加します:
aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))
foreach 関数(例: avg_foreach、count_foreach など)は、選択された各アイテムに対して1つの集計値を返します。
アイテムは、アイテム履歴から、アイテムフィルタ(/host/key?[group="host group"])を使用して選択されます。
詳細については、foreach 関数を参照してください。
要求された期間に対してデータを持たないアイテムがある場合、それらは計算で無視されます。 どのアイテムにもデータがない場合、関数はエラーを返します。
または、集計のパラメータとして複数のアイテムを列挙することもできます:
aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)
ここでの function は、履歴/トレンド関数でなければならないことに注意してください。
集計計算の例を参照してください:
- (5) ホストの受信トラフィック合計
- (6) グループのディスク容量合計
- (7) グループの平均プロセッサ負荷
- (8) グループおよびタグごとの平均プロセッサ負荷
- (9) 処理済み値の平均数
- (10) グループの平均クエリ数
- (11) 成功したDNSチェックの総数
- (12) グループの未サポートアイテム総数
- (13) グループのインターフェース統計
ユーザーマクロおよびローレベルディスカバリマクロは、以下でサポートされています:
- アイテムキーのパラメータ
- 関数パラメータ
- フィルタ条件(ホストグループ名およびタグ名)
- 式の定数
以下の場合、集計計算は未サポートになることがあります:
- 参照されているアイテムが1つも見つからない場合(これは、アイテムキーが正しくない、いずれのアイテムも存在しない、または含まれるすべてのグループが正しくない場合に発生する可能性があります)
- 関数を計算するためのデータがない場合
計算アイテムの例
(1) インターフェース上の総トラフィック
last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
eth0 の総帯域幅を計算します。
(2) 空きディスク容量の割合
100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])
Zabbixは、空きディスク容量と総ディスク容量(/上)の最新の値を取得し、指定された式に従って割合を計算します。
(3) 受信トラフィックの割合
100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))
総トラフィックに対する受信トラフィックの割合を計算します。
(4) 処理された値の平均数
avg(/Zabbix server/zabbix[wcache,values],10m)
Zabbix によって処理された値の数の10分間平均を計算します。
(5) ホストの受信トラフィック合計
sum(last_foreach(/host/net.if.in[*]))
ホスト上で net.if.in[*] に一致するすべてのアイテムの合計を計算します。
(6) グループの合計ディスク容量
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))
すべてのMySQL Serversの合計ディスク容量を計算します。
(7) グループの平均プロセッサー負荷
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))
すべてのMySQL Serversの平均プロセッサー負荷を計算します。
(8) グループおよびタグの平均プロセッサー負荷
avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))
特定のタグを持つ複数のホストグループ内のすべてのホストにおける平均CPU負荷を計算します。
(9) グループのクエリ平均数
avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))
MySQL Servers の1秒あたりのクエリ数の5分間平均を計算します。
(10) 成功したDNSチェックの総数
sum(last_foreach(/*/net.dns[*,*,*]))
すべてのホストにおける成功したDNSチェックの総数を計算します。
表示されているアイテムの形式 net.dns[192.0.2.0,example.com,A] は、可能なキーの一例です。
ワイルドカードは、キー内のパラメータ数と一致している必要があることに注意してください(この場合、net.dns には3つのパラメータがあります: ip、name、type)。
(11) グループの未サポートアイテム総数
sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))
Zabbix servers の未サポートアイテムの総数を計算します。
(12) グループのインターフェース統計
sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"]))
video グループのインターフェース統計を計算します。
正しい/誤った構文の例
式(関数呼び出しを含む)は、履歴、トレンド、または foreach 関数 のパラメータとして使用できません。 ただし、これらの関数自体は、他の(履歴ではない)関数パラメータで使用できます。
| 式 | 例 |
|---|---|
| 有効 | avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)max(avg(avg_foreach(/*/system.cpu.load?[group="Servers A"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers B"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers C"],5m))) |
| 無効 | sum(/host/key,10+2)sum(/host/key, avg(10,2))sum(/host/key,last(/host/key2)) |
次のような式では、次の点に注意してください。
sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))
式の両方の部分が常に同じ値のセットを持つことは保証できません。 式の一方の部分が評価されている間に、要求された期間の新しい値が到着する可能性があり、その結果、式のもう一方の部分は異なる値のセットを持つことになります。