Ansibleでmunin2を入れるとビスケットが割れた

Posted on 2014/06/17(Tue) 23:55 in technical

あらまし

ポケットの中にはビスケットが1つー...本当にビスケットがあるか確認したか?割れてないか?最後に確認したのはいつだ?異常増加していないか?ビスケットが(ry

統合監視ツールのUIバランスと学習コストの高さの不満から、ちょっと距離を置きたいなぁと思った。

Ubuntu 14.04になってaptパッケージでmunin2も入ることだし、1.4系からの移行ついでに再評価しようと思う。

で、ついでにAnsibleの丁度いいサンプルを探していたので、munin2なんか丁度いいじゃないか、ということですよ。

Muninはcronベースじゃなくて適宜グラフ描画をするCGIベースで作るます。

構成

トポロジ:

| Ansible | --- | SW | --- | Munin |

両方ともこれ:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

Ansibleの準備

さっとこんな感じで:

$ sudo apt-get install python-pip python-dev sshpass
$ sudo pip install ansible

警告

1.2.1からSSH鍵チェックがデフォルト有効になりました。

由緒正しく公開鍵認証をする場合は不要ですが、パスワード認証(-k, -K)を使用する場合は、以下の設定も入れます。

$ echo "[defaults]
host_key_checking = False" >> ~/.ansible.cfg

インストール

Ansible Playbookを書いたのであっさりインストールするよ!

Ansible, MuninノードのいずれもDHCPで適当にアドレスが振られているから、適当に調べて使います。

Ansibleノード側:

$ git clone https://github.com/ainoniwa/ansible-playbooks.git
$ cd ansible-playbooks
$ git checkout fa1ec3e354
$ cd munin
$ echo "192.168.122.156" > hosts
$ ansible-playbook main.yml -i hosts -k -K
SSH password:
sudo password [defaults to SSH password]:

PLAY [all] ********************************************************************

<中略>

PLAY RECAP ********************************************************************
192.168.122.156            : ok=18   changed=17   unreachable=0    failed=0

すべてのノウハウはPlaybookに詰まっている(説明を端折るための横着)

警告

今後、構造等の大きな変更が加わった際に、本文書の修正を回避するために`git checkout`が実施されていますが、基本的には不要のはずです。

で、この場合で言うと http://192.168.122.156/munin/ にアクセスすると、インストールされたmuninの画面を見ることができると思いますが...どうですかねぇ。

munin_ansible_001.png

!危険!

Ansibleで`mount --bind`を用いた別ディレクトリマウントを実行すると、複数回マウントされてしまう問題を含んでいます。(2014/06/07時点でまたOpenです)

今回の例でも、ansible-playbookを2回実行してmountコマンドで確認すると、2回分マウントされてしまいますが、致命的と言うほどのものでもないし、他の手段が綺麗に決まらなかったので、とりあえず暫定利用しています。

外観

一応、このような感じでグラフの一覧が出ます。(この外観は https://github.com/jonnymccullagh/munstrap によるもので、デフォルトのものとは異なります)

munin_ansible_002.png

グラフをクリックしていくと、Day/Week/Month/Yearのページに飛ぶのは相変わらずですが、更にクリックするとグラフの描画期間指定が出来るポップアップが出ます。

munin_ansible_003.png

これだけでもmuninを導入する価値は十分ある。

閾値を超えたりすると表示できる画面もあるので、場合によっては入口はこっちの方が良いんじゃないかと思う。

munin_ansible_004.png

ノードの追加とか

ノードの追加には、 /etc/munin/munin-conf.d に適当な設定を置けばいい:

$ echo "[node.example.com]
    address 192.168.122.157
    use_node_name yes" > node.example.com.conf

残念ながらmunin自体のコンフィグレーションをするWebUIなるものは見つけられなかったので、そういった部分は適当にポチポチやるしかなさそうだ。

/24位の範囲なら、4949/TCPをポートスキャンしてDNSの逆引きをして設定ファイルを突っ込む位のことは出来るだろう。

こんな感じで:

# nmap -q 192.168.122.0/24 -p 4949 --open | grep "Nmap scan report"
Nmap scan report for munin.ainoniwa.net (192.168.122.156)
Nmap scan report for youmu.ainoniwa.net (192.168.122.157)

後は結果をシェルスクリプトに放り込めば出来そうじゃないか。面倒だからやらないけど。

雑感

とは言え、面倒なのはどちらかと言えばノード側だ。

セットアップ自体は良いのだが、最近はperlの導入が面倒なケースもあって、セットアップのついでにmuninを入れると言うのも気後れする。

今回のようにAnsibleを使ってmunin-nodeをインストール/設定するようなものを書いておけばいいのだが、プラグイン周りだけは逐一選択の必要がある。

muninはmunin-nodeが前提のAgent型で、以前FreeBSDでmunin-nodeを使っている時にperlのアップデートをしたらmunin-nodeたちが次々に死んでいって、 それに対応するのが非常に面倒だった覚えがある。

自動的にノードを探索して設定する部分は普通に作れそうだから、適当なプラクティスを探すとして。

munin-nodeの設定とアップデートが面倒な件は保留。