ども、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_VERSION0.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 から確認

Raspberry Pi で sensu-client を動かす: Uchiwa で動作確認

一瞬、sensu-server との時刻のズレがあり keepalive が Warning になってしまっていましたが、ちゃんと時刻合わせを行うことで監視が開始(keepalive が正常に動作しています)されています。


最後に

自前でビルドする必要はありますが Raspberry Pi でも sensu が動くことが解って嬉しいかっぱでした。

元記事はこちらです。
Raspberry Pi で sensu-client を動かすまでのメモ