グラフの平均の計算方法について
お世話になっております。
OS : linux CentOS 6.2
Zabbix:2.0.3
Zabbix Agent:2.0.3-1.el6.x86_64
zabbix DB(mysql) で以下のコマンドを使用して CPU 使用率のデータを表示させたのですが、
監視データのグラフと比較した際、平均だけ値に差異がありました。
zabbix DB と 監視データのグラフでは平均の計算方法に違いがあるのでしょうか。
もし違いがある場合は、それぞれの計算方法をご教授いただけると助かります。
◆ zabbix DB の値
mysql> select from_unixtime(clock),value_min,value_avg,value_max from trends_uint where itemid=(アイテムID);
結果
+----------------------+-----------+-----------+-----------+
| from_unixtime(clock) | value_min | value_avg | value_max |
+----------------------+-----------+-----------+-----------+
-----省略-----
| 2014-04-16 08:00:00 | 1 | 1 | 10 |
◆ zabbix 監視データ>グラフの値
CPU RAW-new(1h)
最新値 最少 平均 最大
cpu-rawUser-new 0% 1% 4.25% 10%
KAZ - 投稿数: 1085
こんなデータが有ったとします。
グラフで期間を2014-04-08 11:30〜12:30にしていすると…
最少:88
平均:659
最大:5272
です。
グラフで期間を2014-04-08 10:30〜12:30にしていすると…
最少:80
平均:494
最大:5272
です。
最小と最大は指定期間に該当するレコードの中でvalue_minの最小とvalue_maxの最大となります。
平均は、指定期間に該当するレコードのvalue_avgを全部足して、該当レコード数で割ります。
ひろし - 投稿数: 11
グラフの期間は2014-04-16 08:00〜09:00にしています。
ためしにグラフの期間を2014-04-16 07:30〜08:30にすると以下のようになります。
最新値 最少 平均 最大
cpu-rawUser-new 0% 0% 2.02% 5%
zabbix DB の 2014-04-16 08:00:00 の列に表示された 平均 1 というのは
何時から何時の平均なのでしょうか?
KAZ - 投稿数: 1085
zabbix DB の 2014-04-16 08:00:00 の列に表示された 平均 1 というのは 何時から何時の平均なのでしょうか?
ソース読みきれてませんが…
zabbix-2.0.0/src/libs/zbxdbcache/dbcache.cのDCadd_trend関数で
とあるので、2014-04-16 08:00:00 〜 2014-04-16 08:59:59のhistory_uint平均と思われます。
この関数やDCflush_trends関数にtrends_uintの各項目の値の算出が載ってます。
■補足 2014-04-16 16:34追加
最初に回答したのは、グラフ表示時にtrends_uintの値を更に平均化するロジックです。
zabbix-2.0.0/frontends/php/include/func.inc.php の下記が該当します。
bcadd($sum, $value);で指定期間の値を全部加算して、bcdiv($sum, count($values));で回数で割っています。
ひろし - 投稿数: 11
早急なご回答ありがとうございます。
history と trends で平均に差異があるのはバグのようです。
参考URL:
https://support.zabbix.com/browse/ZBX-3643
https://www.zabbix.com/forum/showthread.php?t=41535
KAZ - 投稿数: 1085
ひろしさん
ご指摘ありがとうございます。
小数点が切り落とされて、監視間隔が短いほど誤差が大きくなるようですね。
2.1.0でFixedとなってますので、2.2からは大丈夫なようですね。A(^^;