Munin でサーバを監視するには、munin-node が必要。けれど、munin-node が入らない場合、pmmn を使う方法があります。pmmn ( A Poor Man’s Munin Node ) は munin-node の代替ツールで、munin-node が動作しない環境からもデータを取得出来ます。そんな、pmmn のセットアップと使い方を紹介します。
■ pmmn は munin-node の手軽な代替ツール
pmmn は munin-node 代替ツールです。Munin 開発者の Steve Schnepp 氏が Github に公開しています。pmmn は、’A Poor Man’s Munin Node‘ の略で、’お手軽な munin-node’ といった意味合いです。その名前の通り、munin-node が多くの CPAN で配付されている Perl モジュールが必要なのに対して、pmmn はモジュールを殆ど必要としません。
pmmn は Perl で記述されていて、常駐デーモンはありませんが、munin-node と同じようにデータを返すことが出来ます。動作は munin-node のエミュレータとして動作し、Munin が使っている LIST や FETCH などのプロトコルを利用可能です。 munin-node は Port 4949 を Listen しながら通信を行います。pmmn は、xinetd 等のスーパーサーバ経由で、必要があれば呼び出され、標準入出力を通し、要求に応じたデータを返します。
- munin-node … デーモン(常駐)
- pmmn … 常駐しない(xinetd 経由で動作)
pmmn が向いているのは、OS 環境が古い場合です。最近のディストリビューションであれば、Munin のバイナリパッケージが用意されており、セットアップは手軽です。ですが、少し古めの環境になると、munin-node の環境構築だけでも大変な場合があります。特に node は沢山の Perl モジュールが必要です。そんな場合、気合と根性で munin-node を入れるよりは、pmmn を入れる方が手軽な場合があります。
一方で、pmmn は、一部の Munin プラグインを使えません。多くの標準プラグインに対応しているものの、Perl モジュール Munin::Plugin を用いている複雑なプラグインのデータを取得できないためです(df など)。それ意外は、普通の munin-node と同様です。
もし、これまで munin-node のセットアップに挫折した環境があれば、セットアップをお試しいただければと思います( ^ω^) かくいう私も、ある環境で CPAN の環境構築に凹みそうになっていた所を、pmms に救われました。
■pmmn のセットアップ方針
pmmn を動かすには、いくつかの方法があります。当記事では、Linux 上で比較的に手軽な xinetd を使い、ポート 4949 で pmmn をオープンする方法をご紹介します。ファイルを /usr/local/sbin/ に置き、セキュリティ設定を施します。
- pmmn は /usr/local/sbin/ に置く
- xinetd 経由
- /etc/hosts.allow , /etc/hosts.deny でアクセス制限
- pmms が参照するプラグインの場所は /etc/munin/plugins/ とする
- プラグインの実体は /usr/share/munin/ とする
他にも、inetd を経由したり、ssh でデータ取得する方法がありますが、詳細は、開発者さんの blog 記事も併せてご覧下さい。
■pmmn のセットアップ
まずはじめに、 pmmn をサーバにダウンロードします。
$ wget https://raw.github.com/munin-monitoring/contrib/master/tools/pmmn/bin/pmmn
ファイルを /usr/local/sbin/ に起き、パーミッション設定を行います。
# cp ./pmmn /usr/local/sbin/pmmn # chown root.root /usr/local/sbin/pmmn # chmod 755 /usr/local/sbin/pmmn
念の為、Perl の構文チェックに異常が無い事を確認します。
# perl -cw /usr/local/sbin/pmmn
/etc/services に Port 4949 の pmms 用サービスを追加します。
# echo 'pmmn 4949/tcp # Poor Man's Munin Node (pmmn)' >> /etc/services
/etc/xinet.d/pmmn を作成します。
service pmmn { disable = no socket_type = stream wait = no user = root env = MUNIN_LIBDIR=/usr/share/munin server = /home/pmmn/bin/pmmn server_args = --plugin-dir=/etc/munin/plugins }
※ MUNIN_LIBDIR の環境変数指定は必須です。後ほど /usr/share/munin にプラグインを起きますが、設置場所を変える場合、この記述の変更を行わないと動作しません。
※–plugin-dir の指定も同様です。/etc/munin/plugins/ には、シンボリック・リンクを作成し必要なプラグインを置きます。
設定を有効にするため xinetd を再起動します。
# /sbin/service xinetd restart xinetd を停止中: [ OK ] xinetd を起動中: [ OK ]
次に、プラグイン実体を置きます。まずは展開用のディレクトリを作成します。
# mkdir /usr/share/munin/
つぎにプラグインの設置ですが、ソースからコンパイルする方法と、他の Linux サーバから持ってくる方法があります。後者の場合のほうが、手軽です。ここでは、一応正攻法(?)で試みます。
Munin のソースからプラグインを構築します。
$ wget http://jaist.dl.sourceforge.net/project/munin/stable/2.0.14/munin-2.0.14.tar.gz $ tar xvfz munin-2.0.14.tar.gz $ cd munin-2.0.14 $ vi Makefile.config
Makefile.config で「LIBDIR」の行を探し出し、書き換えます。
# Where to put internal binaries and plugin repository #LIBDIR = $(PREFIX)/lib LIBDIR = /usr/share/munin/
書き換えたら、プラグインをインストールします。
# make install-node-plugins
次に、プラグインを有効にするため /etc/munin/plugins/ に、利用するプラグインのシンボリック・リンクを作成します。まずはディレクトリを作成します。
# mkdir -p /etc/munin/plugins
それから、シンボリックリンク・リンクを作成します。
ln -s '/usr/share/munin/plugins/acpi' '/etc/munin/plugins/acpi' ln -s '/usr/share/munin/plugins/cpu' '/etc/munin/plugins/cpu' ln -s '/usr/share/munin/plugins/entropy' '/etc/munin/plugins/entropy' ln -s '/usr/share/munin/plugins/forks' '/etc/munin/plugins/forks' ln -s '/usr/share/munin/plugins/fw_packets' '/etc/munin/plugins/fw_packets' ln -s '/usr/share/munin/plugins/if_' '/etc/munin/plugins/if_eth0' ln -s '/usr/share/munin/plugins/if_' '/etc/munin/plugins/if_eth1' ln -s '/usr/share/munin/plugins/if_err_' '/etc/munin/plugins/if_err_eth0' ln -s '/usr/share/munin/plugins/if_err_' '/etc/munin/plugins/if_err_eth1' ln -s '/usr/share/munin/plugins/interrupts' '/etc/munin/plugins/interrupts' ln -s '/usr/share/munin/plugins/irqstats' '/etc/munin/plugins/irqstats' ln -s '/usr/share/munin/plugins/load' '/etc/munin/plugins/load' ln -s '/usr/share/munin/plugins/lpstat' '/etc/munin/plugins/lpstat' ln -s '/usr/share/munin/plugins/memory' '/etc/munin/plugins/memory' ln -s '/usr/share/munin/plugins/munin_stats' '/etc/munin/plugins/munin_stats' ln -s '/usr/share/munin/plugins/netstat' '/etc/munin/plugins/netstat' ln -s '/usr/share/munin/plugins/nfs4_client' '/etc/munin/plugins/nfs4_client' ln -s '/usr/share/munin/plugins/nfs_client' '/etc/munin/plugins/nfs_client' ln -s '/usr/share/munin/plugins/open_files' '/etc/munin/plugins/open_files' ln -s '/usr/share/munin/plugins/open_inodes' '/etc/munin/plugins/open_inodes' ln -s '/usr/share/munin/plugins/postfix_mailqueue' '/etc/munin/plugins/postfix_mailqueue' ln -s '/usr/share/munin/plugins/proc_pri' '/etc/munin/plugins/proc_pri' ln -s '/usr/share/munin/plugins/processes' '/etc/munin/plugins/processes' ln -s '/usr/share/munin/plugins/swap' '/etc/munin/plugins/swap' ln -s '/usr/share/munin/plugins/threads' '/etc/munin/plugins/threads' ln -s '/usr/share/munin/plugins/uptime' '/etc/munin/plugins/uptime' ln -s '/usr/share/munin/plugins/users' '/etc/munin/plugins/users' ln -s '/usr/share/munin/plugins/vmstat' '/etc/munin/plugins/vmstat'
必要に応じて書き換えて下さい。また、プラグインによっては Perl のモジュールが足りないと動作しないので注意が必要です。
これで一通りの準備が終わりました。動作テストしてみます。telnet または nc コマンドで、ポート 4949 に対して接続を試みます。
$ nc localhost 4949
‘LIST’ や ‘FETCH load’ を実行して、正常に応答があるかどうか確認します。次の実行結果は、正常な場合です。
$ nc localhost 4949 # munin node at localhost LIST acpi apache_accesses apache_processes apache_volume cpu df df_inode diskstats entropy forks fw_packets if_eth0 if_eth1 if_err_eth0 if_err_eth1 interrupts irqstats load lpstat memory munin_stats netstat nfs4_client nfs_client open_files open_inodes postfix_mailqueue proc_ pri processes swap threads uptime users vmstat FETCH load load.value 0.03 .
結果が表示されない場合は、プラグインの設置場所やパーミッションを確認します。
あとは、Munin が稼働しているサーバで munin.conf に対象サーバの情報を追加し、グラフが描画されるのと確認します。
最後に、アクセス制限を施しておきます。
# echo 'pmmn: ALL' >> /etc/hosts.deny
hosts.deny で、全ての環境からの接続を拒否した上で、許可する環境を /etc/hosts.allow に追加して下さい。
pmmn: localhost
記述を追加した後、Munin 動作サーバから telnet や nc で、ポート 4949 に対して接続できるかどうか、確認します。
以上で、pmmn のセットアップはすべて完了です。munin-node のセットアップに挫折した環境でも、データが取れるようになりますので、重宝する場面もあるかと思います( ^ω^)