メモリ使用率の数字が膨大な数字になる

Zabbix1.8.4での質問です。

数日通常に動作をしておりましたがある日、急に18446744073709500000のような数値が出てアラートメールが発生しました。
各数値のLastvalueを確認して手で数値を入力しましたがそのような数値にはならず実際は-18.数%程度でした。

大きい値が出た点でtotalの値も確認しましたがtotalは、正常で変動してませんでした。
正し、freeやcacheの値が5分間で取得してるにも関わらず同じタイミングで2度取得したりして取得タイミングずれてましたが
計算上ずれても数字はここまで大きくなるような要素がある数字はありませんでした。

メモリ使用率の算出式として以下の式を適用してます。
100*(last(vm.memory.size[total])-last(vm.memory.size[free])-last(vm.memory.size[cached]))/last(vm.memory.size[total])

この事象の原因についてご意見を頂ければと思います。

宜しお願い致します。

追記:18446744073709500000はMySQLの表示最大数でした。

コメント表示オプション

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

具体的な不具合修正履歴まで確認できていませんが、1.8.4ですと
もう3年以上前のもので、それ以降、様々な不具合が修正されてい
ます。
エージェントの値取得の部分も、計算アイテムの計算処理の不具合
もいくつか修正されていたと思います。

まずは、1.8系なら1.8系の最新版に更新されて、再現するかを確認
されてみてはいかがでしょうか?

ユーザー Obs の写真

TNKさん

ご回答ありがとうございます。

お客様のシステムが載ってますので早急な対応としてアップデートや再起動などは出来ないんです。
アップデート以外の手段で解決手段がありましたらお教えください。

ユーザー TNK の写真

残念ながら、プログラムの不具合で発生した問題であるならば、そ
のプログラムを入れ替えせずに不具合を修正することは不可能です。

具体的に該当する不具合修正を見つけられているわけではないので、
更新すれば必ず修正されるとは限りませんが、1.8.4以降、致命的
な脆弱性も多数修正されていますし、処理パフォーマンスも大幅に
改善されています。

報告頂いた設定情報と現象から、指定されている計算式に誤りがあ
って発生しているわけではなさそうですので、考えられるのは何ら
かの不具合が古いバージョンにあった可能性が考えられます。

値取得処理で正常値が取得できなかったり、何らかの計算処理で桁
あふれが発生し、MySQLで対象のカラムの型の最大値や最小値にな
るような現象が発生しているのだと予想しています。

先にも書かせて頂きましたが、

 ・多数の脆弱性問題修正
 ・多数の不具合修正
 ・大幅な処理パフォーマンスの改善

などもありますので、最新のバージョンに更新されることをお勧め
します。

既存バージョンのままにしておくことを優先されるのであれば、ま
れに発生する不正値は無視する運用をされるしかないと思います。

ユーザー fripper の写真

発生している事象から、いずれかの値が、とんでもない数値になっているのだと
考えられます
TNK さんの仰っているとおり、プログラムの不具合に起因する問題は
バージョンアップ以外での対応は不可能です
早急なる差替を手配すべきかと思います

で、発生している現象からの、勝手な推測なんですが‥

>同じタイミングで2度取得したりして取得タイミングずれ‥

この症状からの推測です

NTP での時刻同期によって、監視対象ホストの時間が巻き戻ってしまったり
していませんか?
データ取得処理も、サーバ上での計算処理も、いずれも、当該サーバ上の現在時刻ベースで動くので
その時刻情報が揺らいでしまった瞬間には、監視の取得値も、影響を受けることが考えられます

今回の対象アイテムは、vm.memory 系で、特に「時間差分」等の情報が絡むものではないと思いたいですが
ネットワーク通信量などのアイテムですと、NTP での時間逆行はかなり致命的な影響をおよぼすことがあります

エラーが出た時間帯に、監視対象のサーバ側、zabbixサーバ側の両方について、時間同期関連の記録が
ないか、探ってみることをお奨めします

数マイクロ秒、数ミリ秒程度の同期処理なら問題ないはずですが、
数秒・数分単位の補正が実行されていたのだとすると、それが「原因」と言えるかもしれません

もしこれが原因だったとしたら、打てる対策としては、OS のNTP 関連の設定を見なおして、
時刻同期処理の実行間隔を狭めて、1回の同期処理で、補正されうる「ずれ」そのものを
小さくする、程度でしょうか

ユーザー Obs の写真

fripperさん

ご回答ありがとうございます。

NTP周りの挙動を確認しましたが大きなズレは発生しておりませんでした。
取得間隔に2度発生してる件を調べてみたところ、Zabbixのキューが5秒以上の遅延で48件程確認できました。
キューによる遅延にて取得間隔が全体的にズレてるものと考えられます。
もちろん、取得されてる数字その物自体は現実的な数字でMySQL上の最大値にはなりえません。
MySQLの設定を確認してみたところ以下のチューニングが施されておりましたがこの設定では不十分と言う事になりますでしょうか?

innodb_file_per_table
#innodb_force_recovery = 3

skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
max_connections = 300

innodb_buffer_pool_size = 4096M