Munin を Docker コンテナにインストール

# Munin を Docker コンテナにインストール

## 目的

- munin の評価(個人的)
  - MRTG, Zabbix つかったことある
  - sensu も興味あるがそれほど大規模なものは今は想定していないので後日

## 対象

- 監視ツールに興味がある
- 監視ツールが好き
- グラフ見るのが好き

## システム

- ホスト
  - Ubuntu 14.04
  - docker 1.12
      - isolated-network
      - ubuntu:latest
      - munin: 2.0.25
      - apache: 2.4.18

- centos7 コンテナにしようと思っていたのですがコンテナ内での systemd 動作が厄介そうなのでいったんスルーで。。
  - https://github.com/docker/docker/issues/6980
  - https://github.com/docker/docker/issues/7459

## リファレンス

- https://help.ubuntu.com/lts/serverguide/munin.html
- https://help.ubuntu.com/lts/serverguide/httpd.html
- https://www.server-world.info/en/note?os=Ubuntu_16.04&p=munin
- https://www.server-world.info/en/note?os=Ubuntu_16.04&p=httpd&f=1

## 構築

### 1. コンテナ建造

```shell-session
root# docker pull ubuntu:latest

root# docker run \
-itd --name munin-server01 \
-p 0.0.0.0:8080:80 \
-p 0.0.0.0:4948:4948 \
--network=isolated_nw \
-t ubuntu:latest /bin/bash

```
```shell-session
root# docker attach munin-server01

[root@5e4d20afb75f /]# dpkg-reconfigure tzdata
[root@5e4d20afb75f /]# apt-get -y update ; apt-get -y upgrade

[root@5e4d20afb75f /]# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
```

### 2. munin インストール(監視サーバ on コンテナ)

```shell-session
[root@5e4d20afb75f /]# apt-get -y install apache2
[root@5e4d20afb75f /]# apt-get -y install munin vim

[root@5e4d20afb75f /]# vi /etc/munin/munin.conf

add lines

### docker host
[fs1]
    address 192.168.100.5
    use_node_name yes

[root@5e4d20afb75f /]# vi /etc/apache2/conf-enabled/security.conf

ServerTokens Prod

[root@5e4d20afb75f /]# vi /etc/apache2/apache2.conf

ServerName www.munin-server.com

[root@5e4d20afb75f /]# vi /etc/apache2/conf-enabled/munin.conf

### add LAN Segments
Require ip 192.168.100.0/24

[root@5e4d20afb75f /]# service cron start
[root@5e4d20afb75f /]# /etc/init.d/munin start 
[root@5e4d20afb75f /]# service apache2 start
```

### 3. munin-node インストール(Docker Host on ubuntu)

```shell-session
# apt-get install munin-node
```

- munin サーバのIP確認

```shell-session
# docker network inspect isolated_nw | jq .[].Containers
(snip)
    "IPv4Address": "172.19.0.3/16",
```

```shell-session
# vi /etc/munin/munin-node.conf

(edit)

host_name fs1
allow ^172\.19\.0\.3$
```

```shell-session
# service munin-node restart
```

### 4. Web ブラウザからのアクセス

- 5分以上待ちましょう(/etc/cron.d/munin)

- LAN 側の 8080 にマップしたので Docker ホストIP の 8080 にブラウザでアクセス
  - 例: http://192.168.100.5:8080/munin

- 以下の表示が出ていたら成功

![Screenshot 2016-11-11 03.11.21.png](https://qiita-image-store.s3.amazonaws.com/0/67892/27caa977-e85d-f787-defa-38440b0e136b.png)

### 5. おわり

### additional memo

- add snmp plugin

```
# munin-node-configure --shell --snmp 192.168.100.203 \
--snmpversion 2c --snmpcommunity public

ln -s '/usr/share/munin/plugins/snmp__if_' '/etc/munin/plugins/snmp_192.168.100.203_if_1'
ln -s '/usr/share/munin/plugins/snmp__if_' '/etc/munin/plugins/snmp_192.168.100.203_if_10119'
ln -s '/usr/share/munin/plugins/snmp__if_' '/etc/munin/plugins/snmp_192.168.100.203_if_10124'
ln -s '/usr/share/munin/plugins/snmp__if_err_' '/etc/munin/plugins/snmp_192.168.100.203_if_err_1'
ln -s '/usr/share/munin/plugins/snmp__if_err_' '/etc/munin/plugins/snmp_192.168.100.203_if_err_10119'
ln -s '/usr/share/munin/plugins/snmp__if_err_' '/etc/munin/plugins/snmp_192.168.100.203_if_err_10124'
ln -s '/usr/share/munin/plugins/snmp__if_multi' '/etc/munin/plugins/snmp_192.168.100.203_if_multi'
ln -s '/usr/share/munin/plugins/snmp__uptime' '/etc/munin/plugins/snmp_192.168.100.203_uptime'
```
```
# munin-node-configure --shell --snmp 192.168.100.203 \
--snmpversion 2c --snmpcommunity public | sh
```