この特集のトップページへ
この回のトップページへ

●ロードアベレージと空きメモリ容量を取得するには

 説明はこのぐらいにして,実際にsnmpdが出力するデータのうち,ロードアベレージ情報と空きメモリ情報を指定する方法を説明する。

 まずは,ロードアベレージ情報を取得する方法を考える。ロードアベレージ情報はlaTableサブツリー1.3.6.1.4.1.2021.10)のlaLoadInt1.3.6.1.4.1.2021.10.1.5.i)を通じて取得できる。laLoadIntは,ロードアベレージ値を百分率として表現した整数を保持するオブジェクトだ。


laTableサブツリーには,laLoadInt以外にもlaLoad(文字列として保存)というオブジェクトもあるが,MRTGでは文字データをグラフ化することはできない。

 先に説明したように,MRTGでは1つのデータを取得して表示するというわけにはゆかず,必ず2つのオブジェクトを指定しなければならない。そこでここでは,5分間の平均ロードアベレージ値を示す1.3.6.1.4.1.2021.10.1.5.2と15分間の平均ロードアベレージ値を示す1.3.6.1.4.1.2021.10.1.5.3の値をグラフ化することを考える。それには,cfgファイルにList 4のような行を追加すればよい。

 List 4では,ロードアベレージのグラフに“cpu”という統計情報名を付けた。そして,Target行で,5分間の平均ロードアベレージ値を示す“1.3.6.1.4.1.2021.10.1.5.2”と15分間の平均ロードアベレージ値を示す“1.3.6.1.4.1.2021.10.1.5.3”を指定している。

 ロードアベレージ値は,差を計算されたり,時間で割られたりしては困るので,Option行にgaugeabsoluteを指定をしている。また,ロードアベレージ値では,0は有効な値だからwithzerosを指定して0を無視しないように,そして,もとが百分率なのにさらにパーセント表示しても無意味なので,nopercentを指定した。なお,MaxBytes行の指定は2000(2000%,ロードアベレージ20に相当)としてある。実際にこんなにロードアベレージ値が大きくなることはないから,もっと少ない値を指定してもよい。もっとも多少大きな値を指定しても,AbsMax行の指定をしない限り,値が収まるように適時グラフが拡大縮小されるので問題ない。


とはいえパーセント表示するときには,値÷MaxBytesを百分率にしたものが併記される。よって,正しくパーセント表示したいときには,MaxBytesの値を指定しておいたほうがよい。また,MaxBytesはデータ1とデータ2の両者の最大値を設定するものだが,代わりにMaxBytes1MaxBytes2を使うと,データ1の最大値とデータ2の最大値を個別に指定することができる。

 その他のYLegendShortLegendLegend1Legend2などはグラフ軸の名前や単位を設定する部分だ。

 実際にList 4に示した文をcfgファイルに加えたのちmrtgコマンドを実行すれば,cpu.htmlファイルが(WorkDir行で指定したディレクトリに)作られる。cpu.htmlファイルをWebブラウザで表示すると,Fig.8のようになる。

Fig.8 cpu.htmlファイルを参照したところ
fig_08

 同様の方法で,空きメモリ容量をグラフ化することもできる。ここでは,実メモリの空き容量とスワップファイルの空き容量を1つのグラフにまとめてみよう。この2つの値は,memoryサブツリー1.3.6.1.4.1.2021.4)のmemAvailRealオブジェクト(1.3.6.1.4.1.2021.4.6)とmemAvailSwapオブジェクト(1.3.6.1.4.1.2021.4.4)に保存されている(どちらもキロバイト単位)。よって,cfgファイルにList 5に示すような行を追加すればよい。

 List 5の設定は,List 4とほぼ同じで,基本的には,Target行で取得するオブジェクトのOIDが違うだけだ。ここでは,統計情報名として“mem”を指定してある。


Target行では,memAvailRealmemAvailSwapのOIDのうしろに“.0”を付けている点に注意したい。memAvailRealmemAvailSwapは,配列構造ではないから,値を取得するためにOIDのうしろに“.0”を付けなければならない。

 List 5では,値の最大値をMaxBytes行ではなく,MaxBytes1行とMaxBytes2行に分け,それぞれ別の最大値を指定している。Target行では,データ1が実メモリの空き容量(memAvailRealオブジェクト),データ2がスワップファイルの空き容量(memAvailSwapオブジェクト)に指定してある。そのため,MaxBytes1行には実メモリの空き容量の最大値を,MaxBytes2行にはスワップメモリの空き容量の最大値をそれぞれ指定することになる。ここでは前者を128000(128Mバイト),後者を256000(256Mバイト)としたが,環境に合わせた容量を指定してほしい。この値は,グラフとともに表示されるパーセンテージ値の算出に使われるので,正しく設定しないと,パーセンテージ値が実際と違うものになる。

 List 5cfgファイルに加えたのちmrtgコマンドを実行すると,mem.htmlファイルが(WorkDir行で指定したディレクトリに)作られる。mem.htmlファイルをWebブラウザで表示すると,Fig.9のようになる。


Fig.9を見るとわかるように,表示されるグラフはキロバイト単位なので,やや見づらいと感ずるかも知れない。もしメガバイト単位にしたいのであれば,YTicsFactorの値に0.001を指定すればよい。つまり,“YTicsFactor[mem]: 0.001”という行を加える。そうすれば,値に0.001を乗算した結果がグラフとして表示されるので,結果としてメガバイトに換算したグラフになる。

Fig.9 mem.htmlファイルを参照したところ
fig_09

 今回は,ロードアベレージと空きメモリ容量の取得しか説明していないが,cfgファイルを変更することにより,SNMPエージェントが吐き出す任意のデータをグラフ化することができる。つまり,オブジェクトのOIDさえ指定すれば,いかなるデータもグラフ化できるということだ。

 ところで今回は,snmpdが吐き出すSNMPデータをグラフ化する方法について説明したわけだが,対象となるSNMPエージェントはどのようなものでもかまわない。たとえば,ルーターやインテリジェントハブ,ネットワークプリンタなどが吐き出すSNMPデータを取得してグラフ化することももちろんできる。ただし,その場合,SNMP対応機器のどのOIDにどのようなデータが格納されているのかを知っていることが前提となる。多くのネットワーク機器はmib-2サブツリーには対応している。よって,ほとんどの機器のトラフィック情報(interfacesサブツリーの情報)はグラフ化できる。しかしそれ以外にどのようなデータが格納されるのかは,メーカー依存の場合も多い。いくつかのメーカーは,各機器用の管理情報領域の構造を記した「MIBファイル」を提供しているので,それらを参照し,OIDを調べることになるだろう。


MIBファイルは,ASN.1という書式で記述されているので,その書式を知らなければならない。しかし,ASN.1形式はさして複雑ではないので,MIBファイルの記述内容とsnmpwatlkコマンドを使って取得できるオブジェクトの一覧とを照らし合わせれば,理解するのはそんなに難しくはない。

PREV 34/36 NEXT