タイプが計算のアイテムについて

コンタクトフォーム(http://www.zabbix.jp/contact)から送信された
dondoc さんのメッセージです。

掲題の件につきまして、質問させていただきます。

OS:CentOS 7.2
Zabbix Server: 3.0.7

監視対象サーバとのPing疎通不可状態時に下記条件式で値が取得されていました。

条件式:last("vm.memory.size[available]")/last("vm.memory.size[total]")*100

本条件式で使用している2つのアイテムでは、値が取得できておりませんでした。
取得できていない値/取得できていない値×100=取得不可となる想定でした。

具体的には、障害発生時から復旧時まで99.145%という値を継続して取得しております。
なぜこのような値が取得されてしまうのでしょうか。
また、想定通りの動作となるような対処法はございますでしょうか。

加えて、CPU使用率をパーセンテージで取得する下記アイテムにおいても同様な事象が発生しております。

条件式:100-last("system.cpu.util[,idle]")

取得されていないアイテム(last("system.cpu.util[,idle]"))を元に計算しているにもかかわらず値(0.0725%)が取得されています。
こちらについても、ご教授くださいますようお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

なぜこのような値が取得されてしまうのでしょうか。

last()関数を使用されているのですから、そのアイテムに対する
「正常に取得できた値のうち最新の値」を取得して計算している
のでそのような結果になります。

対象のアイテムが取得不可の状態であるからといって、last()で
得られる値も取得不可になるわけではありません。

また、想定通りの動作となるような対処法はございますでしょうか。

基本的には、取得不可のアイテムであってもlast()を使用するの
であれば、取得できたなかの最新の値を取得して計算してしまう
ことをご認識の上ご利用ください。

取得不可の状態になっていることを注視されたいのであれば、そ
ちらもトリガーを設定するなどして対応することをご検討くださ
い。

どうしても実現したいというのであれば、お勧めする方法ではあ
りませんが、nodata()を使用して、値が取得できていなかったら、
0での割り算となるような計算式を設定して実現されている方も
いらっしゃるようです。

ご参考まで。

ユーザー dondoc の写真

ご回答頂きありがとうございます。
計算された値について、last()関数の仕様の認識が誤っておりました。
計算の元になるアイテムが取得不可であっても、
「正常に取得できた値のうち最新の値」を取得して計算していること理解しました。

今回の質問の意図は、計算元となるアイテムがデータ収集できなかった場合に、
計算アイテムも値を保持しないようにしたいことです。

>どうしても実現したいというのであれば、お勧めする方法ではあ
> りませんが、nodata()を使用して、値が取得できていなかったら、
>0での割り算となるような計算式を設定して実現されている方も
> いらっしゃるようです。

上記について詳しくご教示頂けないでしょうか。
下記URLで同じ様な質問された方がいらっしゃいましたが、
この質問のことを指しておりますでしょうか?

http://www.zabbix.jp/node/2605

ここでは「1-nodata() 」で割ると出てくるのですが、
この使い方が分かればご教示頂けないでしょうか。
実際に計算アイテムで使用している式を以下に記載します。

①CPU使用率取得
100-last("system.cpu.util[,idle]")

②メモリ使用率取得
last("vm.memory.size[available]")/last("vm.memory.size[total]")*100

よろしくお願い致します。

ユーザー TNK の写真

1つの例は、Zabbix Advent Calendar 2015の投稿内にありましたの
で、そちらをご覧ください。

計算アイテムの紹介と知っておくと得するTips
http://qiita.com/chrolis/items/b9fbda012d54f4c176aa

ユーザー dondoc の写真

ご教授頂いたサイトを参考に設定し、希望通りの結果を得ることができました。
丁寧な回答ありがとうございました。