freebsd

今回Muninを使ってサーバを監視するシステムを構築できたので記事にまとめておきます。

Muninを導入するメリット

以前Twitterでメモしておいた負荷監視のソフトでMuninを見つけました。

他にもいろいろなソフトがあるんですが、Muninは導入が手軽という情報を知ったので導入してみました。
そして何よりプラグインがかなり豊富です。ApacheやMySQL、HDDの温度及びS.M.A.R.T.など可視化&ログに残せれます。
しかし他のソフトを導入した事が無いので手軽かどうかは分からないのですが、正直Muninでも結構躓いた...。

参考: MRTGよりお手軽に負荷やトラフィックをグラフ化できる「Munin」

インストール方法

まずはportからインストール。
cd /usr/ports/sysutils/munin-node (情報収集ノード)
make install clean
cd /usr/ports/sysutils/munin-master (情報を表示する管理サーバ)
make install clean
Muninはsysutilsにあります。munin-nodeは情報を取得するクライアント、munin-masterはクライアントのデータを表示するサーバです。このほかにmunin-commonという必要なコンポーネントもありますが、上記二つのインストール時に自動的にインストールされました。インストール時にはftpの取得もあるのでファイアウォールで制限している場合には注意。
あと自分の環境では名前は忘れてしまいましたがdevel/ にあるPerlのモジュールが必要でした。エラー文からその都度モジュールのインストールをしましょう。
Would you like me to set up log rotation [y]? y (ログローテンションの有効化)
********************************************************************
Unless this file already existed, a sample configuration file
has been placed in /usr/local/etc/munin/munin-node.conf.

Please edit it according to your needs.

********************************************************************

The Munin client will *not* be started automatically. To allow it
to start, put this line in /etc/rc.conf:

munin_node_enable="YES"

Then, it will be started on the next boot. If this line is already
present, the client will be started now.  Otherwise, edit
/etc/rc.conf and execute this command:

    /usr/local/etc/rc.d/munin-node start
********************************************************************

vi /etc/rc.conf

munin_node_enable="YES"


service munin-node start

munin-masterのインストール

********************************************************************
Unless this file already existed, a sample configuration file
has been placed in /usr/local/etc/munin/munin.conf.

Please edit it according to your needs.

The Munin server will be run from cron under the user 'munin'.
********************************************************************

Munin-masterのインストールで自動的にユーザmuninが作成されます。ここで注意するのがmunin-nodeはroot権限で動作される事。私はmunin-nodeをmuninで動作させていたため、かなり躓きました。

インストール参考: munin を用いたシステム監視
追記:いつも参考にしているこのページは九州大学の研究室なんですねー

設定

まずは/usr/local/etc/munin/munin-node.confから
vi /usr/local/etc/munin/munin-node.conf

user root
group wheel
#ルートで実行されるよう確認
今回はクライアントとサーバを一台で構築するのでいいのですが、MuninはWindowsや他のUnixサーバのノードの情報も管理できるのでそれらの設定ではこのmunin-node.confのhostなどを設定しましょう。

次にMuninを表示するApache関連の設定。
Muninは/usr/local/www/muninにディレクトリが作成されますが、htmlファイルの作成ディレクトリは /usr/local/etc/munin/munin.confで設定できます。
vi  /usr/local/etc/munin/munin,conf

htmldir /usr/local/www/munin
あとはこのwww/muninディレクトリをhttpd.conf内でAliasを設定し、ローカル内のみのアクセスを許可するなど各自設定をしましょう。ちなみにこのmunin.confでは後述するcgi出力の切り替えなども設定できます。
muninは基本的にhtmlファイルにグラフを書き出す形になります。このプログラムの実行はユーザmuninが実行します。ですのでwww/muninディレクトリは権限がmuninである必要があります。
chpass munin
#Shellの部分を /usr/sbin/nologin→/bin/shに変更
Shell: /bin/sh

su - munin
/usr/local/bin/munin-cron
crontab -e
#5分毎に/usr/local/bin/munin-cronが実行できるよう設定されているか確認

#設定後muninをnologinに修正
chpass munin
Shell: 
/usr/sbin/nologin
ユーザmuninでmunin-cronを実行する必要があるため、一度chpassでmuninのnologinからコマンドを実行出来るよう設定を変更しています。設定後はきちんとnologinに戻しましょう。

ここで一度ブラウザでアクセスしてみましょう。設定がきちんとされていればMuninのログ収集の結果が見れるはずです。もし問題がある場合には/var/log/muninのmunin-node.logなどを確認しましょう。

応用編

応用というかプラグインの追加を自分が苦労したところなども合わせて紹介したいと思います。
まずMuninは多くのプラグインがあるのですが、それらのプラグインを確認するのに便利なmunin-node-cofigureというコマンドがあります。実際には
munin-node-configure --suggest (プラグインが有効か否か表示)
munin-node-configure --shell (プラグインを有効に出来る場合設定コマンドを表示)
などがあります。基本的にMuninのプラグインを有効にするには/usr/local/etc/munin/pluginsのディレクトリに/usr/local/share/munin/pluginsのシンボリックリンクを張る感じなので、munin-node-configure --suggestをしてSuggestionsがyesになれば--shellでシンボリックリンクのコマンドを表示してくれます。逆にシンボリックリンクを削除すれば無効化出来ます。
ここでhdd関連の設定を紹介。
hddtemp_smartctlとsmart_プラグインを有効化するにはsmartmontoolsのインストールが必要です。
cd /usr/ports/sysutils/smartmontools
make install clean
次にpluginsの設定ファイルを設定
cd /usr/local/etc/munin/plugin-conf.d
vi plugins.conf

[hddtemp_smartctl]
user root
env.smartctl /usr/local/sbin/smartctl
env.drives adX
#Xは/devで確認し適切な数字を入れてください。FreeBSDではad(IDE/ATA)やada(SATA)などです。

[smart_*]
user root
env.smartpath /usr/local/sbin/smartctl

munin-run プラグイン名
service munin-node restart
munin-runはプラグインが動作するか確認する事が出来るコマンドです。この設定をした後にmunin-node-configure --suggestを実行してみてください。恐らくプラグインの設定が完了できたはずです。その後は--shellでシンボリックリンクを張れば設定完了。ちなみにenv.~となっているのはプラグイン毎のオプション指定であり、各プラグインに必要なオプションは/usr/local/share/munin/pluginsのソースコードを見れば書いてあるので各自参照して下さい。

参考
munin で困ったときは munin-node-configure してみる
muninのプラグインの追加/削除
smartctl の出力についてまとめてみた

さらに追加でMuninはcronによるhtml出力以外にcgiで動的に生成する事も可能です。この場合複数ノードの情報を管理するMuninサーバですとかなりリソースの面で有効だそうです。ただ私は構築は出来なかったので参考になるWebサイトだけメモしておきます。
参考
MuninのグラフをCGIリアルタイム生成して負荷軽減する方法(munin-cgi-graph)
muninのグラフを画面表示時に動的に生成