2011リソースモニタリングツール「CloudForecast」入門kazeburoさんが開発をされているサーバリソースの可視化ツール「CloudForecast」ですが、個人的に使ってみていてとても使いやすいなと思っています。使ってくれる人が増えるといいなと思い、自重せずに入門エントリを書いてみました。CloudForecastって何?そもそも何なの?という話ですが、CloudForecastとはリソースのグラフ作成ツールとして有名な「RRDTool」の薄いラッパーとして作られています。記述言語はPerlですので、PerlとRRDToolの使い方が大体分かっている人にとっては導入さえしてしまえばかなりかゆいところまで手が届く=カスタマイズが簡単かつ自由自在なツールだと思います。2010でのこちらのスライドをご覧頂ければと思います。OETIKER」と入っていると思います。Zabbixは独自にRDBにレコードを突っ込んでグラフ描画をしているようですが、それ以外はRRDToolを使って、RRD(ラウンドロビンDB)に値を記録しておき、それを使ってグラフ描画を行っています。どのツールも統合環境として富豪化し過ぎていて、「簡単にグラフを出したい」というだけの欲求に使うには大掛かりすぎます。その点、CloudForecastは非常にシンプルなPerlのコードで組み立てられており、CPANモジュールさえ入れてしまえば、データ取得デーモンやWEBサーバなども、スクリプトを叩くだけで動作させることができます。小規模だけでなく大規模環境での動作も想定されており、Gearmanを使ってデータ取得部分を並列分散処理させることも非常に簡単にできますし、自分が取りたいデータもPerlスクリプトを1枚書くだけで柔軟に追加することができます。作りが非常にシンプルなので全体のカスタマイズも非常に見通しが良いです。自分はサーバ構成情報をYAMLに書くのが面倒だったので、RDBに入っている構成情報を取得して動作させるように改造したりしていますが、1日で作ることができました。お仕事でこういうプロダクトを使うときには「導入が容易」なことと「カスタマイズが容易」なことが重要だと思いますが、リソースモニタリングに特化したツールとしては現状最適じゃないかなーと個人的に思っています。試してみよう!の前にお手元に試せるサーバのある方はとりあえずそちらをご利用頂くとして、そうでない方は今ならAmazonEC2を使うのが簡単かなと思いますので、とりあえずそのイントロをスライドにしました。適当に作ったので間違ってたらすいません。riywoなお、sshの設定に関してはmyfinderさんのこちらの記事が非常によくまとまっていますので、その辺が不安な方は一読されることをおすすめします。Linux(≒CentOS)での作業を想定して進んでいきます。ソースをゲットレポジトリはgithubで公開されているので、とりあえずそれを取得しましょう。gitコマンドが入っていないので、yumでいれます(Amazonのyumレポジトリは色々入ってて便利ですね)。CentOSの場合は標準レポジトリにはないので、EPELというレポジトリを使うといいと思いますが、紹介は割愛(詳細はkazeburoさんのスライドにあります)。https://github.com/kazeburo/cloudforecast.gitCPANモジュールをcpanmで入れよう&その他インストール続いて、CloudForecastを動作させるのに必要なCPANモジュールを入れていきます。shellを使っていれる必要などなくなっていますのでご安心を。必要なモジュールは先程cloneしたディレクトリ配下にextlibというディレクトリを作り、全てそこにインストールしてしまいます。しておけば、他のアプリケーションには全く影響することなく自由にCPANモジュールを使うことができます。その鍵を握るのがcpanmというスクリプトです。簡単な使い方はtokuhiromさんが紹介されているようにcpanmをwgetしてしまって、実行するという方法です。Linuxでなんにもない状態でcpanmで入れようとするとconfig.hがないとかで怒られたのでperl-devel(と依存いくつか)と、XSを入れるためにgccを入れておきます。perl-develあとはcpanmで~/cloudforecast/extlibに入れていくのですが、先んじてModule::InstallとCPANを入れておく必要があるので先に実行(本来はincが配布されるべきなのかな?)。JSON::XSのYes/Noで止まったりするので注意。CPANModule::Install入れるのに10分くらいかかるかなと思いますが気長に待ちます。.最後の「.」を忘れずに。時間がかかりますが忍耐強く待って下さいね。***とすると良いと思います(さっき試したらProc::ProcessTableが無いということでコケていましたので、入れてからinstalldepsを再実行)。最後に、snmpとrrdtool関係をyumで入れてしまいます。rrdtool-perlこれでインストール関係は終了です。設定していこうSNMPの設定とりあえずリソースモニタリングするサーバとして、インストールしたサーバ自身を対象にしましょう。CloudForecastに限らず、監視ツールの類はSNMPを使うことが多いと思いますのでまずはそれをセットアップします。ccitt.1...SNMPの詳しい仕組みについては割愛しますが、アクセスする際にコミュニティ名とバージョンが必要になります。ここではデフォルトの「public」というコミュニティでMIBを手広く取れる様にしてみましたが、この辺はご自由に。CloudForecast起動!それでは最後、CloudForecastの設定をしましょう。cloudforecast.yamlとりあえずsampleのままで大丈夫です。cloudforecastこんな感じでsampleを元にserver_list.yamlに自分自身を追加します。IPアドレスはifconfigとかで調べて下さい。configをbasic.yamlとしていますが、これはhost_confgディレクトリにあるファイルを指しています。詳細はkazeburoさんのスライドに詳しいですが、デフォルトのbasic.yamlでは「eth0のtraffic」と「basic(cpu,LA,mem,TCP)」を取得します。全てSNMP経由になります。これで準備完了しました。それではまずはリソース取得デーモンを起動します。データ保存用のディレクトリがないので初回はそれも作っておきます。&これでバックグラウンドプロセスとして稼働し始めます(このターミナルログインを抜けると終了してしまうので注意)。デフォルトではCloudForecastの巡回は5分単位なので気長に待ちます(自分は1分間隔が好きなのでパッチを当てて利用しています)。ログを見ていると巡回が始まったことがわかります。{lib/CloudForecast/Radar.pm#64}そうしたら、これをWEBインタフェースからグラフにして見てみましょう。Apacheなど入れる必要はなく、Starletというサーバで起動することができます。&これで5000番ポートでwebサーバが起動しています。あとはEC2のFW設定で、5000番を自分のPCのIPアドレスだけに解放して「http://ec2-XX-XX-XX-XX.compute-1.amazonaws.com:5000」にブラウザからアクセスすれば画面が表示されると思います。カスタマイズの世界へ!基本的な導入は以上です。普段からPerlを触っている人には非常に簡単だったと思いますが、そうでない人にとっても今はcpanmを使ってかなり容易にCPAN環境を構築できるので、ぜひ一度体験して欲しいと思います。ここまで来てしまえば、後は必要なところをどんどんカスタマイズしていけばいいと思います。自分は以下の様なカスタマイズをして利用しています。利用していたRRDの取得・表示スクリプトを移植この辺はできればforkしてgithubに上げたいのですが、整えるのに手間取ってまだやれてません。あとプラグインの作成とGearmanを使った構成、daemontoolsについても入門を書く必要がある気がしますが、とりあえず今回は割愛します。時間が取れたら書こうと思います。基本的にはkazeburoさんのスライドに全て書かれていますので、興味ある方はそちらを見つつやって頂ければと思います。おわりにCloudForecastというPerlで書かれたリソースモニタリングツールの導入を説明しました。インストールが簡単かと言われると、cpanmに慣れていない人にはちょっと手間取るかも知れません。他にミドルウェアを入れる必要もなく、rootでの作業も少なく、監視される側も大した設定をする必要もないという点で、非常にお手軽だと思います。CloudForecastを触ることで、自分はcpanmやRRDToolやplack、Gearmanの効果的な使い方を知ることができているので、勉強材料としても非常に優れていると思います。WEBインタフェースをApache経由にしたいなと思ったら、kazuhoさんの記事を参考にしてmod_proxyを使うことでお手軽に設定できる、というのを勉強できたりしました。2009リソースモニタリングツールはすでに他のを使っているよ、という方もぜひ一度試してみると、モダンなPerlとRRDToolの勉強になってインフラ屋さんとしては損はないかなと思います。あと、CloudForecastのグラフはクエリストリングで渡すことで自由に調整して描画させることができるので、既にお使いのサーバ管理ツールなどがあれば、imgタグをうまく出してあげることでそこにグラフを組み込むことも容易だと思います。8:33おもしろそうですね。僕の会社も似たような仕組みで、一台でウン万台のリソースを監視しています。CloudForecastはGithubに上がっているみたいなので、取り入れられそうなアイデアは活用させていただきます。