異常なネットワークトラフィック値を取得する
はじめまして。
zabbix1.8.4、CentOS5.2の環境にて運用しているのですが、ネットワークトラフィックのアイテム
Incoming traffic on interface venet0
Outgoing traffic on interface venet0
にて極まれに異常に高い値を記録します。
実際に取得されたデータを提示しますと、
2011.4月.04 19:22:48 38986.5
2011.4月.04 19:21:48 40482.65
2011.4月.04 19:19:49 154687073.7049
2011.4月.04 19:18:48 37146.9333
2011.4月.04 19:17:48 41203.75
このように、瞬間的にトラフィックが急激に上がっているように見えます。
ただ、このサーバに接続されているスイッチ機器の監視では負荷は見られず、そもそも構成上約1.2Gbpsのトラフィックを出すことは不可能なため、zabbix上の値がおかしいのではないかと推測しております。
なお、アイテムは以下のように設定しております。
ホスト :Server001
説明 :Incoming traffic on interface $1
タイプ :Zabbixエージェント
キー :net.if.in[venet0,bytes]
データ型 :数値 (浮動小数)
単位 :Bps
乗数を使用 :なし
乗数 :なし
更新間隔(秒) :60
例外の更新間隔(秒) :なし
ヒストリの保存期間(日):60
トレンドの保存期間(日):365
ステータス :有効
保存時の計算 :差分/時間
値のマッピングの使用 :なし
アプリケーション :なし
また、「19:20:48」頃にデータが取得されていない件も気になったため、zabbixのソースを少し読んでみたところ、/proc/net/dev のbytesをデータ元にしているということと、「差分/時間」の計算時に、前回のデータ、タイムスタンプとの比較を行い整合性を確認していると思われる記述を見つけました。(src\libs\zbxdbcache\dbcache.c:1128行付近)
上記の状況から、「19:19:49」にzabbix_agentが/proc/net/devから取得したデータが正常でなく、本来より高い値を渡したため異常な数値を記録し、「19:20:48」頃には正常にデータが取得できたものの、前回のデータのほうが値が高かったために記録せず終了したものと考えています。
(エラーが出ていたかもしれませんが、ログは既にローテートされていたため、確認することができませんでした :-( )
要点としては、/proc/net/dev からbytesの情報を取得する箇所に問題があると思われるのですが、これは既知の不具合でしょうか?
また、その他考えられる原因等ありましたら、教えていただけますと幸いです。
TNK - 投稿数: 4753
計算の元になる/proc/net/devから取得した値は、通常、OS起動時からの累積値になっています。
アイテムの「保存時の計算」に「差分/時間」を選択しているネットワークトラフィックの計算は、
(今回取得した値 - 前回取得した値) / 時間
で、その時間帯内の通信速度(bpsなど)を算出しています。
しかし、「今回取得した値 - 前回取得した値」の結果がマイナスになってしまう場合には、取得した値のカウンタが桁あふれになってしまって、カウンタがクリアされたと判断してその計算結果を保存しないようになっています。
/proc/net/devで利用しているカウンタが何bitの精度があるか確認していませんが、例えば1000までカウントできるカウンタであるとわかっていた場合、前回取得した値が999で今回取得した値が10だったとすると11増えたことはわかりますが、いくつまでカウントできるカウンタかがわからなければ、正しい値が何であるかは判断できないためです。
net.if.inやnet.if.out以外でも、同様に累積カウンタを元に処理するものは、同様の処理になっていたと思います。
つまり、今回は、19:19:49に取得した値に異常があり、19:20:48頃に取得した値と19:19:49との差分がマイナスになってしまったのでアイテムの値としては保存せず、19:21:48に取得した値と19:20:48頃に取得した値を利用して計算して、19:21:48は40482.65という値になったということだと思います。
Zabbixの問題というよりも、/proc/net/devに正しい値を設定できないVPS環境側の問題なのではないでしょうか。
物理サーバ上やVMware環境上では、このような突出した値を測定した経験がありません。