Posted on May 3
Sensu
の環境を RPM
パッケージからインストールした事は何度かあったが Chef
や Puppet
を利用してのインストールはほぼ皆無なので試してみたChef
での導入については下記の参考サイトにて詳しく解説されているPuppet
を使って導入を試みてみるandytinycat/puppet-omnibus
は今回は触れていないが、既に稼働している Ruby
の環境で Puppet
の動作に必要な Ruby
の関連パッケージをビルドしてくれるっぽい。機会があったら試してみたい。
t1.micro
Market Place
の CentOS
(ami-eb6b0182
)Amazon Linux
ではなく CentOS
を選んだ理由は以下の「困った点」に書いた。
結局、Puppet
で全部は出来ないので手動で以下の手順を行う。
yum -y update openssl
yum -y update
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel curl wget vim
/etc/init.d/iptables stop
chkconfig iptables off
rpm --import https://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
wget https://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-10.noarch.rpm
rpm -ivh puppetlabs-release-6-10.noarch.rpm
yum install puppet
ここまでの手順で AMI
化しておくと良いかも。
Chef
で言うところの Community Cookbook
にあたる(?)モジュールを幾つか以下のようにインストールしておく。
sudo puppet module install example42/redis
sudo puppet module install puppetlabs/rabbitmq
sudo puppet module install sensu/sensu
上記の操作で以下のモジュールをインストールすることになる。
このようなモジュールは Puppet Forge
と呼ばれるサイトにて管理されている。
ここまで問題無く準備が整えば後は簡単。以下のマニフェスト(Chef
で言うとこのレシピ)を /etc/puppet/manifests/site.pp
として保存する。
尚、${your_password}
については環境に応じて適宜設定すること。保存したら以下のように puppet apply
を利用してマニフェストを適用する。
cd /etc/puppet
puppey apply manifests/site.pp
暫くすると以下のように Puppet
によるプロビジョニングが完了する。途中、ところどころで Warning
や Error
が出てしまっているが静観。
詳細な動作ログについては以下の通り。
プロビジョニングは成功するものの Sensu
関連が全く起動していない模様。
一応、/var/log/sensu/
以下に sensu-client.log
が出力されていたので見てみると…
{"timestamp":"2014-05-04T00:50:43.590293+0000","level":"error","message":"[amqp] Detected TCP connection failure"}
{"timestamp":"2014-05-04T00:50:43.590639+0000","level":"fatal","message":"rabbitmq connection error","error":"failed to connect"}
むむ。どうやら RabbitMQ
への接続に失敗しているようだ。今回は特に SSL
の設定をいれていないので証明書や鍵ファイルの置き場については特に気にしなくてよさそうなのでおそらく RabbitMQ
に Sensu
用の設定が入っていないと思われる。
curl -u guest:guest localhost:15672/api/vhosts
で RabbitMQ
の Virtual Host
の一覧を取得出来るので確認すると…
[{"name":"/","tracing":false}]
ああ、なるほど。ということで、もう一度マニフェストを適用してみると…
cd /etc/puppet
puppet apply manifests/site.pp
以下のようなログが出力された。
ついでに RabbitMQ
の Virtual Host
も…
[{"name":"/","tracing":false},{"recv_oct":759,"recv_oct_details":{"rate":0.0},"send_oct":1113,"send_oct_details":{"rate":0.0},"name":"/sensu","tracing":false}]
ちゃんと追加されているが…なぜか Sensu Server
等のプロセスが上がらないので、もう一度マニフェストを適用すると無事に Sensu Server
等のプロセスが起動した。
ちゃんとマニフェストが適用されているかは Serverspec
を使って確認したいので以下のように serverspec
をインストールする。
sudo gem install serverspec --no-ri --no-rdoc -V
今回は localhost
で Serverspec
を動かす為、初期設定の sercespec-init
では localhost
を選択して準備して以下のような spec
を書いた。
rspec
を走らせると…
グッジョブ!
そして、ブラウザで Sensu Server
ホストの 8080
にアクセスしてみると…(認証情報はデフォルト)
おお、やっと拝めた。
ということで、Puppet
を使って Sensu Server
を構築してみたが、構築してみて幾つか困った(困るであろう)点があったので以下に纏めた。
Puppet
を yum
でインストールしようとすると Ruby 1.8.7
がインストールされてしまう…(原因は以下の「Ruby 1.8.7 に依存したパッケージ」に書いた)Puppet
パッケージの導入は成功するものの結局は上手く動かないsensu
自体は組み込みの Ruby
で動くので問題ないPuppet
が動いている環境で最新の Ruby
を動かすことが容易に出来ない…ということになるAmazon Linux
は起動直後は既に ruby 2.0.0p451
がインストールされている状態で結果として色々と面倒だったので CentOS
の AMI
を利用したCentOS
にて Puppet
をパッケージからインストールした場合に以下のような Ruby
関連のパッケージが一緒にインストールされる。
Chef
のように Chef
に同梱されている組み込みの Ruby
というのが存在しないのは若干、残念。
以下のリンクによると…
以下のパッケージが Ruby 1.8.7
に依存したライブラリでコンパイルされているとのこと。
ガビーンである。対策としては上記のパッケージを環境に応じた Ruby
でコンパイルし直せとのこと…ちょっとハードルが上がる。
Puppet
を使ってチョーシンプルな Sensu Server
を構築してみたAmazon Linux
で頑張っていたけど挫折して CentOS
の AMI
を利用したDocker
コンテナを使って同じことをやってみたがその時に比べるとちょっとスマートに出来たSSL
の設定は行っていないPuppet
が古い Ruby
に依存しているところ…こちらの回避策らしいプロジェクトがあるようなのでそちらを試してみたいかな…2014 かっぱのほげふが