作業メモ
td-agent(fluentdのラッパー)がパッケージ管理ソフト(yumとかapt-get)からインストールできれば
全部セットで一番簡単なんですが、利用している他のミドルウェア(OSやRuby)の影響があって
fluentdをgemで入れたりした場合、起動スクリプトとか、デフォルトの設定ファイルとかは
存在しません。
でもデーモンとして起動したい!できるだけ『fluentd 入門』でぐぐるといっぱい出てくる
td-agentのチュートリアルみたいに扱いたい!( # /etc/init.d/td-agent start みたいなコマンドで管理)
ということがあったので、td-agentの起動スクリプトを少しだけ変えたものを書きました。
前提条件
適宜自分用に置き換えてください。
- 設定ファイルの配置場所
- /etc/fluentd/fluent.conf
- ログファイルの配置場所
- /var/log/fluentd/fluentd.log
- 起動中のPIDファイルの配置場所
- /var/fluentd/fluentd.pid
- デーモン起動ユーザはroot
- fluentdはrbenvで入れたrubyのgemでインストールしたもので、実行ファイルのパスは/opt/rbenv/shims/fluentd
- 起動スクリプトはroot:root 755 /etc/init.d以下に配置
最初に
fluentdのオプションで設定ファイルやログファイルを指定しますが、存在しなかった場合に自動で作成
とかはしてくれないので、予め用意しておきます。
1 2 3 4 5 6 7 |
$ sudo mkdir /etc/fluentd $ sudo mkdir /var/log/fluentd $ sudo mkdir /varfluentd # 設定いろいろしてください $ sudo vim /etc/fluentd/fluent.conf # ファイルが存在するだけでOK $ sudo touch /var/log/fluentd.log |
デーモンスクリプトを書く。
以下のようになりました。(他の起動スクリプトや、td-agent起動スクリプトにならいました。start,stop,restart,statusに対応)
ポイントとしては以下
- chkconfig: – 80 20 を書きましょう(# chkconfig add fluentdするため)
- /etc/init.d/functions はインポート(.やsourceで)しましょう(起動,終了関連の便利スクリプト集 daemon, failure, success, statusとか)
- stopは処理を見ればわかるけど、fluentd.pid見て、そこに書いてあるプロセスIDをkillしてるだけ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#!/bin/bash # # /etc/rc.d/init.d/fluentd # # chkconfig: - 80 20 # description: fluentd # processname: fluentd # pidfile: /var/fluentd/fluentd.pid # Source function library. . /etc/init.d/functions name="fluentd" prog="fluentd" config="/etc/fluentd/fluentd.conf" if [ -f /etc/sysconfig/$prog ]; then . /etc/sysconfig/$prog fi STOPTIMEOUT=120 PIDFILE=${PIDFILE-/var/fluentd/$prog.pid} DAEMON_ARGS=${DAEMON_ARGS---user root} FLUENTD_CMD="${FLUENTD_ARGS-/opt/rbenv/shims/fluentd --config /etc/fluentd/fluentd.conf --daemon /var/fluentd/fluentd.pid --log /var/log/fluentd/fluent.log}" start() { ulimit -n 65536 echo -n "Starting $name: " daemon --pidfile=$PIDFILE $DAEMON_ARGS $FLUENTD_CMD RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n "Shutting down $name: " if [ -e "${PIDFILE}" ]; then # Use own process termination instead of killproc because killproc can't wait SIGTERM FLUENTD_PID=`cat "$PIDFILE" 2>/dev/null` if [ -n "$FLUENTD_PID" ]; then /bin/kill "$FLUENTD_PID" >/dev/null 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ]; then TIMEOUT="$STOPTIMEOUT" while [ $TIMEOUT -gt 0 ]; do /bin/kill -0 "$FLUENTD_PID" >/dev/null 2>&1 || break sleep 1 let TIMEOUT=${TIMEOUT}-1 done if [ $TIMEOUT -eq 0 ]; then echo -n "Timeout error occurred trying to stop fluentd..." RETVAL=1 failure else RETVAL=0 success fi else failure fi else failure RETVAL=4 fi else killproc $prog RETVAL=$? if [ $RETVAL -eq 0 ]; then success else failure fi fi echo [ $RETVAL -eq 0 ] && rm -f $PIDFILE && rm -f /var/lock/subsys/$prog return $RETVAL } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status -p $PIDFILE 'fluentd' ;; *) echo "Usage: $prog {start|stop|restart|status}" exit 1 ;; esac exit $? |
これを/etc/init.d/fluentdとして配置すれば
1 |
$ sudo /etc/init.d/fluentd start |
とかで起動できようになります。
あとはマシン起動時とかの設定をしたければ
1 2 |
$ chkconfig --add fluentd $ chkconfig --level 2 fluentd on |
とかやればOKです。かんたん