Serf を使用した Munin-node 自動追加, ついでに Winodws8 に Munin-nodeいれてみる

# Serf 使ってみる。が、ちょいとｗ
いまさら自分で「Serfとは？」って書かなくとも沢山検索にヒットしますし、あえて何番煎じ？って感じなので'まとめ'だけ。あとちょっと色々あそんだのでいつものメモ（Window に Munin-node と Serf 入れるたらまた少しはまった）。

アジェンダ的には、
　・Serf 入れてみる
　・Window に Munin-node いれてみる
　・Munin のノード自動追加

# Serf とは
[Serf](http://www.serfdom.io/)は、Vagrant で有名なMitchell Hashimoto氏が作成したgo言語で作られたツール。いわゆる[オーケストレーションツール](http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC%E3%82%B1%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))といわれているもの。詳しくは、下記のプレゼン資料が非常に役立ちます（手抜きですね）。

> ・[Serf という Orchestration ツール #immutableinfra](http://sssslide.com/www.slideshare.net/sonots/serf-iiconf-20140325)
> ・[ご注文は監視自動化ですか？](http://www.slideshare.net/zembutsu/is-the-order-an-automation-of-operation-and-monitoring?qid=493a7731-e373-426d-9cb9-d61821aced17&v=qf1&b=&from_search=4)

# Serf クラスタとイベントハンドラ
Serf を起動するとSerf クラスタに参加できるわけですが、その前にクラスタ？イベントハンドラ？どんなもの？と少し理解しておく必要があります。

> ・[【Serf】イベントハンドラを整理してみる](http://pocketstudio.jp/log3/2014/04/01/serf_event_handlers/)
> ・[Droongaノードの死活管理をSerfで行う手順 ](https://github.com/droonga/wikipedia-search/wiki/Droonga%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%BB%E6%B4%BB%E7%AE%A1%E7%90%86%E3%82%92Serf%E3%81%A7%E8%A1%8C%E3%81%86%E6%89%8B%E9%A0%86)

# Serf をインスコしてみる
まずその前に [vm を複数用意](http://qiita.com/murachi1208/items/99daa3ca069d907a7b50)しておきます。それぞれのvmにSerfを[ダウンロード](http://www.serfdom.io/downloads.html)してインストールします。が、最新版 0.6.3(2014/08/15現在)は、うまく動作してくれないのでひとつ前の 0.6.2 をインストールします。ちなみに 64bit版は、amd64 です。

```
$ wget https://dl.bintray.com/mitchellh/serf/0.6.2_linux_amd64.zip
$ unzip 0.6.2_linux_amd64.zip
```

## 起動
どのネットワークアダプタをSerfノードに参加させるか指定するだけです。これだけ。オワリ。

```
$ serf agent -iface eth0
```

オワリ、ではないのですね。これでは Serfノード独りぼっちなので join のコマンドを使ってSerfノードをつなげます。

```
$ serf join 192.168.11.102 ※相手先アドレス
```

ここらも詳しいことは下記を参考に
> ・[真夜中にふと思いついて Serf のイベントハンドラを触ってみた 〜アニキと舎弟の上京物語〜](http://qiita.com/inokappa/items/d080d271dd86f5ec228e)
 
# Windows8 に munin-node をインストール
最終更新日が 2011年と少し古いけど[公式サイト](https://code.google.com/p/munin-node-win32/)から [munin-node-win32 1.6.1.0 (Beta) Installer](https://munin-node-win32.googlecode.com/files/munin-node-win32-1.6.1.0-installer-beta.exe) をダウンロードしてインストールします。
手順としては、[[PC]Linuxからのwin8 PCモニタリング環境(munin-node-win32 + speedfan + sexe)Add Star](http://d.hatena.ne.jp/mazda77/20120831/1347067257) さんの記事に沿ってます。

1. Munin Node for Windows のサービスを全て停止します（コントロール パネル-管理ツール-サービス）。
2. 管理者権限でdos窓を開いて、Munin Node をインストールした場所まで移動します。```C:\Program Files (x86)\Munin Node for Windows```
3. ```munin-node-win32.exe -run``` を実行します。エラーが表示されているのであれば ```munin-node.ini``` を適宜修正します（エラーの対処は、[ここに](http://hydra.geht.net/tino/howto/monitoring/munin/win/)全て書いてあります）。あと私が使用しているiniファイル参考まで( https://gist.github.com/murachi1208/1dee7efa14491f4f23e3 )。
4. エラーが出ないことを確認できたら ```munin-node-win32.exe -install``` を実行しサービスに登録します。
5. Munin Node for Windows のサービスが実行されているか確認します（コントロール パネル-管理ツール-サービス）。そして自動起動するとかそこらへんは運用に合わせて設定します。
6. 再起動します（私は、再起動しなくてはまった）。

ここまでは比較的簡単ですが、Munin Node と通信するポートが開いていないので FireWall の設定を行い、icmp と port:4949 を許可する設定をします。「[Windows Vistaのファイアウォールでpingへの応答を許可する](http://www.atmarkit.co.jp/fwin2k/win2ktips/896vistaping/vistaping.html)」を参考にしてください。

Muninサーバ(Linux)で、munin-node-win32 をインストールした Windowsマシンに対して ping
が通るか確認すると共に、telnet コマンドを使用しポート4949でアクセスしコマンド list が動作していることを確認します（終了するには quit）。

```
$ telnet 192.168.11.200 4949
Trying 192.168.11.200...
Connected to 192.168.11.200.
Escape character is '^]'.
# munin node at hagehoge
list  ← ここ
df memory processes network cpu hdd speedfan disktime processor uptime 
fetch df    ← ここ
_dev_0_.value 49
_dev_1_.value 54
_dev_2_.value 57
.
quit    ← ここ
```

# Munin で監視できるか確認
たぶんもうここまできてれば問題ないはずｗ。だけど Munin で監視できるか確認しといたほうがいいので、```/etc/munin/munin.conf``` にちろっと定義します。

```
[Windows;windows8] 
address 192.168.11.200
use_node_name yes
```

しばらく待ってみて、Munin 側で Windows;windows8 の項目が出ていればok。

# Windows8 に Serf をインストール
Windows版のSerfを[ダウンロード](http://www.serfdom.io/downloads.html)してインストールします。こっちは、最新版 0.6.3(2014/08/15現在)で大丈夫。ちなみに 64bit版は、amd64 です。あとzipを解凍すればokです。

ショートカットを作成して、リンク先に以下のパラメーターを追加します。あと管理者権限で実行するのチェックをつけて起動します。

```
agent -join xxx.xxx.xxx.xxx -bind 自分のPCアドレス -role=Windows8
```

どこでもいいですが、Serfノードに参加されたことを members コマンドつかって確認します。

# Munin-node 自動追加
Munin のノード追加は ```/etc/munin/munin.conf``` に追加するだけで簡単ですが、会社規模だと監視する台数が・・・大変なわけで。そんなときに Serf を利用すると便利なスクリプトが公開されてました。

> ・[serf-muninを導入してmunin-nodeの監視追加、削除を自動化した](http://blog.glidenote.com/blog/2013/11/06/serf-munin/) / 前田氏のエントリ

https://github.com/glidenote/serf-munin-setup で公開されているスクリプトがよい感じです。

個人的に、監視nodeが自動追加されるのはいいけど自動削除されてしまうとどんな負荷があって落ちたの？ってみれないかと思うのと、Serf 0.2 なのとインストールスクリプトを多少変更してみた。
まだ本家にマージリクエストしてない途中経過ちゅうー
https://github.com/murachi1208/serf-munin-setup/tree/feature_serf_0.6.2_modify

# 検索したサイト情報
OneTabでまとめてます
http://www.one-tab.com/page/4C2Oy_JCQ1yMs_mfb76qrA

> [Droongaノードの死活管理をSerfで行う手順 ](https://github.com/droonga/wikipedia-search/wiki/Droonga%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%BB%E6%B4%BB%E7%AE%A1%E7%90%86%E3%82%92Serf%E3%81%A7%E8%A1%8C%E3%81%86%E6%89%8B%E9%A0%86)
> [Serf 虎の巻](http://deeeet.com/writing/2014/03/23/serf-basic/)

# 個人的な感想
SEやってるより運用SEが面白いなと思うこのごろ。
さて Consul もちょいと勉強してみるか。