perlbrew と CloudForecast を動かす
- 環境
% cat /etc/redhat-release CentOS release 6.3 (Final)
perlbrew
まずは拾ってくる。
curl -kL http://install.perlbrew.pl | bash
そして使うためのファイルを読む設定。確か上記の作業後に指示された気がする。
echo " source ~/perl5/perlbrew/etc/bashrc " >> .zshrc_local
ときにこの場合、 .zshrc にはこう書いてある。
load_if_exists () { if [ -e $1 ]; then source $1 fi } load_if_exists "$HOME/.zshrc_local"
普通に .bashrc / .zshrc に追記してもいい。
いったんシェルを抜けるなり、 source ~/perl5/perlbrew/etc/bashrc するなり。
無駄に最新版を入れる。
perlbrew install perl-5.16.2 perlbrew switch perl-5.16.2 perlbrew install-cpanm perl -le "warn $]" 5.016002 at -e line 1.
daemontools
使うので。以下参考。
http://www.ftnk.jp/~fumi/cl/2010-04-19-2.html
コマンドは /command/ 以下にインストールされるので、自分のパス通ってるところに ln -s でもする。
memcached
使うよね。
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz tar zxf memcached-1.4.15.tar.gz cd memcached-1.4.15 sudo yum install libevent-devel ./configure --prefix=/usr/local/memcached sudo make install
あとは適当に run ファイル書いて daemontools に任せる。
mysql
rpm を拾ってくるなど。
もうこれサーバ構築ですね。
http://dev.mysql.com/downloads/mysql/#downloads
この辺入れる。
MySQL-client-5.5.28-1.rhel5.x86_64.rpm MySQL-devel-5.5.28-1.rhel5.x86_64.rpm MySQL-server-5.5.28-1.rhel5.x86_64.rpm MySQL-shared-5.5.28-1.rhel5.x86_64.rpm MySQL-shared-compat-5.5.28-1.rhel5.x86_64.rpm
CloudForecast(準備)
本題。
拾ってくる。
git clone git://github.com/kazeburo/cloudforecast.git
依存ライブラリとか。以下参考。
http://memememomo.hatenablog.com/entry/20100726/1280124818
http://blog.riywo.com/2011/02/27/043646
あとこれ入れると多分いい。
cpanm Module::Install cpanm Alien::RRDtool
依存perlモジュールは extlib に入れる想定みたいだけど、別に perlbrew 入れてるから構わず入れる。
cpanm --installdeps .
もう一度perlbrew
net-snmp 辺りを入れようとすると多分エラー吐く。
ググると、どうも perlbrew 入れるときに perl のコンパイルオプション指定しないと駄目らしい。
泣きながら再インストール。
perlbrew uninstall perl-5.16.2 perlbrew install perl-5.16.2 -A ccflags=-fPIC
perl本体は削除され、再インストールされるけど、モジュールは削除されずに使いまわされたような気がする。いいのか?
改めて yum で net-snmp 辺りを入れる。当然インストールされるファイルの所有者が root になるので
cd ~/perl5/perlbrew/perls/perl-5.16.2/lib/site_perl/5.16.2/ sudo chown -R hirafoo:hirafoo *
する。そして先ほどのサイト見つつ snmp の何かをやるとか。
CloudForecast(起動)
yaml を用意する。
cp cloudforecast_sample.yaml cloudforecast.yaml cp host_config/basic.yaml{,_org}
見たいの追加する。
--- a/host_config/basic.yaml +++ b/host_config/basic.yaml @@ -6,4 +6,9 @@ component_config: resources: - traffic:eth0 + - traffic:2:eth0 - basic + - http:80 + - memcached:11211 + - mysql + - innodb
ディレクトリ作る。
mkdir data
daemontools で動かす前に、 daemontools でやるのと同等のコマンドを打つ。
root_path=/usr/local/cloudforecast sudo /usr/local/bin/setuidgid hirafoo $root_path/cloudforecast_radar -c $root_path/cloudforecast.yaml -l $root_path/server_list.yaml
すると Can't locate local/lib.pm... とか怒られますね。
何でかってと
% head -n 1 /usr/local/cloudforecast/cloudforecast_radar #!/usr/bin/env perl
このように cloudforecast_radar で /usr/bin/env perl を指定してるんですが、これ実際何が使われるかというとユーザによって変わるわけで。 perlbrew で入れた perl はそのアカウントでしか(普通)使えないわけで。つまり
% cat print_version.pl #!/usr/bin/env perl use strict; use warnings; print "$^V\n"; % chmod +x print_version.pl % ./print_version.pl v5.16.2 % sudo ./print_version.pl v5.10.1
のように他ユーザで env perl すると perlbrew じゃない perl = システムの perl が使われるわけで。
だから run の中とかで
_perlhome="/home/hirafoo/perl5" export PATH=$_perlhome/perlbrew/perls/perl-5.16.2/bin:/usr/local/bin:/usr/bin:/bin
とか書いてやる。あくまで一例。他にも色々やりようはある。
さーてこれで radar は動いたし、 web から見るかーと思うと
Odd number of elements in anonymous hash at /usr/local/cloudforecast/lib/CloudForecast/Host.pm line 19
とか言われます。該当部分を見ると
12 sub list_graph { 13 my $self = shift; 14 my @ret; 15 my $resources = $self->resources; 16 for my $resource ( @$resources ) { 17 my $data = $self->load_resource($resource); 18 my @graphs = $data->list_graph; 19 push @ret, { 20 graph_title => $data->graph_title, 21 resource_class => $data->resource_class, 22 resource => $resource, 23 graphs => \@graphs, 24 sysinfo => $data->graph_sysinfo, 25 last_error => $data->last_error, 26 }; 27 } 28 return @ret; 29 }
とあるので、この @ret に突っ込んでる内容をダンプしてみると $data->last_error が undef だそうなので
- last_error => $data->last_error, + last_error => $data->last_error || "",
とでもしてしまいます。
終わり
ここまで終えて、別にサーバで負荷かかるようなこと一切してないからグラフ見てもつまらないなーそもそもモニタリングする必要があるのって負荷かかってるサーバなんじゃ…そもそもこのサーバ何のために手に入れたの…とかは考えると落ち込むのでさっさと忘れてしまう。