[ムーミン?] debian squeeze へ munin 2.0.6 を入れてみた [Munin]

肺炎で隔離されたまま一週間以上が経過して、すっかり体力の無くなった今日この頃ですが、家でもできるリハビリはいろいろとやってるんですよ。

ということで、某Software Design 11月号の OpenFlow記事を目的に買ったにもかかわらず、@zembtsuの人のMunin記事が熱かったので、入れてみてみました。雑誌だと Debian Testing だったので、自分とこで管理してる Debian Squeeze で作業してみた、これは、その記録です。

  1. サーバに Muninを入れてみる
  2. 監視対象に Munin nodeを入れてみる
  3. 設定ファイルを弄ってみる
  4. cronでのグラフ作成ではなく、リアルタイムでの作成にしてみる

うちのサーバは、まだ potato だったころの debian から使っているサーバで、あの頃は仮想化なんて現実的どころか、そんな機能は汎用機でLPARするくらいしかなく、サーバと言えば、1台、サーバを買ってくるしかありませんでした。そのため、1台の Linuxサーバに、apache も samba も ftp も postfix も mysql も postgresql も、まだまだたくさん入ってます。ホントは 1サーバ = 1機能のシンプル構成が管理上良いのですが、そんなにサーバを立てられるようなお金はありません。残念な時代でした。

