サーバーをMuninで監視するようにした

created: 2015/10/08 19:59

グラフ見たりするためのマスターどこに置くねんというのがあるんだけど、1年前くらいに買ったNUCなマシンが転がっていたので、これをマスターとして自宅で常時稼働させてMuninのNative SSH Transportを使いつつMuninのノード(VPS)を監視することに。
これなら余計なポート開ける必要もないからね。

インストール自体はmuninやらをapt-getでぽちぽち。
一通り終わったあとに動かそうとしたらPerlのモジュールが足りてないみたいだったので、"libcgi-fast-perl"も入れておいたほうが良いかも。

HTTPサーバはApache前提っぽくてMuninにもApache用の設定ファイルが同梱されてるんだけど、ApacheはよくわからないのでNginxで動かすことに。
Muninは設定ファイルのhtmldirに設定されているディレクトリにindex.html等を吐き出すので、そこをドキュメントルートにしてあげるだけで大体動く。グラフの動的生成だけはCGIなので、ここあたりを見つつ設定。

Native SSH Transportの設定は、ノードのアドレスの記述を

[foo]
   address ssh://foo:1234/bin/nc localhost 4949

みたいにしてあげるだけでOK。
鍵とかの指定は、ユーザー"munin"の"~/.ssh/config"あたりに設定を書いておいてあげればホスト名に応じた設定を使ってくれるのでそこで指定する。

ただ作業時にインストールしたバージョン2.0.19-3だとMuninの設定側にポートの指定が必須っぽくて、そっちで指定しないと~/.ssh/configでポート指定しても無視してポート22に繋ごうとしちゃう。
コード見たら

# Add any parameter to the cmd
my $remote_connection_cmd = $ssh_command . " -p " . $uri->port . " " . $user_part . $uri->host . " " . $remote_cmd . " " . $params;

ってなってたので、sshコマンドの引数で"-p"を渡してるから"~/.ssh/config"の設定を無視するっぽい。でも最新のコード確認したら設定に応じて"-p"オプションの有無を分岐させるようになってたのでそのうち不要になりそう。

一通り設定したらグラフを生成させて終わり。

sudo -u munin munin-cron

あと見栄えをちょっとおしゃれにした。

jonnymccullagh/munstrap - Github

一応AnsibleのPlaybookにした。

bonono/my-playbook-for-munin - Github