Posted on May 3
Sensu の環境を RPM パッケージからインストールした事は何度かあったが Chef や Puppet を利用してのインストールはほぼ皆無なので試してみたChef での導入については下記の参考サイトにて詳しく解説されているPuppet を使って導入を試みてみるandytinycat/puppet-omnibus は今回は触れていないが、既に稼働している Ruby の環境で Puppet の動作に必要な Ruby の関連パッケージをビルドしてくれるっぽい。機会があったら試してみたい。
t1.microMarket 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 かっぱのほげふが