時代は変わって、今は何でもかんでも仮想化する時代です。この Mac も右に数画面ずらすと Win8 が動いてたりするくらい、当たり前のように使われてしまってます。うちのサーバも2010年にわけあって仮想化サーバへ移行しました。ホントは一時しのぎで、はやいところ新しいサーバにしないといけないのに…もうな感じなんですが、イロイロと余計なことを考えていたら、いつまで経っても新しいサーバへ移行できない、でも、事前に検証くらいは…あと、サービスを分解して、いったい、今なんのサービスを提供しているのか調査しよう。そんな風に考えました。要するに、今どうなってるかサッパリ分からないんです。なので、今動いている、一つ一つのサービスを、別の仮想化サーバに作り、権限委譲していきながら、メインのサーバをスリム化していきましょうということをやっています。
そんなこんなで、dns x 2 + zabbix x 1 のサーバを立て続けに、誰にも知られずに作って移行することに成功しましたヽ(´ー`)ノオレ勝利

したらば、ここででてくるのが、「複数のサーバの監視はめんどくさい」ってヤツです。ついに、我が家にも訪れました。しかし、そんなことはすでに私にとっては大した問題ではなかったのです、そう、そこにはMuninがあるから!

前置きが長いのはリハビリの所為です。早速導入してみましょう。

目次

1. サーバに Muninを入れてみる

ということで、私は Munin も専用のノードをひとつ作って、Munin 専用サーバとしてみました。新規に Squeeze を導入して、ほっとんどすっからかんの綺麗な状態で導入スタートです。
基本的には、Software Design 11月号 を参考にしてやってみたのですが、一部、異なる部分などがあったので testing と squeeze による差だと思って吸収してください。

1-1. 事前に必要なパッケージを入れてみる

munin は perl で動いてますし、apache がないとグラフを見ることができないので、まずそれらを入れましょう。
あたしは root じゃなくて、一般ユーザから sudo する派です。その辺はうまく差し替えて読めない人には、この後のことは魔術書にしかならんでしょう。

1-1-1. apache2 を導入する

大したことないです。これだけですみます。thread のが使いたかったので、mpm-worker 使ってますが、お好みに任せます。動かすだけなら特に現時点では設定は不要です。

1
sudo aptitude install apache2-mpm-worker

1-1-2. munin 動作に必要なパッケージ群を導入する

雑誌の通りでいいんですけれども、liburi-perlも必要になりました。squeeze だからなのか、環境の違いかは分かりませんが、こちらも入れておいてくださいな。

1
sudo aptitude install rrdtool librrds-perl libhtml-template-perl libfile-copy-recursive-perl libfcgi-perl libcgi-fast-perl libcgi-pm-perl libio-socket-inet6-perl libnet-snmp-perl liblog-log4perl-perl libnet-server-perl libdate-manip-perl liblist-moeutils-perl liburi-perl

1-2. munin を導入する

さて、では munin を入れてみましょう。

1-2-1. munin を download する

munin 1.4.x で良ければ、debian の標準パッケージに入っているので、そちらでもいいのですが、どうせ使うなら新しいものを、ということで雑誌のとおり munin 2.0.6 を落としてきます。

1
2
3
4
5
wget http://ftp.jp.debian.org/debian/pool/main/mn/munin/munin_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-common_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-doc_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-node_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-plugins-core_2.0.6-1_all.deb

サーバにする場合には、全部入れておきましょう。doc はお任せです。

1-2-2. munin のパッケージを導入する

雑誌にある通り、dpkg -i munin*.deb すればいいんですが、なんとなく綺麗にうまく行かなかったので、次の順で入れてみました。

1
2
3
dpkg -i munin-common_2.0.6-1_all.deb
dpkg -i munin-plugins-core_2.0.6-1_all.deb
dpkg -i munin_2.0.6-1_all.deb munin-doc_2.0.6-1_all.deb munin-node_2.0.6-1_all.deb

ここまでやると、apache2 の conf.d 配下まで自動的に登録されますので、この順番でやるのが妥当でしょう。多分。

では、設定はおいといて、後でまとめてやりましょう。監視対象側へノードを導入します。

2. 監視対象へ munin-node を導入する

ではでは、ここでも同じように事前に必要なパッケージと、munin の nodeだけを導入してみましょう。
うちでは、今回、dns x 2 + zabbix x 1 = 3台へ入れてみましたよ。
各々の squeeze で同じように作業してみます。

2-1. 事前に必要なパッケージを入れてみる

ながれは munin サーバと同じですね。apache2 を入れる必要がないだけです。

2-1-1. munin 動作に必要なパッケージ群を導入する

node 側は必要なパッケージが少なめです。これだけでいけました。

1
sudo aptitude install libparse-recdescent-perl liblist-moreutils-perl libnet-server-perl gawk

2-2. munin node を導入する

さて、では munin node を入れてみましょう。サーバよりもパッケージ少なめです。doc もいらないですかね。そこはお任せします。

2-2-1. munin を download する

必要なのは、3つのパッケージです。plugin も coreのものがないと、node は導入できません。

1
2
3
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-common_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-node_2.0.6-1_all.deb
wget http://ftp.jp.debian.org/debian/pool/main/m/munin/munin-plugins-core_2.0.6-1_all.deb

ファイルを展開するなんかを入れておけば良かった、とか、この辺で後悔を始めました。

2-2-2. munin のパッケージを導入する

ここも手作業で一つずつ入れました。順番はサーバのそれと同じです。

1
2
3
dpkg -i munin-common_2.0.6-1_all.deb
dpkg -i munin-plugins-core_2.0.6-1_all.deb
dpkg -i munin-node_2.0.6-1_all.deb

ここまでで、必要な準備は整いました。

3. 設定ファイルを弄ってみる

たぶん、この状態で勝手に node やらサーバは動いている気がしますが、実は何もできていません。困ったちゃんです。
設定が必要です。必要なのは、監視対象のnode 側もサーバ側もどちらもです。

ではまず、node 側から設定しておきましょう。簡単です。

3-1. node側(監視対象)の設定

node 用の設定ファイルは、「/etc/munin/munin-node.conf」です。最低限、次の2箇所を変更しましょう。
xxxx 部分を定義ください。

1
2
host_name xxxx
allow ^xxx\.xxx\.xxx\.xxx$
host_name
自host名を入れておきます。特に設定しなくても云々というのを見かけますが、この程度はやっておきましょー
allow
munin サーバのアドレスを記述します。network 単位で許可をしたい場合には、cidr_allow も使えます。少なくともいずれかでアクセスできるようにしておかなければなりません

サーバ自身も nodeとして監視対象にする場合には、この設定が必要になりますよ。

3-2. サーバ側の設定

サーバ側の設定です。サーバでは、munin と apache2 の設定が必要になります。

3-2-1. munin.conf の設定

今度の設定ファイルは 「/etc/munin/munin.conf」になります。監視対象のノードを追加します。終わりのほうに追加してくれと言わんばかりの行がありますよね。
分からなければ、一番最後の行から追加してください。こんな感じです。

1
2
3
4
5
6
7
[oshiire;xxxx]
    address 127.0.0.1
    use_node_name yes
 
[oshiire;yyyy]
    address xxx.xxx.xxx.xxx
    use_node_name yes
[oshiire;・・・・]
・・・・の部分には、”xxxx” や “yyyy” と書いていますが、これが画面に表示されるホスト名になります。その前に “;” をはさんで “oshiire“と記述があるのはグループ名です。従って [group;hostname ] と記述すると言うことになりますね。なお、グループ名は省略可能です。その場合は “;” は不要です。
address
監視対象となる IPアドレスを記述します。サーバ自身の場合は、上のように “127.0.0.1” のようになりますね。
use_node_name
IPアドレスとホスト名とどちらを優先するかの指定です。dnshosts を利用されているのならば、ここを yes にしておいたほうが良いかもしれませんね。

3-2-2. apache2 の設定

あと少しです! もうすぐグラフが見られますよヽ(´ー`)ノ

