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

# 手っ取り早くサーバ監視できてよい
[MTRG](http://oss.oetiker.ch/mrtg/) , [Hinemos](http://www.hinemos.info/), [Cacti](http://www.cacti.net/), [Zabbix](http://www.zabbix.com/jp/), [Nagios](http://www.nagios.org/), [observium](http://www.observium.org/wiki/Main_Page), [ganglia](http://ganglia.info/), [monit](http://mmonit.com/monit/),  [zenoss](http://www.zenoss.com/) とかサーバ監視ツールはあれど手軽にインストールできないのが玉にキズだなと思っていたら、最近流行りの [Munin](http://munin-monitoring.org/) が手軽でさっくりいい感じに「サーバ監視できるよ」と教えてもらったので構築してみました。ちょー簡単ｗ
ただ Munin は、サーバ監視システムというか、リソース管理システムの色合いが強いので（自分でプラグイン作れば色々とできるけど）、そこら辺りは Zabbix で通知系を管理し Munin で実際の状況を見るというのがいいらしい。

> [muninとZabbixで大規模サーバー群を監視](http://www.geek.sc/archives/752)
> [統合監視ツール「Zabbix」によるサーバー監視](http://knowledge.sakura.ad.jp/tech/585/)

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

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

> [Muninアラートメール設定](http://ex-cloud.jp/support/question/g-585)
> [Munin で SNMP 対応機器を監視する](http://www.yuhisa.com/server/munin-snmp/)

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

![munin_00.png](https://qiita-image-store.s3.amazonaws.com/0/44540/9c4aa730-58d2-5396-cf08-310882f93a0a.png)

# Muninサーバの構築 (192.168.11.100)
サーバのパッケージをインストールすると同時にエージェントである（munin-node）もインストールされます。最少構成の１台で 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
```

## 自動起動の設定と動作確認
特に難しいことは無くいつもの安定の設定ですｗ。

```
$ 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](https://qiita-image-store.s3.amazonaws.com/0/44540/b64f9f8e-a907-ed55-34b8-702fbfe4cdc7.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$
```

## 自動起動の設定と動作確認
こちらも特に難しいことは無くいつもの安定の設定ですねｗ。

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

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

> [CentOS 6.5 - サーバ監視ツール（munin）でCPU温度・電圧・ファン回転数測定！](http://www.mk-mode.com/octopress/2014/01/15/centos-6-5-munin-setting-of-cpu-fan/)


## Apacheプラグインの設定
リンクを張るだけ。・・・で済む訳は、ないですね！！。ここ少しだけハマりますｗ
ちなみに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関連のグラフが表示されない件](http://d.hatena.ne.jp/gamme/20090811/1249997519)
> [pro-mameのプログラムメモ](http://prg.pro-mame.com/index.php?Linux%2F%E7%9B%A3%E8%A6%96%E3%83%84%E3%83%BC%E3%83%AB%2FMunin)

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

# まっしろ対策
![munin_02.png](https://qiita-image-store.s3.amazonaws.com/0/44540/3f2c67ec-c4d6-80cd-dab4-15bd8a19e7c1.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(日本語)](https://wiki.archlinux.org/index.php/Munin_(%E6%97%A5%E6%9C%AC%E8%AA%9E))

# 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](https://qiita-image-store.s3.amazonaws.com/0/44540/74670568-48ee-a83e-8d2b-dfe4c4353eee.png)

# 最終調整を行う
グループ化したりしたりしたりｗ

## 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の設定をコマンドで確認する方法](http://hivecolor.com/id/133)
> [MuninでSSHログイン失敗数を記録してみた](http://qiita.com/hogelog/items/abb84eb70781f9cab7d2)
> [muninプラグインを作成](http://www.seeds-std.co.jp/seedsblog/671.html)

# munin の webUI を変更してみる
ちょっとUIがいけてないよなと思ったら webUI を簡単に変更することができるみたいです。
「[Munstrap](https://github.com/jonnymccullagh/munstrap)」これ結構いいですね。簡単に導入もできますし。

> [munin の webUI をレスポンシブなものにする]()

# その他

> ・[muninの監視間隔を変更する](http://blog.necomimi.net/?p=1786)
> ・[Munin/設定](http://www.sssc.cc/wiki/index.php?Munin%2F%E8%A8%AD%E5%AE%9A)

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