2015年12月25日金曜日

fluentdをWindowsで使う

以前、Windows上でお試し版のfluentdの0.10.46を使っていたが、正式に対応した(masterブランチに組み込まれた)とのことで、改めて導入してみた。

ここを参考にさせてもらいました(ほぼ一緒)。
http://qiita.com/nurse/items/8bbb194982c685f1e795

環境は以下の通り

・ Windows8.1(x64)
・ Ruby 2.2.3(x64) + devkit(Cコンパイル環境)
・ fluentd 0.14.0.pre.1
・ Git for Windows

1.Ruby のインストール

  ここからインストーラをダウンロードし、インストールする。
  ここでは、「c:\Ruby22-x64」にインストールする。
  途中のオプション指定で、PATHに追加する。

2.devkit

  このモジュールも上記と同じサイトから入手する。
  入手したモジュールを実行すると、展開先を聞かれるので、「c:\ruby」としておく。

  展開し終わったら、以下を実施。
$ cd c:\ruby
$ ruby dk.rb init
config.ymlgが生成されるので、そのファイルに1のrubyインストールパスを記載する

  - C:/Ruby22-x64
 
  編集が終わったら、
$ ruby dk.rb install
  を実行する。

3.Git
  
  git レポジトリからfluentdを入手。zip出ダウンロードでもいいかなと思ったのですが、
  fluentdのgemfileの中身で改行がLFとなっていたので、動作しなかった。これだけなら、
  ファイルを改修すればよいかもしれないけど、、他でも問題がでるかもしれないので、、
  素直にgitを入れて、同梱のgit-bashを使うことにする。

  http://www.git-scm.com/download/win

  からダウンロードする。
  サーバ利用などを考慮すると何かとインストールされるのは気持ち悪いので、portableで進める(c:\git)。

4.fluentdのインストール

  以下は、c:\git\bash.exeを実行し、その上で進める。

$ cd /c
$ git clone https://github.com/fluent/fluentd.git
$ cd fluentd
$ gem install bundler
$ bundle
$ bundle exec rake build
$ gem install pkg/fluentd-0.14.0.pre.1.gem

gitをProxy環境下で使用する場合、以下の設定をしておく
$ git config --global http.proxy http://proxy.example.com:8080
$ git config --global https.proxy http://proxy.example.com:8080
同様にgemも使うので、下の設定をしておく
$ export HTTP_PROXY=http://proxy.example.com:8080

これで基本のセットアップ完了。
$ fluentd -c ./example/in_forward.conf

  これでうまく動けばテスト完了。

5.pluginのインストール
 
  試しに、複数のログをtailで読み取り、mongodbに送り込むという処理を実装してみる。

  ・ 複数のファイルを読み取るには、fluent-plugin-tail-exを使う
  ・ 読み取ったログのフォーマットに型を割り当てるのに、fluent-plugin-typecastを使う
  ・ mongodbに入れるのに、 fluent-plugin-mongoを使う
 ということで、以下を実行する。

$ ./bin/fluent-gem install fluent-plugin-tail-ex
$ ./bin/fluent-gem install fluent-plugin-typecast
$ ./bin/fluent-gem install fluent-plugin-mongo
 とここで問題が。
 installすると、fluentdの0.12.19が一緒にインストールされてしまい、fluentd自体が
 そちらを参照しに行ってしまう。
$ fluentd --version
fluentd 0.12.19
 結果として、
$ fluentd -c ./example/in_tail.conf
2015-12-24 00:45:48 +0900 [info]: reading config file path="./example/in_tail.conf"
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fluentd-0.12.19/lib/fluent/supervisor.rb:387:in `trap': unsupported signal SIGHUP (ArgumentError)
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fluentd-0.12.19/lib/fluent/supervisor.rb:387:in `install_supervisor_signal_handlers'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fluentd-0.12.19/lib/fluent/supervisor.rb:139:in `start'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fluentd-0.12.19/lib/fluent/command/fluentd.rb:171:in `&lttop (required)&gt'
        from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
        from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/fluentd-0.12.19/bin/fluentd:6:in `&lttop (required)`&gt'
        from C:/Ruby22-x64/bin/fluentd:23:in `load'
        from C:/Ruby22-x64/bin/fluentd:23:in `&ltmain&gt'
 こんなエラーがでるようになる。0.12.19はWindowsに対応していないが原因。
 とりあえず、0.12.19をアンインストールしてみる
 
$ ./bin/fluent-gem uninstall fluentd
Select gem to uninstall:

   1. fluentd-0.12.19
   2. fluentd-0.14.0.pre.1
   3. All versions
  > 1

  Successfully uninstalled fluentd-0.12.19
これで動くかどうか・・ですね。
で設定は以下の通り(ログは適当)。
test.conf
<source>

  type tail_ex
  path c:\fluentd\data\*.tsv
  pos_file c:\fluentd\data\fluentd-tsv.pos
  tag tail_ex.a
  format tsv
  keys time,name,counterobject,counter,value
  time_key time
  refresh_interval 30
</source>

<match tail_ex.*>
  type typecast
  item_types time:string,name:string,counterobject:string,counter:string,value:float
  tag mongo.data
</match>

<match mongo.data>
  # plugin type
  type mongo
  # mongodb db + collection
  database test
  tag_mapped
  emove_tag_prefix mongo.

  # mongodb host + port
  host 192.168.33.207
  port 27017

  # interval
  flush_interval 10s

  #include_time_key true
</match>  
あと今はgit-bash.exe上でテストをしているが、バッチとして実行したいので、コマンドプロンプト
 から実行するには、、
$ c:\git\bin\bash -c "/C/fluentd/bin/fluentd -c /C/fluentd/test.conf"
これで実施できる。  で、試してみたが、、エラーだ・・tail_exが引っかかっているみたい。
 tailであれば、動く。
 tail _exは引き続き調査してみることにしよう・・

0 件のコメント:

コメントを投稿