• ベストアンサー

SNMPのifInOctets

スイッチの各ポートの帯域使用率を取得したいと思い、 SNMPのifInOctetsの値をsnmpwalkで参照しました。 そこには、インターフェース毎に数値(カウンタ?)が入っていました。 この値は、そのポートが受信したバイト数の累計値か何かなのでしょうか?。 「累計」と考えたのは、その数値がポートの最大スペック(1Gbps=128Mバイト)を 超える値が入っていたためです。 128Mバイト以下のバイト数(snmpwalkで参照時点の使用量)が 入っていると思ったのですが・・ この数値はどういった解釈をするものでしょうか?。 アドバイスを頂けると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.6

「ifInOctetsやifOutOctetsを単独で取得した時何に使えるのか?」と言われているのであれば、ちょっと思いつきません。 これまで何度も出ていると思いますが、下記の用途以外を自分は知りません。 いわゆる「トラフィック監視(流量監視)」の実現方法ですね。 ----------------------------------------------------------------------------------- 1, 送受信で発生したフレーム数が累積されるカウンタがあったとき、そのカウンタを一定間隔で取得する 2, 後は該当のインターフェイス速度と、取得に用いたポーリング間隔さえわかっていれば「使用率」が算出できる # 上記1に於いて用いられる標準的なカウンタオブジェクトがifInOctetsとifOutOctetsです。 但し、現在のネットワーク環境下に於いては64bitカウンタタイプの他オブジェクト・・・例えば、ifHCInOctetsのような物でないと要件を満たせなかったりします。 http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=ja&translate=Translate&objectInput=ifHCInOctets

noname#154560
質問者

お礼

有難うございます。 だいぶ整理できました。有難うございます。 「1, 送受信で発生したフレーム数が累積されるカウンタがあったとき、そのカウンタを一定間隔で取得する」 当方の環境では、これしか方法は無いように思います。 ただこの「カウンタ」というのがどうもピンときません・・。 「受信した総バイト数」と説明がありますが、 「上限(4294967925)を超えると、0に戻る。」ともあり、 一旦クローズさせて頂き、また新規にご質問させてください。 よろしくお願いします。

その他の回答 (5)

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.5

貼られたCiscoのURLを、もう一度見なおしてみることをお勧めします。 式内の変数にはデルタ(差分)を用いている というような事が書いて有りますよね?

noname#154560
質問者

お礼

有難うございます。 確かに「MIB-II の変数はカウンタに保存されるため、2 つのポール サイクルを使用して、この 2 つの値の差を計算します」と書いてありますね・・ 本当はこのURLの「Input Utilization」、「Output Utilization」を使用率と算出して NMSでしきい値を判断したいと思ったのです。 しかし製品としてこれができない、ということがわかりました。 結局、「ifInOctets(オブジェクトを収集する 2 つのポーリング サイクルのデルタ(差分)で、トラフィックのインバウンド オクテットの数)」と「ifOutOctets(ポーリング サイクルのデルタ(差分)で、トラフィックのアウトバウンド オクテットの数)」 の2つを使用し、何ができるのか、やはり良くわからないです・・

  • 774danger
  • ベストアンサー率53% (1010/1877)
回答No.4

> しかし、NMS製品の仕様で計算が出来ないことがわかったのです。 そんな腐ったNMSは捨てたほうがいいでしょう まともなNMSなら計算まで勝手にやってくれます 例えばOpenView NNM http://h30499.www3.hp.com/t5/OpenView%E4%B8%80%E8%88%AC/ifInOctets%E3%81%A8%E3%81%AF/td-p/1180043?profile.language=ja そもそもifInOctetsやifHCInOctetsを見て差分計算して90%を超えたらメールを出す程度ならタダでもMRTGとか使えばできるレベルですし http://e-garakuta.net/techinfo/doku.php/linux/mrtg

noname#154560
質問者

お礼

有難うございます。 当方の認識では、計算は以下を想定していました。 受信 ifInOctets * 800 / ifSpeed 送信 ifOutOctets * 800 / ifSpeed やCiscoの文書でも紹介がありました。 http://www.cisco.com/cisco/web/support/JP/102/1020/1020653_calculate_bandwidth_snmp-j.html 現在の弊社のNMSでは、上記の実装が厳しいと思われます。 仰せの「差分計算」といわれるものは、上記とは別で 何か手法があるのでしょうか・・?。

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