導入がうまくいってさえいれば、「/etc/apache2/conf.d/munin」というリンクファイルができあがっているはずです。こちらの内容をひとつばかし変更しましょう。
<Directory /var/cache/munin/www>」ディレクティブを探してください。すぐその下に、「Allow from localhost 127.0.0.0/8 ::1」というものがありますので、ここの「127.0.0.0/8」を、munin の画面へアクセスするクライアントの IPアドレスか、それの存在するネットワークへ変更ください。例えば、”192.168.0.0/24″ ネットワークから muninの画面へアクセスを許可する場合は次のようになります。

1
2
3
4
5
6
7
8
9
10
11
<Directory /var/cache/munin/www>
        Order allow,deny
        Allow from localhost 192.168.0.0/24
        Options None
 
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>
 
</Directory>

できましたか? できたら、apache2 を restart しましょう。

3-3. ブラウザからアクセスしてみる

ここまで設定したのなら、きっとうまく行くはずです。天へ祈って、ブラウザから「http://<muninサーバのアドレス>/munin」へアクセスしてみましょう。

そうしたら、こんなメニューが出ているんじゃないでしょうか?
でていれば、だいたい成功ですヽ(´ー`)ノさぁ、いろいろとメニューからアクセスしてみてください

と思ったら、特にグラフも無いし、寂しい気分になることでしょう。そうです、munin は標準では 5分ごとにグラフを書くためのデータクロールして静的画面を出すだけなのです。残念ですね。まぁでも、しばらく放置していると、たくさんグラフが出来てくるので楽しいですよ!! ヽ(´ー`)ノ

4. cronでのグラフ作成ではなく、リアルタイムでの作成にしてみる

しばらくすると気になることがあります。

5分ごとに CPUがえらい使われている、と言う事実に…

そう、munin は標準で 5分ごとにデータクロールしてグラフを作るんですが、その時に毎回毎回、全部のグラフを作成します。そのために、CPUを喰ってしまうんですね。仮想化してると、折角のリソースがここにくわれてしまったりして、ちょっと(/ω\)イヤンな気持ちになります。そこでちょっとだけガマンをすると対処することが出来ますので、その方法をお教えします。って、これも雑誌に書いてあるんですけどね。実際にはちょっと設定箇所が異なるので、アレンジしてみました。あれより簡単です。

さて、どうするかというと、ブラウザでアクセスしたときに、アクセスした画面だけグラフを作成する、と言う方法です。残念ながら、最初にアクセスしたときにグラフがすぐに出てこなくて寂しいかも知れませんが、これもリソースの無駄遣いからの脱却です。さぁ、やりますよ。

4-1. munin の設定を変更する

さきほどもいじってみたので問題ないであろう「/etc/munin/munin.conf」を変更します。1行だけです。
きっと、「#graph_strategy cron」という remarkされた行を始めのほうに見つけることができると思います。これの次の行に、
graph_strategy cgi
と入れてあげてください。これだけです。めでたいですね。

4-2. apache2 の設定を変更する

さきほどのだけだと、「cgi にアクセスできねぇよ(#゚Д゚)ゴルァ!!」というメッセージが、/var/log/apache2/error_log を埋め尽くすことになるはずですので、apache2がわのアクセス権の設定も変更しましょう。

またも同じく「「/etc/apache2/conf.d/munin」」ファイルを編集ください。今度は先ほどのディレクティブの次に「<Location /munin-cgi/munin-cgi-graph>」ディレクティブがあることでしょう。ここでも同じように「Allow from localhost 127.0.0.0/8 ::1」というものがありますので、ここの「127.0.0.0/8」を、munin の画面へアクセスするクライアントの IPアドレスか、それの存在するネットワークへ変更ください。要するに先ほどと同じようにすれば良いです。

変更すると、このようになると思います。

1
2
3
4
5
6
7
<Location /munin-cgi/munin-cgi-graph>
        Order allow,deny
        Allow from localhost 192.168.0.0/24
        <IfModule mod_fastcgi.c>
                SetHandler fastcgi-script
        </IfModule>
</Location>

さぁ、後は apache2 を再起動するだけですヽ(´ー`)ノどうですか、できましたか?

良かったですね!!(オチなし)

[tmkm-amazon]B009K69MZE[/tmkm-amazon]