OpenSolarisにMuninを入れてみた

うちの会社ではリソースのモニタリングにMuninを利用している。自作iSCSIストレージの準備として色々試行錯誤しているんだけど、試しにOpenSolarisにもmunin-nodeを入れてみたのでそのメモ。

インストール

概要
  • OpenSolaris 2009.06へ監視ノードのインストール
  • 今回は安定版(stable)としてリリースされている最新版1.2.6を利用(1.3.4は開発版)
  • muninユーザーを作成してmuninユーザーで動作
  • SMF(Service Management Facility)で管理
作業開始

まずはmuninのダウンロード

# cd /usr/src
# wget http://downloads.sourceforge.net/project/munin/munin%20stable/1.2.6/munin_1.2.6.tar.gz?use_mirror=jaist

実行ユーザーの追加

# groupadd -g 4949 munin
# useradd -u 4949 -g munin -s /bin/sh -d /export/home/munin -m munin

インストールの開始

# tar zxvf munin_1.2.6.tar.gz
# cd munin-1.2.6/

Makefile.configの編集

PREFIX     = $(DESTDIR)/usr/local/munin
CONFDIR    = $(DESTDIR)/usr/local/munin/etc

に変更した。監視ノードのインストールだけなのでこれだけでOK。色々設定をいじるならここで決定して編集しておく。
次にgmakeのインストール。デフォルトのmakeコマンド(Sunのmake)ではコンパイルできない。

# pkg install SUNWgmake

これでmakeコマンドのデフォルトパスが/usr/gnu/bin/makeになる。これは/usr/bin/gmakeにシンボリックリンクされている
次に監視ノードのインストール。今回監視サーバはLinuxで別に立てるので監視ノードのみでOK。

# make install-node install-node-plugins

perlCPANモジュールをインストール。監視ノードではNet::Server::Forkだけあれば動く模様。

# /usr/perl5/5.8.4/bin/cpan 

CPANの初期設定を行い

# cpan> install Net::Server::Fork

で完了。これで起動可能な状態にはなっているはず。

設定と起動

logとpidディレクトリの設定を行う。

# chown munin:munin /var/log/munin
# chown munin:munin /var/run/munin

次に設定ファイル/usr/local/munin/etc/munin-node.confの編集。userとgroupの変更。

user munin
group munin

munin監視サーバからのアクセス許可。以下は例として192.168.1.100が監視サーバとする。複数ある場合は複数行に分けて書く。

allow ^192\.168\.1\.100$

SMFで動作するように設定ファイルを準備する。実はSMFについてはまだ勉強不足なんだけど、xmlファイルで定義を作ってそれを登録してあげれば管理が楽にできるという風に理解している。プロセスが落ちても勝手に再起動してくれる。Linuxでいうdaemontoolsみたいなものかな。
今回は/var/svc/manifest/site/munin-node.xmlにファイルを作成した。
起動や停止のスクリプトは本来/lib/svc/methodに置くのが流儀のようだけど、今回はexec_methodの部分にコマンドを直接指定している。

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type="manifest" name="munin-node">
    <service name="application/munin-node" type="service" version="1">
        <create_default_instance enabled="false"/>
        <single_instance/>
        <dependency name="fs-local" grouping="require_all" restart_on="none" type="service">
            <service_fmri value="svc:/system/filesystem/local"/>
        </dependency>
        <exec_method type="method" name="start" exec="/usr/local/munin/sbin/munin-node" timeout_seconds="60"/>
        <exec_method type="method" name="stop" exec="/usr/bin/pkill munin-node" timeout_seconds="60"/>
        <stability value="Unstable"/>
        <template>
            <common_name>
                <loctext xml:lang="C">Munin node</loctext>
            </common_name>
        </template>
    </service>
</service_bundle>

できあがったファイルでサービス登録

# svccfg -v import /var/svc/manifest/site/munin-node.xml

最後に監視する項目をセッティングする。これはプラグインで行うんだけど、今回の例では/usr/local/munin/etc/plugins以下に/usr/local/munin/lib/pluginsにあるファイルのシンボリックリンクをはる。これは以下のコマンドで自動でセッティングしてくれる。

# /usr/local/munin/sbin/munin-node-configure --shell | sh

ERRORで失敗するものもあるが、セットできるものは/usr/local/munin/etc/plugins以下にシンボリックリンクができている。あとは自分でいらないプラグインを削除(リンクの削除)したり、欲しいプラグインを追加する。
ちなみにmemoryプラグインの中の実行PATHが/usr/local/bin/topになっているので、opensolarisの場合/usr/bin/topに修正すればデータが取得できる。

また、MuninExchangeというMuninのプラグイン配付サイトがあるのでほしい物を探して同じようにリンクをはって追加する。
ここまでくれば起動できるはず。

# svcadm enable munin-node

/var/svc/log/application-munin-node\:default.logや/var/log/munin/munin-node.logを見てエラーが出ていないか確認する。

まとめ

とりあえず今回はOpenSolarisにmuni-nodeを入れてSMFで管理することが目的のお試しインストールだったのでこれでよしとしよう。これだけではデータが足りないのでここから実際に使うには更なる試行錯誤が必要だ。