すみません、よくみるとNMSが差分計算どころかただの計算も出来ない仕様っぽいですね・・・ 意見は変わらないのですが、混乱させたかもしれない部分の整理だけしておくと * 計算可能 -> 量から率に変換して閾値を設定可能 * 計算不可 -> 量のままで設定が必要 なので、計算ができない=直接閾値を設定できないかという発想自体は正しいと思います。 上限値が特定できる&取得の都度現在値を返す項目(例えば、ディスクの使用量等)であれば、このアプローチだけで解決できると思います。 ただし、カウンタタイプの値から特定期間内の増加値を抜き出したいとなると、差分比較という条件が真っ先に加わります。 * 差分取得可能 -> 「今回値 - 前回値」 さえ出せば、後は同様。ただし、どこかで0に回る事を常に考慮しないと、役立たずの内容になります。(例えば5分で回転するカウンタを30分間隔で見ていても、その結果に価値は無いですよね) * 差分取得不可 -> ??? パット活用方法が思い浮かびません。

noname#154560
質問者

お礼

有難うございます。 当方の認識では、計算は以下を想定していました。 受信 ifInOctets * 800 / ifSpeed 送信 ifOutOctets * 800 / ifSpeed やCiscoの文書でも紹介がありました。 http://www.cisco.com/cisco/web/support/JP/102/1020/1020653_calculate_bandwidth_snmp-j.html 現在の弊社のNMSでは、上記の実装が厳しいと思われます。 仰せの「差分計算」といわれるものは、上記とは別で 何か手法があるのでしょうか・・?。(初めて知りました) カウンタの前回と今回の差分、とした場合、1Gbsのポートだと その差分がどうあれば正常なのか非常に判断が難しそうですね・・。

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

自分もMIB搭載製品を作る側ではなく、NMS運用側の立場にしか立ったことが無いので詳細な内部仕様までは・・・ イメージとしては、パケット流れる都度インクリメントされる図で捉えています。 この値から使用率を得たいという話は割りと一般的だと思うのですが、それには前述のとおり前回取得値との差分計算が必要になります。 今NMSを謳う製品であれば大体搭載していると思ったんですが、それが無い物をなんとか運用するとなると、その部分だけ賄う簡単なツールをなんとか用意して組み合わせるような手段しか思い浮かびません。 Net-SNMP等使いながらプラグインを自力開発するせよ、別のNMSへ乗り換えるor組み合わせるにせよ、対象のカウンタが64bitであることは常に留意するようにして下さい。 差分計算よりも、64bitカウンタへ対応している製品の方が少ないというのが実感です。

noname#154560
質問者

お礼

有難うございます。 「イメージとしては、パケット流れる都度インクリメント」は 私も同じイメージでした。 当方の認識では、計算は以下を想定していました。 受信 ifInOctets * 800 / ifSpeed 送信 ifOutOctets * 800 / ifSpeed やCiscoの文書でも紹介がありました。 http://www.cisco.com/cisco/web/support/JP/102/10 … しかし現在の弊社のNMSでは、上記の実装が厳しいと思われます。 仰せの「差分計算」といわれるものは、上記とは別で 何か手法があるのでしょうか・・?。(初めて知りました) カウンタの前回と今回の差分、とした場合、1Gbsのポートだと その差分がどうあれば正常なのか非常に判断が難しそうですね・・。

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

ifInOctetsのオブジェクトタイプはCounter32だと思います。 このカウンタタイプというものは、0から始まって総数を貯めていくまさに「カウンタ」の動きをします。 そのため、Counter32の方は今のネットワーク機器が当たり前にこなすポートスピードと相性が非常に悪く、すぐに回ってします。 100Mbpsですら最悪5分程度だったと記憶しているので、1Gbpsポートを監視するのであれば、Counter64タイプが必須だと思っていいんじゃないでしょうか。 どちらにせよカウンタタイプは総数を取得するため、使用率が欲しければNMS側で前回の値を保持しておいて計算する機能が必要になります。 ご注意下さい。 ※参考URLの、「7. Mapping of the OBJECT-TYPE macro」以下にさらっと目を通して下さい。

参考URL:
http://www.ietf.org/rfc/rfc1902.txt
noname#154560
質問者

お礼

有難うございます。 そもそもですがすみません・・「カウンタ」というのは機器内部で どう扱われるのでしょうか?。 パケットが出るたびに、インクリメントされる数値なのでしょうか。。 今回そもそも何をしたいか?、というご説明なのですが、 当初はifInOctetsをインプットにNMS側で計算から使用率(%)を出し、それが90%超過であれば NMS側で管理者にメールを通知するようなことを考えてました。 しかし、NMS製品の仕様で計算が出来ないことがわかったのです。 その対応としてですが、ifInOctetsから直接取得した値を判断し、しきい値を超過すれば 通知しようかと思っています。しかし、そのしきい値に何を設定すれば良いかわからず・・ カウンタにしきい値を設けられるかも、理解できておらず、、 一般的には、ifInOctetsの値を直接判断するようなことは、 やるものなのでしょうか?。 もう少しお付き合いを頂けると助かります。

関連するQ&A

専門家に質問してみよう