ども、Play2 を調べながら Raspberry Pi でビルドさせているので時間の無駄が無い(つもり)の cloudpack の かっぱ (@inokara) です。
はじめに
Raspberry Pi で sensu-client を動かして自身(ラズパイ)を監視する仕組みを作ってみたいと思います。
最初の試み
何も考えずにドキュメントに従って apt-get update を試みましたが…
Fetched 6,911 kB in 47s (146 kB/s) W: Failed to fetch http://repos.sensuapp.org/apt/dists/sensu/Release Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)
ですよねー。ラズパイの CPU は ARM ですよね。そりゃあ、非対応ですよねー。
自前でビルド
sensu-build
しゃあないので自前でビルドしてみましょう。ということで、以下を利用します。
Raspberry Pi 用とかそんなもんではないですが、ドキュメントを読む限りでは…
This repo contains the toolset needed to build Sensu packages for all currently supported platforms. The builds are ‘omnibus’ style packages that contain everything they need to run, including their own build of Ruby and all required gems.
とありますので、なんか期待がモテそうです。(all currently supported platforms
とありますが、ARM プロセッサの機器がサポート対象かは知りません…)
ちょっと修正
但し、この sensu-build は Vagrant を利用することを前提としているようなので Rakefile に一手間加える必要がありました。
diff --git a/Rakefile b/Rakefile index 2ba2a4e..07a7495 100644 --- a/Rakefile +++ b/Rakefile @@ -5,9 +5,9 @@ gem 'bunchr', '0.1.5' require 'bunchr' require 'fileutils' -if ENV['VAGRANT_BOX'].nil? - raise "You do not want to run this on your local machine!" -end +#if ENV['VAGRANT_BOX'].nil? +# raise "You do not want to run this on your local machine!" +#end if ENV['SENSU_VERSION'].nil? raise "Please set ENV['SENSU_VERSION'] and re-run."
上記のように VAGRANT_BOX
の定義をコメントアウトしてしまいます。
ビルド
以下のようにビルドしてみたいと思いますが、その前に依存するパッケージをインストールします。
sudo apt-get install m4
気を取り直してビルドしてみましょう。最新の sensu バージョンは 0.14
ですので SENSU_VERSION
は 0.14
を指定します。
sudo su - git clone https://github.com/sensu/sensu-build.git export SENSU_VERSION=0.14 export BUILD_NUMBER=1 cd sensu-build ./build.sh
./build.sh
を実行したらかなりの時間が必要になりますので、ジョギング行ったり、ご飯食べたり、ビール飲んだり、別のコトをして気長に待ちましょう。(ビルドの時間はちゃんと測っていませんが 4 時間位だと思います。)
I, [2014-11-02T09:57:30.547529 #6787] INFO -- : sensu_bin_stubs built I, [2014-11-02T09:57:30.549339 #6787] INFO -- : Installing sensu_bin_stubs I, [2014-11-02T09:57:30.551297 #6787] INFO -- : Executing: [rm -rf /opt/sensu/bin] I, [2014-11-02T09:57:31.333573 #6787] INFO -- : Executing: [mkdir -p /opt/sensu/bin] I, [2014-11-02T09:57:32.115320 #6787] INFO -- : Executing: [ln -s ../embedded/bin/sensu-api /opt/sensu/bin/sensu-api] I, [2014-11-02T09:57:32.891625 #6787] INFO -- : Executing: [ln -s ../embedded/bin/sensu-client /opt/sensu/bin/sensu-client] I, [2014-11-02T09:57:33.669035 #6787] INFO -- : Executing: [ln -s ../embedded/bin/sensu-server /opt/sensu/bin/sensu-server] I, [2014-11-02T09:57:34.426249 #6787] INFO -- : Executing: [ln -s ../embedded/bin/sensu-ctl /opt/sensu/bin/sensu-ctl] 2014-11-02 09:57:35 +0000 I, [2014-11-02T09:57:35.197698 #6787] INFO -- : sensu_bin_stubs is installed I, [2014-11-02T09:57:35.200069 #6787] INFO -- : Building tarball 'sensu-0.14-1-armv6l.tar.gz' I, [2014-11-02T09:57:35.201980 #6787] INFO -- : Executing: [tar czf sensu-0.14-1-armv6l.tar.gz /opt/sensu /usr/share/sensu /var/log/sensu /etc/sensu/plugins /etc/sensu/mutators /etc/sensu/handlers /etc/sensu/extensions /etc/init.d/sensu-service /etc/init.d/sensu-api /e tc/init.d/sensu-client /etc/init.d/sensu-server /etc/sensu/config.json.example /etc/sensu/conf.d/README.md /etc/logrotate.d/sensu /etc/default/sensu] I, [2014-11-02T09:58:55.159044 #6787] INFO -- : Not building RPM, platform [raspbian] does not support it. I, [2014-11-02T09:58:55.161831 #6787] INFO -- : Not building DEB, platform [raspbian] does not support it.
上記のようなログが記録されてビルドが終了しました。特にエラーは出力されていないので無事にビルドは終了したようです。ちなみにカレントディレクトリには sensu-0.14-1-armv6l.tar.gz
が作成されています。
-rw-r--r-- 1 pi pi 1310 Nov 2 04:24 Vagrantfile -rw-r--r-- 1 pi pi 3899 Nov 2 04:24 README.md -rw-r--r-- 1 pi pi 799 Nov 2 04:24 Gemfile.lock -rw-r--r-- 1 pi pi 97 Nov 2 04:24 Gemfile drwxr-xr-x 3 pi pi 4096 Nov 2 04:24 assets -rwxr-xr-x 1 pi pi 2339 Nov 2 04:24 para-vagrant.sh -rwxr-xr-x 1 pi pi 1131 Nov 2 04:24 install_dependencies.sh -rwxr-xr-x 1 pi pi 169 Nov 2 04:24 build.sh drwxr-xr-x 4 pi pi 4096 Nov 2 04:24 pkg_scripts drwxr-xr-x 2 pi pi 4096 Nov 2 04:24 scripts drwxr-xr-x 2 pi pi 4096 Nov 2 04:24 runit_scripts drwxr-xr-x 2 pi pi 4096 Nov 2 04:24 recipes drwxr-xr-x 8 pi pi 4096 Nov 2 04:24 sensu_configs -rw-r--r-- 1 pi pi 2839 Nov 2 04:39 Rakefile -rw-r--r-- 1 root root 21564353 Nov 2 09:58 sensu-0.14-1-armv6l.tar.gz
おお。
sensu-client を起動
もう一手間
ビルドが完了しただけでは sensu-client は動きません。以下の作業が必要になります。
- sensu ユーザーの作成
- /var/log/sensu ディレクトリのオーナー、グループ変更
- /var/run/sensu ディレクトリのオーナー、グループ変更
- /etc/sensu/config.json の設定(sensu の設定)
これらを粛々とこなしていきます。
sensu ユーザーの作成
sudo adduser sensu
実行後、sensu ユーザーのログインシェルを /bin/false
に変更します。
sudo usermod -s /bin/false sensu
/var/log/sensu と /var/run/sensu ディレクトリの権限変更
ログの出力と PID ファイルは sensu ユーザーで出力されますのでそれぞれのディレクトリの権限を変更する必要があります。
sudo chown -R sensu:sensu /var/log/sensu sudo chown -R sensu:sensu /var/run/sensu
sensu の設定
取り急ぎの動作確認としては RabbitMQ のホストと登録するホスト名を指定します。
--- config.json.example 2014-11-02 09:57:21.048893770 +0000 +++ config.json 2014-11-02 10:08:46.420967014 +0000 @@ -1,19 +1,11 @@ { "rabbitmq": { - "host": "localhost", + "host": "${RabbitMQ_HOST}", "port": 5672, "user": "sensu", - "password": "sensu", + "password": "${YOUR_PASSWORD}", "vhost": "/sensu" }, - "redis": { - "host": "localhost", - "port": 6379 - }, - "api": { - "host": "localhost", - "port": 4567 - }, "handlers": { "default": { "type": "set", @@ -36,7 +28,7 @@ } }, "client": { - "name": "localhost", + "name": "raspi01", "address": "127.0.0.1", "subscriptions": [ "test"
sensu-client の起動
満を持して sensu-client を起動します。
sudo /etc/init.d/sensu-client start
ログを覗いてみます。
{"timestamp":"2014-11-02T10:41:24.208961+0000","level":"warn","message":"loading config file","file":"/etc/sensu/config.json"} {"timestamp":"2014-11-02T10:41:24.211573+0000","level":"warn","message":"loading config files from directory","directory":"/etc/sensu/conf.d"} {"timestamp":"2014-11-02T10:41:24.289675+0000","level":"warn","message":"loading extension files from directory","directory":"/etc/sensu/extensions"}
無事に起動しているようです。
uchiwa から確認
一瞬、sensu-server との時刻のズレがあり keepalive
が Warning になってしまっていましたが、ちゃんと時刻合わせを行うことで監視が開始(keepalive
が正常に動作しています)されています。
最後に
自前でビルドする必要はありますが Raspberry Pi でも sensu が動くことが解って嬉しいかっぱでした。
元記事はこちらです。
「Raspberry Pi で sensu-client を動かすまでのメモ」