Munin
vagrant
CentOS6.5

サーバ監視システム Munin を構築してみた(CentOS6.5 + Vagrant)

More than 3 years have passed since last update.

手っ取り早くサーバ監視できてよい

MTRG , Hinemos, Cacti, Zabbix, Nagios, observium, ganglia, monit, zenoss とかサーバ監視ツールはあれど手軽にインストールできないのが玉にキズだなと思っていたら、最近流行りの Munin が手軽でさっくりいい感じに「サーバ監視できるよ」と教えてもらったので構築してみました。ちょー簡単w
ただ Munin は、サーバ監視システムというか、リソース管理システムの色合いが強いので(自分でプラグイン作れば色々とできるけど)、そこら辺りは Zabbix で通知系を管理し Munin で実際の状況を見るというのがいいらしい。

muninとZabbixで大規模サーバー群を監視
統合監視ツール「Zabbix」によるサーバー監視

しかし少し前は、SNMP を使用し対応機器を監視対象にしてリソースを監視,GDで描画つのが一般的だった RRDtool, MTRG などありますが、こんな手軽に導入できると首位逆転ですよね。

と思ったら、通知系も簡単に設定できるらしい。ついでに SNMP 機器を監視するにはちょっと手が必要らしい。

Muninアラートメール設定
Munin で SNMP 対応機器を監視する

前提条件

いつものごとく vm を2つ用意すること。Munin パッケージは、EPEL リポジトリからインストールするということ。Munin のデータポートは、4949/tcp, udp となっているのでファイヤーウォールで閉じていたら解放が必要ということ。ぐらいかな?
また個人・企業に問わずサーバ監視の情報は、第三者に見せていいものではないので適切なセキュリティ対策を必ず行うことが必要です。たとえば、Munin アクセスにはIP制限入れるとか認証いれるとかとか。必要だと思います。ついでに以下「Muninサーバ, Muninクライアント」と以下説明しますのでそこのとこよろしくお願いします。

munin_00.png

Muninサーバの構築 (192.168.11.100)

サーバのパッケージをインストールすると同時にエージェントである(munin-node)もインストールされます。最少構成の1台で Munin を運用する場合は、これでいいですね。またサーバ側には、Webサービスが必要なので Apache をインストールしておきます。

$ sudo yum install apache

パッケージを導入

munin パッケージをインストールして /etc/munin/munin.conf を少し弄るだけです。

$ sudo yum -y install munin --enablerepo=epel
$ sudo vi /etc/munin/munin.conf
dbdir   /var/lib/munin                 # コメントを外す
htmldir /var/www/html/munin
logdir /var/log/munin
rundir  /var/run/munin

BASIC認証

/etc/httpd/conf.d/munin.conf を見ると BASIC認証する設定になっているのでこのまま使用する。

<directory /var/www/html/munin>
  AuthUserFile /etc/munin/munin-htpasswd
  AuthName "Munin"
  AuthType Basic
  require valid-user

が、/etc/munin/munin-htpasswd は、空っぽなのでユーザ登録します。

$ sudo htpasswd -c /etc/munin/munin-htpasswd hoge

自動起動の設定と動作確認

特に難しいことは無くいつもの安定の設定ですw。

$ sudo service httpd restart
$ sudo service munin-node start
$ sudo chkconfig munin-node on

Munin が情報を収集するタイミングは、5分毎なのでコーヒーでも飲みながら少し待ってからhttp://192.168.11.100/munin/ にアクセスする。BASIC認証があるので上で設定したユーザ/パスワードを入力。

munin_01.png

Muninクライアントの構築 (192.168.11.102)

muninエージェントのインストールと、Muninサーバにシステムの情報を転送する設定を行います。←これだけ。

パッケージを導入

muninエージェントをインストールして /etc/munin/munin-node.conf にMuninサーバアドレスを設定するだけ。

$ sudo yum -y install munin-node --enablerepo=epel
$ sudo vi /etc/munin/munin-node.conf
allow ^192\.168\.11\.102$

自動起動の設定と動作確認

こちらも特に難しいことは無くいつもの安定の設定ですねw。

$ sudo service munin-node start
$ sudo chkconfig munin-node on

Apache プラグインを導入(手動設定の場合)

munin で監視されるリソース(Sensor っていうらしい)は、デフォルトで disk/network/postfix/processes/system の5つが設定済みなので初期状態としてはこれでいい感じです。で、Apache など有名どころの Sensor は自分で用意する必要があるかというとそうでもなく、他に Sensor がどんなのが存在するかは /usr/share/munin/plugins を見ると結構用意されているのが分かります。
自動でも設定することができますが、あえて手動でApache Sensor を設定してみます。

