今回は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-2.0.19-1.el6.noarch」では合計で232個もありました。インストールしたmunin-nodeパッケージでインストールされたプラグインのリストはrpmコマンドで確認できます。
rpm -ql munin-node| grep "/usr/share/munin/plugins/"
プラグインを有効にするためには、/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
<省略>
Perl |
3
|
Linux |
16
|
Jenkins |
1
|
CI |
1
|
Bashシェル |
1
|
シェルスクリプト |
1
|
Munin |
7
|
Ruby on Rails |
7
|
plenv |
1
|
sudo |
2
|
Cobbler |
6
|
ruby |
1
|
rbenv |
1
|
WeeChat |
1
|
tmux |
2
|
Webistrano |
1
|
capistrano |
1
|
puppet |
8
|
growthforecast |
1
|
Supervisor |
1
|
perlbrew |
1
|
git |
2
|
Python |
1
|
pip |
1
|
PHP |
1
|
Nginx |
1
|
MySQL |
2
|
LXC |
2
|
RPM |
3
|
ImageMagick |
1
|
Subversion |
1
|
qmail |
3
|
yum |
1
|
ucspi-tcp |
1
|
daemontools |
1
|
Puppet |
1
|
IPVS |
1
|
Kickstart |
1
|
aaa |
0
|