MRTG で Load Average をグラフ化する
MRTG で Linux の負荷を示す指標の一つであるロードアベレージ (Load Average)をグラフ化してみます。CentOS 5.4 (64bit) で試しました。とりあえず SNMP と MRTG を同一サーバで動かすという簡単な設定方法を書いています。
SNMP と MRTG のインストール
mrtg、net-snmp、net-snmp-utils のパッケージがインストールされている必要があります。yum でインストールできます。
# yum install -y mrtg net-snmp.x86_64 net-snmp-utils.x86_64
snmpd の設定
/etc/snmp/snmpd.conf を設定します。// 以下は説明なので実際には記述しないようにしてください。
#com2sec notConfigUser default public //コメント化 #group notConfigGroup v1 notConfigUser //コメント化 #group notConfigGroup v2c notConfigUser //コメント化 #view systemview included .1.3.6.1.2.1.1 //コメント化 #view systemview included .1.3.6.1.2.1.25.1.1 //コメント化 #access notConfigGroup "" any noauth exact systemview none none //コメント化 com2sec local localhost hoge-local //コメントを外しコミュニティ名を変更 com2sec mynetwork 192.168.1.0/24 hoge-network //コメントを外しコミュニティ名を変更 group MyROGroup any local //コメントを外す group MyROGroup any mynetwork //コメントを外す view all included .1 80 //コメントを外す access MyROGroup "" any noauth exact all none none //コメントを外し 0→exactに変更 access MyRWGroup "" any noauth exact all all all //コメントを外し 0→exactに変更 syslocation My Office // Unknown から変更。サーバの場所など syscontact fumika <fumika@hoge.example.jp> //サーバ管理者の連絡先 Root のままでも問題なければOK
snmpd を起動する。
# service snmpd start
snmpwalk コマンドを使い動作確認する。Load
# snmpwalk -v1 -c hoge-local localhost .1.3.6.1.4.1.2021.10.1 UCD-SNMP-MIB::laIndex.1 = INTEGER: 1 UCD-SNMP-MIB::laIndex.2 = INTEGER: 2 UCD-SNMP-MIB::laIndex.3 = INTEGER: 3 UCD-SNMP-MIB::laNames.1 = STRING: Load-1 UCD-SNMP-MIB::laNames.2 = STRING: Load-5 UCD-SNMP-MIB::laNames.3 = STRING: Load-15 UCD-SNMP-MIB::laLoad.1 = STRING: 0.22 UCD-SNMP-MIB::laLoad.2 = STRING: 0.18 UCD-SNMP-MIB::laLoad.2 = STRING: 0.15 UCD-SNMP-MIB::laConfig.1 = STRING: 12.00 UCD-SNMP-MIB::laConfig.2 = STRING: 12.00 UCD-SNMP-MIB::laConfig.3 = STRING: 12.00 UCD-SNMP-MIB::laLoadInt.1 = INTEGER: 1 UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 10 UCD-SNMP-MIB::laLoadInt.3 = INTEGER: 9 ……
snmpwalk で通信できない場合は snmpd が起動しているか、コミュニティ名が正しいかどうか確認してください。ローカルホストではなく別のホストから snmpwalk している場合はファイアウォールでポート 161と162 の TCP, UDPがそれぞれ閉じられていないかどうか確認してください。
上記の値が取得できていれば、snmpd の自動起動設定をしておきます。
# chkconfig snmpd on
MRTG の設定
/etc/mrtg/mrtg.cfg を編集して以下の設定を追加します。
MRTG の不便な点として、小数値を直接扱えないということがあります。snmpwalk コマンドの結果を見ると、Load Average の値は .1.3.6.1.4.1.2021.10.1.3.x ですが、小数点以下の数値が無視されてしまいます。そこで、100倍されている .1.3.6.1.4.1.2021.10.1.5.x の値を採用します。この値をグラフの表示の際に 0.01 倍することで MRTG の弱点を回避しています。
さて、Load Average の単位に % を指定している解説ページが散見されますがこれは間違いです。よく誤解されますが、ロードアベレージは CPU 使用率ではありません。
ロードアベレージは単位時間当たりの実行待ちジョブ数です。CPU の処理性能も影響しますが、ディスクI/O などその他の理由で上昇することもあります。また、値が 1(間違った例でいう100%)を超えることはざらにあります。ここでは単位を暫定的にポイント (pt.) としています。
# Load Average Target[load]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:hoge-local@localhost MaxBytes[load]: 10000 Options[load]: gauge,absolute,nopercent,noinfo, YLegend[load]: Load Average YTicsFactor[load]: 0.01 Factor[load]: 0.01 ShortLegend[load]: pt. LegendI[load]: 1分平均 LegendO[load]: 5分平均 Legend1[load]: 1分平均 Legend2[load]: 5分平均 Title[load]: Load Average PageTop[load]: <h1>Load Average</h1> <div id="sysdetails"> <table> <tr> <th>System: </th> <td>My Test Server</td> </tr> </table> </div>
MRTG は cron で 5分おきに設定されるようになっています。以下のコマンドで手動実行します。初回と2回目実行時は古いファイルを削除できないのでかならず警告が出ますが、3回目以降はエラーが出ないはずです。エラーが出る場合は mrtg.cfg の設定が間違っているのかもしれません。
# env LANG=C mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
出力結果の確認
これで、/var/www/html/load.html に結果が出力されているはずです。ブラウザでは http://(サーバ名)/mrtg/load.html になります。/mrtg/ ディレクトリへは初期状態でアクセス制限がされています。/etc/httpd/conf.d/mrtg.conf を編集してローカルネットワークからのアクセスを許可します。
<Location /mrtg> Order deny,allow Deny from all Allow from 127.0.0.1 Allow from 192.168.1.0/24 //←追加 </Location>
# service httpd reload
Apache の設定をリロードすればアクセスできるようになります。日本語部分が文字化けしてしまう場合は、mrtg.cfg ファイルが UTF-8 で保存されていない可能性があります。
なお、Load Average の値が CPU 数を越えるとシステムが過負荷状態と言われますが、原因が CPU にあるとは限りません。メモリやディスク I/O、ネットワークなどがボトルネックになっている可能性がありますので、この値だけを見て CPU を交換したり増設するのはムダになる可能性があります。
CPU Load Averageの設定について大変参考になりました。
有難うございます!!
ただ、MaxBytesの設定値は”100″ですと、実際のロードアベレージが”1″以上に
なりますと、無視されてしまい正常にグラフ化されません。
MaxBytesはグラフ化した値を対象としているのではなく、snmpで取得した値を
対象としていると思われますので、”10000″ぐらいが良いのではないでしょうか。
既にお気付きであれば、出すぎた行為であり、申し訳なく思います。
今後とも、情報提供頑張ってください。
コメント by masa — 2010-06-3 13:31
masa さん、ご指摘ありがとうございます!! 仰るとおり、MaxBytes が 100 だと、LoadAvarage が 1 以上の時にグラフには表示されなくなっていました。訂正致しました。
ありがとうございました。また何かありましたらよろしくお願いします。
コメント by fumi — 2010-06-4 00:16