なうびるどいんぐ

脳みそ常時-3dB

Ubuntu 16.04(またはRaspbian)でMuninをセットアップする

      HimaJyun

サーバ監視にもZabbix、Nagios、Cacti、Sensu、Munin, etc.と、色々ありますが、これだけ色々な物があってきょうびまさか監視をしていないサーバなど無い(と思いたい)でしょう。

まぁ、例に依ってここはRHEL系多数な世界ですので、Ubuntu 16.04でMuninをセットアップする方法を記事にしてみます。(Raspbianでもそのまま行けます。)

スポンサーリンク

Muninのセットアップ

Muninを使うのですからMuninのインストールが必要ですね、そんな事はほぼ大抵多くの場合、考えなくてもお分かりいただけるでしょう。

sudo apt-get install munin

Muninはブラウザからグラフを見るためWebサーバが必要になります、Apacheをインストールしましょう。

sudo apt-get install apache2

監視対象の追加

今のままではローカルの監視しか行われていません、他にもmunin-nodeをインストールしたサーバがあり、それらも監視したい場合は設定を追加する必要があります。

「/etc/munin/munin.conf」に以下の様な行があります。

# a simple host tree
[localhost.localdomain]
    address 127.0.0.1
    use_node_name yes

その下の方にコメントで色々と設定例が書いてありますが、良く使うのは以下の2つのパターンだと思います。

# 基本的なやり方
[hoge]
    address 192.168.0.1
    use_node_name yes

# グループ分けする場合
[DB;master]
    address 192.168.0.2
    use_node_name yes
[DB;slave]
    address 192.168.0.3
    use_node_name yes

グラフをCGIで作成する

このままでは監視の度(5分置き)にグラフを作成する処理が走ってしまいます。

画像処理は重いですし、5分置きに毎回グラフデータを眺めている様な奇特な人間も居ません、なにより、CGIで作成する様にしておかないとズーム機能が使えません。

「/etc/munin/munin.conf」を開くと以下の様な行があります。

#graph_strategy cron
#cgiurl_graph /munin-cgi/munin-cgi-graph

両方ともコメントインして、graph_strategyをcgiに変更します、再起動などは必要ありません。

graph_strategy cgi
cgiurl_graph /munin-cgi/munin-cgi-graph

CGIで動作させると権限周りの調整が必要になりますが、muninとwww-data、お互いをお互いのグループに入れておけばその辺りもとても楽です。

sudo gpasswd -a munin www-data
sudo gpasswd -a www-data munin

また、このままだと「普通の」CGIでグラフの作成を行うため、グラフ1枚1枚で別々のプロセスが起動して、終了したら死亡して……グラフの作成がとても重いです。

ですので、グラフの作成にfastcgiかfcgidを使うようにします。(※Raspbianの場合はfcgidしかパッケージが提供されていません)

よく似た名前ですが別物で、fastcgiはサードパーティー製、より省メモリ、fcgidはApacheソフトウェア財団製、より高速です。

まぁ、省メモリと言っても昨今の太平洋より広いメモリ領域の前ではどちらを使っても同じでしょう。(Raspberry Pi(1GBRAM)でfcgidを使っても余裕です)

どちらかお好きな方をどうぞ

# fastcgi
sudo apt-get install libapache2-mod-fastcgi
# fcgid
sudo apt-get install libapache2-mod-fcgid

メール通知

Muninは障害が発生した場合に特定のコマンドを実行する事が出来ます。

すなわち、ここでメールコマンドを実行すればメール通知も可能、と言う訳です。(要mailコマンド(mailutils))

と言っても、/etc/munin/munin.confに以下の様な設定を書き加えるだけですが

contact.mail.command mail -s "Munin [${var:group}::${var:host}]" admin@example.com

動作的にはあくまで他のコマンドを呼び出しているだけなので、実質的には何でも出来る訳です。

Apacheの設定

MuninのHTMLファイル自体は「/var/cache/munin/www」にあります、もし、先にApacheをインストールしていた場合は「/etc/apache2/conf-enabled/munin.conf」が追加されており、Aliasで「http://localhost/munin」からグラフを閲覧出来るようにはなっています。

が、Debian系のApacheでは普通、VirtualHostを利用しますのでこれは「sudo a2disconf munin」で消してしまって構わないと思います。

細かい解説を書いているとそれだけで記事1つ分くらいになってしまうので、設定例だけをご紹介します。

サブドメイン

Muninをサブドメインで閲覧する場合は以下の様な設定になると思います、必要に合わせて設定を変更して下さい。

<VirtualHost *:80>
	ServerName munin.example.com

	ServerAdmin webmaster@localhost
	DocumentRoot /var/cache/munin/www

	<Directory /var/cache/munin/www>
		# ローカル以外からの接続を拒否(必要に合わせてBasic認証などに変更して下さい)
		Require ip ::1 127. 192.168.
		AllowOverride None
		Options None
		# 5分間キャッシュ
		<IfModule mod_expires.c>
			ExpiresActive On
			ExpiresDefault M310
		</IfModule>
	</Directory>

	ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
	<Location /munin-cgi/munin-cgi-graph>
		# ローカル以外からの接続を拒否(必要に合わせてBasic認証などに変更して下さい)
		Require ip ::1 127. 192.168.
		Options ExecCGI
		<IfModule mod_fcgid.c>
			SetHandler fcgid-script
		</IfModule>
		<IfModule mod_fastcgi.c>
			SetHandler fastcgi-script
		</IfModule>
		<IfModule !mod_fcgid.c>
			<IfModule !mod_fastcgi.c>
				SetHandler cgi-script
			</IfModule>
		</IfModule>
	</Location>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

サブディレクトリ

Muninをサブディレクトリで閲覧する場合には既存の設定に以下の様な設定を追加すれば行けると思います。

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
	# ローカル以外からの接続を拒否(必要に合わせてBasic認証などに変更して下さい)
	Require ip ::1 127. 192.168.
	AllowOverride None
	Options None
	# 5分間キャッシュ
	<IfModule mod_expires.c>
		ExpiresActive On
		ExpiresDefault M310
	</IfModule>
</Directory>
 
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
	# ローカル以外からの接続を拒否(必要に合わせてBasic認証などに変更して下さい)
	Require ip ::1 127. 192.168.
	Options ExecCGI
	<IfModule mod_fcgid.c>
		SetHandler fcgid-script
	</IfModule>
	<IfModule mod_fastcgi.c>
		SetHandler fastcgi-script
	</IfModule>
	<IfModule !mod_fcgid.c>
		<IfModule !mod_fastcgi.c>
			SetHandler cgi-script
		</IfModule>
	</IfModule>
</Location>

MuninのパスをDocumentRootで指定するかAliasを使うかだけですね。

その他

rrdcachedを使う

Muninの負荷を更に減らす方法としてrrdcachedを使う方法があります。

こちらは「Ubuntu(またはRaspbian)のMuninでrrdcachedを使う」をご覧下さい。

Raspberry PiのCPU温度を取得

普通のPCなどであればlm-sensorsが使えますが、Raspberry Piではその手法は使えないためRaspberry PiのCPU温度を取得するプラグインを作成してみました。

もしよろしければご利用下さい。

 - サーバー , ,