maehachi08 Anything Blog

2014年02月02日
Munin 既存のプラグインの導入( 概要編 )

今回はmuninノードで既存のMunin プラグインの導入について概要を説明します。

munin プラグイン概要

muninでは各々のリソース値取得にプラグイン形式を採用しています。

munin-nodeが4949/TCPでリクエストを受けとった時、もしくはmunin-runが手動実行された時、/etc/munin/pluginsディレクトリ以下にあるプラグインを実行します。

munin-nodeパッケージをインストールすると/usr/share/munin/pluginsディレクトリ以下に様々なプラグインがインストールされます。そして、デフォルトで、/usr/share/munin/pluginsディレクトリにインストールされたいくつかのプラグインが/etc/munin/pluginsディレクトリ以下にシンボリックリンクが作成されます。だから、Munin インストールでパッケージをインストールしただけで、いくつかのグラフが作成されるんですね。

プラグインディレクトリについて

Muninではどこでプラグインのディレクトリ(default: /etc/munin/plugins)を指定しているのか、ふと思って調べたので、備忘録メモです。

munin-nodeパッケージに含まれるコマンドに/usr/sbin/munin-runコマンドがあります。これは任意のプラグインを実行し、munin-nodeが実行した場合と同じように結果を標準出力に表示するという便利なコマンドです。

/usr/sbin/munin-runコマンドのmanページを確認し、--servicedirオプションというものがありました。

       --servicedir <dir>
            Use <dir> as plugin dir. [/etc/munin/plugins/]

この、servicedirというのがプラグインディレクトリとして使用されるみたいですね。

ということで、muninノードのプログラムコードの中にservicedir変数を探してみると、/usr/share/perl5/vendor_perl/Munin/Node/Service.pmの中で定義されているのを見つけました!

# grep servicedir /usr/share/perl5/vendor_perl/Munin/Node/Service.pm
    $args{servicedir} ||= "$Munin::Common::Defaults::MUNIN_CONFDIR/plugins";

どうやら、$Munin::Common::Defaults::MUNIN_CONFDIR/pluginsがservicedir変数として使用されるようです。では、$Munin::Common::Defaults::MUNIN_CONFDIR変数はどういった文字列が代入されているのでしょうか。

探してみたところ、/usr/share/perl5/vendor_perl/Munin/Common/Defaults.pmの中で定義されているのを見つけました!

# grep "MUNIN_CONFDIR" /usr/share/perl5/vendor_perl/Munin/Common/Defaults.pm
our $MUNIN_CONFDIR    = q{/etc/munin};

なるほど、$MUNIN_CONFDIR変数に/etc/muninが代入されていたのですね!

ちなみに、この/usr/share/perl5/vendor_perl/Munin/Common/Defaults.pmでは他にも様々な変数を定義しているようです。

# grep ^our /usr/share/perl5/vendor_perl/Munin/Common/Defaults.pm   
our $DROPDOWNLIMIT     = 1;
our $MUNIN_PREFIX     = q{/usr};
our $MUNIN_CONFDIR    = q{/etc/munin};
our $MUNIN_BINDIR     = q{/usr/bin};
our $MUNIN_SBINDIR    = q{/usr/sbin};
our $MUNIN_DOCDIR     = q{/usr/share/doc/munin-2.0.19};
our $MUNIN_LIBDIR     = q{/usr/share/munin};
our $MUNIN_HTMLDIR    = q{/var/www/html/munin};
our $MUNIN_CGIDIR     = q{/var/www/cgi-bin};
our $MUNIN_CGITMPDIR  = q{/var/tmp};
our $MUNIN_DBDIR      = q{/var/lib/munin};
our $MUNIN_PLUGSTATE  = q{/var/lib/munin/plugin-state};
our $MUNIN_SPOOLDIR   = q{/var/lib/munin/spool};
our $MUNIN_MANDIR     = q{/usr/man};
our $MUNIN_LOGDIR     = q{/var/log/munin};
our $MUNIN_STATEDIR   = q{/var/run/munin};
our $MUNIN_USER       = q{nobody};
our $MUNIN_GROUP      = q{nobody};
our $MUNIN_PLUGINUSER = q{nobody};
our $MUNIN_VERSION    = q{2.0.19};
our $MUNIN_PERL       = q{/usr/bin/perl};
our $MUNIN_PERLLIB    = q{/usr/share/perl5/vendor_perl};
our $MUNIN_GOODSH     = q{/bin/sh};
our $MUNIN_BASH       = q{/bin/bash};
our $MUNIN_PYTHON     = q{/usr/bin/python};
our $MUNIN_RUBY       = q{/usr/bin/ruby};
our $MUNIN_OSTYPE     = q{linux};
our $MUNIN_HOSTNAME   = q{localhost.localdomain};
our $MUNIN_MKTEMP     = q{mktemp -p /tmp/ MKTEMP     = };
our $MUNIN_HASSETR    = q{1};

munin-nodeパッケージでインストールされるプラグイン

私が検証でインストールしたmunin-nodeパッケージ「munin-node-2.0.19-1.el6.noarch」では合計で232個もありました。インストールしたmunin-nodeパッケージでインストールされたプラグインのリストはrpmコマンドで確認できます。

rpm -ql munin-node| grep "/usr/share/munin/plugins/" 

munin-nodeパッケージインストールで有効になるプラグイン

プラグインを有効にするためには、/usr/share/muninディレクトリ以下のファイルのシンボリックリンクを/etc/munin/pluginsディレクトリに作成します。

# ls -l /etc/munin/plugins/
合計 0
lrwxrwxrwx 1 root root 28  2月  2 01:48 2014 cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27  2月  2 01:48 2014 df -> /usr/share/munin/plugins/df

 <省略>