MuninをCentOSでセットアップしてみた

投稿日:

今のサーバーに移行してから既に1年以上経つのですが、リソース監視的なことをしてなかったので Munin というツールをインストールしてみました。

先代の CentOS サーバーでは MRTG を使っていましたが、インストールが簡単そうだった事と、取得できるデータが MRTG に比べて多そうだったことが、今回 Munin に変えた理由です。

もちろん MRTG でも Cacti でも良かったんですが、兎に角インストールが簡単そうだったので試してみました。

インストール

Munin はデータを集計するためのパッケージと munin と、データを取得するためのパッケージ munin-node の2つのパッケージに分かれているので、1台のサーバーで運用するためには、munin と munin-node の2つのパッケージをインストールする必要があります。

が、RPMforge が有効になっている環境なら yum で普通にインストールするだけ。

# yum install munin munin-node
CentOS で RPMforge を有効にする手順はこちらのページが詳しいです。

で、Munin の設定を行うわけですが、こだわりがなければ特に設定を変更する必要は無いと思います。

データを収集するために munin-node のサービスを起動。

# service munin-node start

次回から自動的にサービスが起動するようにしておきます。

# chkconfig munin-node on

Web サーバーの設定

私の環境では VirtualHost で数サイトをホストしている関係で、特定のサイトでしか見れない状態にしたかったので色々と設定が必要でしたが、一般的な環境なら、既に /etc/httpd/conf.d/munin.conf で ScriptAlias と Alias の設定がされているので Apache をリロードするだけで OK な場合がほとんだと思います。

# service httpd reload

もし 404 エラーなどが出るなら Order や Allow ディレクティブの内容を確認し、必要なら Location や Directory で設定してあげれば良いと思います。

<Location /munin>
 Order allow,deny
 Allow from all
</Location>

これで、http://(サーバー名)/munin/ などにアクセスするとサーバーのステータスが表示されるようになるのですが、項目によっては別途設定が必要なものもあったので、私の環境で起きた問題と対策を書きます。

HDD の温度を計測する

私の環境では上記の手順でインストールしただけでは HDD temperature の値は取得出来なかったので、以下の対応を行いました。

/etc/munin/plugin-conf.d/hddtemp_smartctl を開き、以下のように編集。

[hddtemp_smartctl]
user root
env.drives sda sdb
env.type_sda ata
env.type_sdb ata

これは、SATA のディスクが 2つ接続されている場合の例なので、各自の環境に合わせて変える必要があると思います。

で、munin-node を再起動。

# service munin-node restart

これで、HDD の温度を取得できるようになります。

Pangoエラー対応?

データは取得できるようになったのですが、5分おきに以下のようなエラーメールが届くようになりました。

Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()

よく分からないのですが、どうやら HDD temperature のグラフを生成する際に利用しているプラグインの記述に°(度)が含まれているのが問題のようです。

まぁ、値自体は取得できてるしグラフも出力されているので実害はないですが、メールがうざいので対応します。

/etc/munin/plugins/hddtemp_smartctl を開き、138行目当たりにある以下の部分を修正し、°を除去。

print "graph_vlabel temp in °C\n";
                            ↓
print "graph_vlabel temp in C\n";

別に削除じゃなくて、他の表記に変えてもいいと思います。

SELinux対応

我が家の環境は SELinux を有効にしているのですが、そうしたら以下のようなエラーが警告が記録されました。

SELinux is preventing ethtool (ifconfig_t) "read write" to socket (initrc_t).

ethtool が何をしているのかは分かりませんが、ネットワーク関係の情報は取得できているので問題ないと思います。
が、警告が出力され続けるのも嫌なので対応しました。

ポリシーを作成。

# audit2allow -M mymunin < /var/log/audit/audit.log
******************** IMPORTANT ***********************
To make this policy package active, execute:
 
semodule -i mymunin.pp

出来た mymunin.te の中身は以下のような感じ。

module mymunin 1.0;
 
require {
        type ifconfig_t;
        type initrc_t;
        class tcp_socket { read write };
}
 
#============= ifconfig_t ==============
allow ifconfig_t initrc_t:tcp_socket { read write };

モジュールを組み込みます。

# semodule -i mymunin.pp

これで、警告も出なくなりました。


なんかダラダラ長く書いてしまったので面倒に感じるかも知れないですが、凝った構成のサーバーでなければ、yum でインストールしてサービスを起動し、Apache を再起動するだけで MRTG と同等以上の情報を得ることが出来ます。

見難いかも知れませんが、私の環境ではこんな感じのデータが出力されました。

ところどころデータが正しく取得できてないような部分もありますが、概ねいい感じで使えるツールですね。

更新日: