daemontoolsを使ってfluentをデーモンとして動かす

追記

とりあえず起動したいだけなら--daemonオプションつけて起動すればいいと思います。

$ fluentd -d /var/run/fluentd.pid -c /etc/fluent/fluent.conf

みたいな感じで

仕様

  • fluentというユーザでデーモンを動かす
  • rvmのruby-1.9.2でfluentというgemsetに必要なgemを入れる
  • fluentdに--daemonというオプションがあるが使い方がよく分からないのと汎用性が低いのでdaemontoolsで動かす

ユーザ作成

$ useradd fluent

rvmの準備

$ su - fluent
% rvm list
# 1.9.2がインストールされてなければ
% rvm install 1.9.2
% rvm use 1.9.2
% rvm gemset list
# fluentというのが作成されてなければ
% rvm gemset create fluent
% rvm use 1.9.2@fluent --default

fluentdのインストール

% whoami
fluent
% rvm current
ruby-1.9.2-p290@fluent
% rvm install fluentd --no-ri --no-rdoc # デーモンにドキュメントは不要
% which fluentd
/home/fluent/.rvm/gems/ruby-1.9.2-p290@fluent/bin/fluentd

fluentの設定ファイルの作成

/etc/fluentに設定ファイルを置くことにする(デフォルトの場所)

$ mkdir -p /etc/fluent
$ chown fluent:fluent /etc/fluent
% whoami
fluent
% fluentd --setup /etc/fluent
% ls /etc/fluent
fluent.conf    plugin

起動確認

% fluentd -vv &
% echo '{"hello":"world"}' | fluent-cat debug.test
2012-02-02 13:44:30 +0900 debug.test: {"hello":"world"}

deamontoolsのインストール

本家のサイトから daemontools-***.tar.gz をダウンロード

ここではdaemontools-0.76.tar.gzの場合を書く

$ mkdir /package
$ cd /package
$ wget http://path/to/daemontools-0.76.tar.gz
$ tar xzvf daemontools-0.76.tar.gz
$ rm daemontools-0.76.tar.gz
$ cd admin/daemontools-0.76

src/error.hを以下のように変更

diff -ur daemontools-0.76.old/src/error.h daemontools-0.76/src/error.h
--- daemontools-0.76.old/src/error.h	2001-07-12 11:49:49.000000000 -0500
+++ daemontools-0.76/src/error.h	2003-01-09 21:52:01.000000000 -0600
@@ -3,7 +3,7 @@
 #ifndef ERROR_H
 #define ERROR_H
 
-extern int errno;
+#include <errno.h>
 
 extern int error_intr;
 extern int error_nomem;
$ ./package/install

daemontools用の設定ファイルを作成

% whoami
fluent
% pwd
/home/fluent
% mkdir -p service/fluentd/log
% chmod +t service/fluentd

service/fluentd/runとservice/fluentd/log/runを設置

% chmod +x service/fluentd/run
% chmod +x service/fluentd/log/run
% cat service/fluentd/run
#!/bin/sh
exec 2>&1
source /etc/profile.d/rvm.sh
exec setuidgid fluent /path/to/fluentd
% cat services/fluentd/log/run
#!/bin/sh
exec setuidgid fluent multilog t ./main '-*' '+* status: *' =status

service/fluentd/runの中の/path/to/fluentdは

% which fluentd

で分かる。
最後に

$ ln -s /home/fluent/service/fluentd /service/fluentd

daemontoolsの確認

$ svstat /service/fluentd
/service/fluentd: up (pid ******) 2370 seconds

0secondsと1secondsの間をpidが切り替わりながら繰り返している場合は起動に失敗してる。