zenbutsuさんのserf-munin12、glidenote先生の改造版3があり、3番煎じは流石の薄味ですが、Perlでserf-muninのイベントハンドラを書いてみました。
実はまともにperlのスクリプトを書くのはこれが2回目です。1回目は1.5年くらい前に書いた雑過ぎる席替えスクリプト4です。 あと、こちらのserf-munin.plは30days Album5のバックエンドでひっそりと動いてもらっています。
おっくんのおかげで30daysにserfが入った。/ serfの基本的な動作を試してみた | blog: takahiro okumura http://t.co/VHxWdcVaEO
— kuroda (@lamanotrama) 2014, 7月 23
基本的な動作はzenbutsuさん、glidenote先生のものと同じですが、若干の仕様変更を加えています。 設定方法そのものは公式ドキュメントをご参考ください。
$role
じゃなくてmunin_group
という$tags
を使う
$tags
の中にmunin_group
というタグを用意し、そこにmuninのグループ名を登録するようにしています。
例えば次のように、munin_group=application
というタグを設定します。
{
"tags": {
"munin_group": "app"
}
}
すると次のように、名前、アドレス、ロール、タグが\t
区切りで、標準入力からイベントハンドラに渡されてくるので、これをmuninのグループ名としています。
(ロール未指定の場合、<role>
の中身は空っぽで渡されてくる。)
<name> <address> <role> <tags>
foo.com 192.168.100.1 munin_group=app
AWSのようなクラウド前提だと$role
でも良いような気もするのですが、オンプレだと中々そうもいかず、ロールからは独立したmunin-nodeグループタグを用意することにしました。
munin-nodeのconfigファイルを生成・削除するタイミングの変更
member-update
でもconfigファイルを再生成する
これは単純に、サーバのリプレイス等が発生してIPアドレスが変わる可能性があるからです(言っても、ほぼほぼ無いケースですが)。
member-failed
でmuninのconfifファイルを削除しない
一時的な負荷等で障害が発生した時は、serf同士の通信もうまく行かずにfailedしてしまいます。
その時にserf-muninがmember-failed
の通知を受け取ってconfigファイルを削除してしまうと、しばらくしてmuninから該当サーバの項目が削除されてしまいます。
障害発生前のサーバの様子も確認したいので、明示的にサーバから離れるmember-leave
の時だけconfigファイルを削除するようにしています。
それ以外の挙動は同じです。よいserf x muninライフを!