CentOS 6.5 - サーバ監視ツール(munin)でCPU温度・電圧・ファン回転数測定!

Apacheプラグインの設定

リンクを張るだけ。・・・で済む訳は、ないですね!!。ここ少しだけハマりますw
ちなみにMuninサーバ, Muninクライアント共に Apache の Sensor を設定しておきます。

Apacheプラグインをリンクを張ります。

$ sudo ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
$ sudo ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
$ sudo ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume

Apache の設定ファイル httpd.conf に以下の設定を行います(ExtendedStatus On のコメントを外すだけだと思うけど)。

$ sudo vi /etc/httpd/conf/httpd.conf
LoadModule status_module modules/mod_status.so
ExtendedStatus On

Apache と、munin-node の再起動

$ sudo service httpd restart
$ sudo service munin-node restart

グラフが更新されない(まっしろ)。

おかしいな?グラフが更新されないと思ったら。プラグインが値を取得できていないことが原因でした。

muninのプラグインでapache関連のグラフが表示されない件
pro-mameのプログラムメモ

$ sudo /etc/munin/plugins/munin-run apache_accesses
accesses80.value U   ← 失敗してる
accesses80.value 85   ← 値を返してるのであれば正常

まっしろ対策

munin_02.png

/etc/munin/plugin-conf.d/munin-node/etc/httpd/conf/httpd.conf を修正します。

/etc/munin/plugin-conf.d/munin-node
[apache_*]
env.url   http://127.0.0.1:%d/server-status?auto
env.ports 80
/etc/httpd/conf/httpd.conf
Alias /server-status /server-status
<IfModule mod_status.c>
  ExtendedStatus On
  <Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
  </Location>
</IfModule>

VirtualHost を使用している場合

/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    ServerName 127.0.0.1
    <Location /server-status>
      SetHandler server-status
      Order deny,allow
      Deny from all
      allow from 127.0.0.1
    </Location>
</VirtualHost>

修正後は、Apache と Munin の再起動

$ sudo service httpd restart
$ sudo service munin-node restart

プラグインを導入(自動設定の場合)

インストールしたマシンで使えそうなプラグインのお勧めリスト一覧を確認できたり設定するコマンドは、以下でできます。
でも Apache と同様に細かい設定が必要かもしれないのでそこらは、適宜対応すること。

# munin-node-configure --suggest
# munin-node-configure --shell | sh

archlinux - Munin(日本語)

Muninクライアント ⇒ Muninサーバ に情報を転送

Muninクライアントというか、エージェントの情報を Muninサーバに転送する設定をします。
※Muninクライアント情報を受取るため Muninサーバ側の 4949/TCP, UDP が解放されていること。

Muninクライアント側の /etc/munin/munin-node.conf を修正します。

$ sudo vi /etc/munin/munin-node.conf
allow ^192\.168\.11\.100$

とりあえずこんな風になる

Muninサーバ, Muninクライアント 共に Apache, Munin を再起動して様子をみます。

$ sudo service httpd restart
$ sudo service munin-node restart

munin_03.png

最終調整を行う

グループ化したりしたりしたりw

Muninサーバ側

/etc/munin/munin.conf
[MyService_Server;]
[MyService_Server;Munin-Client]
    address 192.168.11.102
    use_node_name yes
[MyService_Server;Munin-Server]
    address 127.0.0.1
    use_node_name yes
/etc/munin/munin-node.conf
allow ^127\.0\.0\.1$
allow ^::1$

Muninクライアント側

/etc/munin/munin-node.conf
allow ^192\.168\.11\.100$
allow ^::1$

自作プラグインの作成

MTRG と同様に時間軸の差異(現在とひとつ前の値の差を計測した時間)でデータを作成すればいいので意外と楽に作成できると思います。/usr/share/munin/plugins ディレクトリのプラグインを見てみると sh でもいいの? というのもありましたが、最終的な書式が合っていればok(出力)なので特に言語に偏りはなさそうです(簡易的に使えるという意味です)。

munin-nodeの設定をコマンドで確認する方法
MuninでSSHログイン失敗数を記録してみた
muninプラグインを作成

munin の webUI を変更してみる

ちょっとUIがいけてないよなと思ったら webUI を簡単に変更することができるみたいです。
Munstrap」これ結構いいですね。簡単に導入もできますし。

munin の webUI をレスポンシブなものにする

その他

muninの監視間隔を変更する
Munin/設定

とりあえず

「グルーピング化できるの?とかサーバ名とかとか」細かい点とかあるだろうけども「細かい設定はどーでもいいんだよ」というならこれでokですね。暇みてどこまでカスタマイズできるか調整してみます。