MRTG で Load Average をグラフ化する

2010-4-16 10:00
このエントリーをはてなブックマークに追加

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 を交換したり増設するのはムダになる可能性があります。

  • ブックマーク : アクセス: 25,133回
  • カテゴリー : Linux
  • キーワード : , ,

2件のコメント

  1. CPU Load Averageの設定について大変参考になりました。
    有難うございます!!

    ただ、MaxBytesの設定値は”100″ですと、実際のロードアベレージが”1″以上に
    なりますと、無視されてしまい正常にグラフ化されません。
    MaxBytesはグラフ化した値を対象としているのではなく、snmpで取得した値を
    対象としていると思われますので、”10000″ぐらいが良いのではないでしょうか。

    既にお気付きであれば、出すぎた行為であり、申し訳なく思います。

    今後とも、情報提供頑張ってください。

    Comment by masa — 2010-06-3 13:31

  2. (thumbnail)

    masa さん、ご指摘ありがとうございます!! 仰るとおり、MaxBytes が 100 だと、LoadAvarage が 1 以上の時にグラフには表示されなくなっていました。訂正致しました。
    ありがとうございました。また何かありましたらよろしくお願いします。

    Comment by fumi2010-06-4 00:16

現在、コメントフォームは閉鎖中です。

23 queries. HTML convert time: 0.449 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2013 @ futuremix.org ログイン