oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

僕らが日々使っているproteus-monitorが公開されています+インストール方法

詳しいアーキテクチャなどは今後おいおい・・・なんですが、とりあえず公開されていますよ、という紹介記事です。自分たちで使っているので言うのも何ですが、非常に素晴らしいツールで是非良かったら試してみて欲しいです。

何をするツールなのかというと、agent側で値を取って来てserver側でWeb画面表示させる、という書いてしまえば「ふーん」な感じなんですが、現在これでdstatの値等を取ってきて可視化しています。こんな感じです。とてもシャレオツです。

で、1台や2台だとあんまり威力が分からないかもですが、これが数十台や数百台の運用になってくると
・わざわざサーバにログインして見るとかリームー
cactiやmuninもポーリングしている間隔で取れていないとかがあるので、「今この瞬間の全サーバの状況が知りたい!」という「おやじの全盛期は全日本の時か・・・オレは・・・オレは今なんだよ!」というのに向かない
なので、ピーク時間帯の各種サーバのモニタリングをするのに非常に嬉しいかなと。

作者は弊社のSuguru Namura氏。
Githubはこれ。MITライセンスです。
※ドキュメントは整備中なのでよろしくお願いします☆(ゝω・)v

agent側
https://github.com/ameba-proteus/proteus-monitor-agent
server側
https://github.com/ameba-proteus/proteus-monitor-server

以下SL6.2でローカル内にserver、agentの両方を設定する方法です。

gitからcloneする前にnode.jsとnpmが使える様になっている事、パスが通っている事が前提です。
npmでモジュールをインストールするのでNODE_PATHも通して下さい。僕はこれで1時間くらいハマりました。

以下は僕がテスト環境でnode.jsをとりあえず動かした時の手順です。ちゃんとした手順とかじゃないと思うのでそこそこで・・・。

wget http://nodejs.org/dist/v0.8.14/node-v0.8.14-linux-x64.tar.gz
tar zxvf ./node-v0.8.14-linux-x64.tar.gz
展開したら名前が長いので、
mv node-v0.8.14-linux-x64 node_v0.8.14
に変更。
ここまでやったらパスを各自環境に合わせて
export NODE="/home/oranie/dev/node/node_0.8.14/bin"
export NODE_PATH="/home/oranie/dev/node/node_0.8.14/lib/node_modules/"
export PATH="$NODE:$PATH";
みたいな感じで.bashrcに追記してあげましょう。
でsource ~/.bashrcすれば、おそらくこれでnodeとかnpmがフルパスじゃなくても使えるようになっていると思います。

では、準備が出来たのでとりあえず一つのサーバagentとserverをインストールしましょう。どこかの作業ディレクトリで

git clone https://github.com/ameba-proteus/proteus-monitor-server.git
git clone https://github.com/ameba-proteus/proteus-monitor-agent.git

をして下さい。次に必要なモジュールをnpmでinstallします。方法は簡単でcloneしたディレクトリに移動して
npm installを実行するだけです。
npmでのモジュールインストールが終わったらとりあえず

node ./proteus-monitor-server server.js &

でserver側を起動します。すると
http://{サーバのIP}:3333/で管理画面が見れるはず。でもstatsとかをクリックしても何も表示されていないでしょう。
次に

node ./proteus-monitor-agent/agent.js &

と起動します。
すると管理画面の「stats」にagentを起動したサーバの情報が自動で追加されているはずです。
ちなみに、agentの起動時に以下のオプションがあります。

option('-h, --host <hostname>', 'server host to connect')
server側のIPやhostname指定です。

option('-g, --group <group>', 'server group')
agent側で収集した情報を管理画面で表示させる場合にグルーピング出来ます。(例:-g mysql)とか。
グルーピングした中でMAX、TOTAL、AVERAGEを表示するのでこのような統計値を見たいグループごとに分けておくと良いでしょう。

option('-c, --config <config>', 'configuration path')
agent側で使用するconfigファイルを指定します。

githubのconfigファイルには現在
{
        host: "127.0.0.1:3333",
        group: "default",
        plugins: {
                "stat": {},
                "ps": {
                        "cassandra": "java.+cassandra\\.jar",
                        "agent": "node.+agent\\.js"
                }
        }
}
という様な感じで
接続するホスト
グループ名
使用するプラグイン
が既に設定されています。後はお好みによって買えたり自分で作成したpluginを追加するとかですね。

こんな感じでさっくり起動すると、始めに書いた様にagentを起動したサーバの状況が手に取るようにわかる訳ですね。

で、pluginについても欲しい値をjsonで返すようにするだけなので、お手軽に作成出来ます。と言っておきながら僕はまだ書いていません。
是非お試しあれ。

今後もう少し詳しい構造やchefのレシピなども公開できればなーと考えています。

余談ですが、作者のNamura氏は「ピコーン!」と閃き、4時間くらいで作成したと話を聞いてガチでロマサガみたいな事をするなぁとトリハダが立ちました。