• ベストアンサー

SNMPのifInOctets

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

noname#154560
noname#154560

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

  • ベストアンサー
  • 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

  • SNMPのifInOctets について

    MRTGなどを使用し、監視対象のネットワーク機器のポートについて その使用率を監視したいと考えています。 例えば1Gbpsのポートで、現在500Mbpsまで送受信している、など これはSNMPのMIB値である、ifInOctetsなどで取得は可能でしょうか?。 ご教授いただけますと幸いです。

  • snmpのカウンタリセットについて

    こんにちは。 MRTGを使用してネットワークトラフィックを調査しようとしているのですが、データが収集できませんでした。 snmpwalkで調べたところ、Counter32 の値が上限である 4294967295 に到達しているため、差分がとれないというのが原因ということが分かりました。 そこで、この Counter32 の値を0にする方法があれば教えて頂きたいと思います。 環境:Redhat 7.3 SNMP: net-snmp-5.0.9-4

  • SNMPのifInOctets について

    SNMPのifInOctetsは、「受信した総バイト数」とありますが、本当に「ブロードキャストパケット、マルチキャストパケット、ユニキャストパケット」すべての総バイト数、と理解してよいのでしょうか? http://www.itmedia.co.jp/enterprise/articles/0705/21/news015_6.html

  • ifInOctetsとifOutOctet

    度々すみません、 SNMPの知識が浅く、理解に苦しんでいます。 ifInOctetsとifOutOctetsですが、少し基礎から整理したいと思います。 お付き合い頂けると助かります。 Q1. 先ずこれらが持つ数値データは、「受信した総バイト数」、 「送信した総バイト数」という認識で良いでしょうか?。 Q2. またこれらは「カウンター型」とあるのですが、 例えば1バイトを送信したら1ずつインクリメントされるような イメージでしょうか?。 32bitカウンタの場合、上限(4294967925)を超えると、0に戻ると 下記サイトに記載があります。 http://www.itmedia.co.jp/enterprise/articles/0705/21/news015_3.html この「4294967925」は「バイト数」なのでしょうか?。 ※およそこの値まで送受信バイト数をカウント可能、という認識です。 Q3. 最終的には、「トラフィック監視」として、 このカウンタを一定間隔で取得し、それがしきい値を超過したら エラーとして通知したいと考えています。 しかしこれが果たして、しきい値として使用できるか、、 整理できず悩んでいます。 というのも、「受信した総バイト数」、という累計値のような表現が 気になっていまして、今回やりたいのは、例えば回線が1Gbpsの上限があり、 ポーリング時に機器のポート使用が800Mbpsを超過している場合に通知したいのです。 (通常は、数十Mbps程度の想定です) 負荷の有無に関わらず、累積でどんどんカウンターが積みあがって、 指定した値を超過したら1回通知して、その後カウンター上限を超えて0に戻り、 また指定した値を超過したら・・という動きだと どうも趣旨が違うような気がするのです。。 以上の3点の認識は正しいでしょうか?。 ご指摘など頂けると大変助かります。 ちなみにNMSがifspeedとの帯域使用率の計算をサポートしてないため、 上記のような対応をせざるを得ない状況なのです・・。 よろしくお願い致します。

  • SNMPでCBWFQの状態を取得したいです

    こんばんは。 どうしてもわからない事があり、御存じの方がいらっしゃればご教授頂きたく。 現在、WANルータにおいて、CBWFQを用いて制限を掛けています。 制限対象はFTP通信で、最低保証帯域などをbandwidthで設定しています。 この通信が日頃どのくらい使われているのか、そういったことを把握したいと 考えています。 ルータのCPUや各インターフェイスの利用状況などはSNMPで監視しておりますが、 このCBWFQの設定単位でSNMPの情報が取れたら、また、グラフ化出来たらよいなと 思っています。 きっとMIB2ではなくて、ベンダMIBになるんだろうなと推測していますが、 一体どのMIBのどの値を拾えばよいのか皆目見当が付きません。 どなたかお分かりになりますでしょうか。 どうぞよろしくお願いします。

  • LinuxでMRTGとsnmpwakerの使い方に

    LinuxでMRTGとsnmpwakerの使い方について教えて下さい。 http://www.atmarkit.co.jp/flinux/rensai/root08/root08c.html ↑を参照してMRTGを構築しました。 ですがhttpdのプロセスの数が取得できません。 snmpwalkerコマンドをたたくと以下のようになり11で値はとれていそうです。 [root@localhost ~]# snmpwalk -v 1 -c public 192.168.1.50 .1.3.6.1.4.1.2021.2.1.5.1 UCD-SNMP-MIB::prCount.1 = INTEGER: 11 [root@localhost ~]# snmpwalk -v 1 -c public 192.168.1.50 .1.3.6.1.4.1.2021.2.1.5 UCD-SNMP-MIB::prCount.1 = INTEGER: 11 [root@localhost ~]# snmpwalk -v 1 -c public 192.168.1.50 .1.3.6.1.4.1.2021.2.1 UCD-SNMP-MIB::prIndex.1 = INTEGER: 1 UCD-SNMP-MIB::prNames.1 = STRING: httpd UCD-SNMP-MIB::prMin.1 = INTEGER: 1 UCD-SNMP-MIB::prMax.1 = INTEGER: 20 UCD-SNMP-MIB::prCount.1 = INTEGER: 11 UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0 UCD-SNMP-MIB::prErrMessage.1 = STRING: UCD-SNMP-MIB::prErrFix.1 = INTEGER: 0 UCD-SNMP-MIB::prErrFixCmd.1 = STRING: [root@localhost ~]# mrtg.confは Target[httpd]: .1.3.6.1.4.1.2021.2.1.5.1&.1.3.6.1.4.1.2021.2.1.5.1:public@192.168.1.50: のようにかいています。 どこか間違っていますでしょうか? また [root@localhost ~]# snmpwalk -v 1 -c public 192.168.1.50 .1.3.6.1.4.1.2021.2.1.5.1 UCD-SNMP-MIB::prCount.1 = INTEGER: 11 [root@localhost ~]# snmpwalk -v 1 -c public 192.168.1.50 .1.3.6.1.4.1.2021.2.1.5 UCD-SNMP-MIB::prCount.1 = INTEGER: 11 で同じ値がかえっていますが、Target[httpd]: .1.3.6.1.4.1.2021.2.1.5.1&.1.3.6.1.4.1.2021.2.1.5.1と指定しなければいけないのでしょうか?

  • snmp counter64 を計算する方法

    いつもお世話になります ちょっとしたNW機器のCPU負荷をMRTGで表示しようとしています。 snmpで得られる値が、実行ステップ数とトータルステップ数を counter64 で返すようになっています。 そのため、シェルスクリプトで計算した結果を mrtgに取り込ますようにしたいと考えています。 64bitの数値をスクリプト内で処理させると、 桁あふれしているようで、単純に値を代入しただけでも、 値が変わってしまうようです。 何かうまい方法をご存知ありませんでしょうか。

  • fInOctetsからの使用率の求め方

    よろしくお願いします。 NW機器のポートの使用率(帯域使用率?)を監視したいと思います。 SNMPマネージャから、NW機器に対してSNMPポーリングを実行し fInOctetsを取得します。 そこでfInOctetsの前回取得値と、今回取得した値の差分値を計算すれば、 使用率を出すことは可能なのでしょうか?。 差分値から使用率・・というのがどうもピンときていないのですが・・

  • DMIについて

    DMI(デスクトップ管理インタフェース)について質問です。 PC等のMIFの値を参照していると思いますが、リモートからこの値を参照する場合、どのようなパケットが 送受信されるのでしょうか? 例えば、MIBファイルの参照の場合には、SNMPパケットが流れると思いますが、MIFファイルの参照の場合には、 どんなプロトコルが使用されるのでしょう? DMIパケットというものはないと認識しているのですが、初心者なもので、あまり自信がありません。 急いでいますので、宜しくお願いします。

  • SNMPマネージャAPIでメモリリークしてしまう

    初めて投稿します。 ネットワークに接続したプリンタ4台を、SNMPを使って状態監視するソフトを作成しています。以下のソース(文字数制限のため、大半をコメントで記述しています)を実行すると、SnmpMgrRequest()関数内でメモリリークを起こします。 この関数の戻り値はエラーではありません。しかもプリンタ1台のみを監視するとメモリリークしません。この関数をコメント化しても起きません。 SNMPは始めてなので何が悪いのかよくわかりません。 どなたか何かご存知であればご教示お願いします。 開発環境はWindowsXP(SP1) VC++6 SP5を使用しています。 (ソースの拡張子は.cです。) void main(){ while(1){ for (i = 0 ; i < 4 ; i++) { mib=StsGet([プリンタのIPアドレス]); } Sleep(600); } } int StsGet(LPSTR adr) { //SnmpUtilMemAlloc ()でSNMPエージェントのアドレス取得 //SnmpUtilMemAlloc()でコミュニティ取得 //変数バインディングの初期化 //SnmpMgrStrToOid()でOIDを文字列から値に変換 //SnmpUtilMemReAlloc ()で変数バインディングにメモリを割当て //変数バインディングにOIDを追加 //SnmpMgrOpen ()でSNMPマネージャAPIのオープン(タイムアウト:100ms、リトライ:1回) // SnmpMgrRequest()でSNMPマネージャAPIに指定操作(Get)を要求 //SnmpUtilVarBindListFree(),SnmpUtilMemFree()で各変数を解放 //SnmpMgrClose()でSNMPマネージャAPIとの接続を終了 return [プリンタ状態;] }