すずけんメモ

技術メモです

Fluentd UIが出たので触ってみた

fluent/fluentd-ui https://github.com/fluent/fluentd-ui

Fluentd用のWeb UIが出たようです。試しに触ってみます。

インストール

READMEのとおりですが、

$ gem install fluentd-ui
$ fluentd-ui start
Open http://localhost:9292/ by your browser
default account is username="admin" and password="changeme"

もしくは、

$ git clone https://github.com/treasure-data/fluentd-ui
$ cd fluentd-ui
$ bundle install
$ bundle exec rails s

です。

僕はbundlerでいれることにしました。

-> % bundle exec rails s
=> Booting Puma
=> Rails 4.1.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000

起動するとログイン画面が出てきます。デフォルト設定はusername: admin, password: changeme です。

f:id:suzu_v:20140801200246p:plain

ログインするとこんな感じで立ち上がります。

f:id:suzu_v:20140801200428p:plain

早速触ってみます。まずはfluentdをインストールします。

f:id:suzu_v:20140801200243p:plain

インストールされましたね。続いて設定をしていきます。こんな感じに今Fluentdがどこからデータを読み取り、どこに出力しようとしているのかがわかりやすく表示されてます。

f:id:suzu_v:20140801200238p:plain

では実際にファイルの入力について編集していきます。入力の「ファイル」をクリックすると、どこからファイルを読み取るかを選択する画面が出てきます。

f:id:suzu_v:20140801200234p:plain

ここでは /var/log/system.log を読み取ることにしました。こんな感じでログをpreviewすることができます。

f:id:suzu_v:20140801201050p:plain

次にファイルを読み取る際の設定をします。ここでは、「どんなフォーマットとしてログを読み取るか」という設定をすることができます。この画面はわかりやすくて便利ですね。今回はsyslog形式なので、formatをsyslogにしています。

f:id:suzu_v:20140801202229p:plain

これで無事設定が変更されました。生成された設定は以下のとおりです。

<source>
  # http://docs.fluentd.org/articles/in_forward
  type forward
  port 24224
</source>

<source>
  # http://docs.fluentd.org/articles/in_http
  type http
  port 9880
</source>

<source>
  type monitor_agent
  port 24220
</source>
<source>
  type debug_agent
  port 24230
</source>

<match debug.*>
  # http://docs.fluentd.org/articles/out_stdout
  type stdout
</match>

<source>
  type tail
  path /var/log/system.log
  tag syslog.test
  format syslog
  time_format %b %d %H:%M:%S
  pos_file /tmp/fluentd--1406888587.pos
</source>

更新するとfluentdが再起動されて設定がreloadされます。fluentd自体の起動logをみてみましょう。

f:id:suzu_v:20140801200145p:plain

ちゃんとtailされているようです。試しにMongoDBにいれてみます。デフォルトではプラグインは入っていないので、いれてみます。これもFluentd UI上から行うことができます。MongoDB用のプラグインをいれてみましょう。インストールボタンを押せば設定できます。

f:id:suzu_v:20140801200141p:plain

インストール済みのプラグインはこんな感じで閲覧できます。

f:id:suzu_v:20140801200119p:plain

設定も追加してみます。mongoの設定は画面から行うことができます。「ソースと出力先の設定」の画面から「MongoDB」をクリックするとこんな感じで設定画面が開きます。

f:id:suzu_v:20140801200116p:plain

設定は結果的にこんな感じになりました。

<match syslog.test>
  type mongo
  host 127.0.0.1
  port 27017
  database fluentd
  collection test
  capped
  capped_size 100m
</match>

設定を追加すると勝手にfluentdがreloadされます。mongo側をみてみましょう。*1

-> % all output going to: /usr/local/var/log/mongodb/mongo.log
mongo
MongoDB shell version: 2.4.8
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
Fri Aug  1 19:49:01.275 [initandlisten]
Fri Aug  1 19:49:01.275 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> show dbs;
fluentd 0.140625GB

fluentdのdbができてますね。queryしてみます。

# 以下mongo shell
> use fluentd;
switched to db fluentd
> db.test.find()
{ "_id" : ObjectId("53db72001df33a7e96000001"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:54:34Z") }
{ "_id" : ObjectId("53db723d1df33a7e96000002"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:55:34Z") }
{ "_id" : ObjectId("53db727a1df33a7e96000003"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:56:34Z") }

ちゃんとはいってますね。*2

所感

  • さくっとローカルにfluentdの環境作っていろいろプラグイン入れたりログを試しにいれてみたい、というときにさくっとできて良い
    • fluentd本体のインストールやfluentdのプラグインも簡単に入れることができる
    • アプリケーションログをつくるのは手間がかかるけれど、
  • in_tailのUIが便利
    • どんなログを読もうとしているかをプレビューしつつ、tailの設定を書くことができる
      • 実際にどんな風にログが読み取られるかも見つつ、設定を調整することができる。素敵。
    • http://fluentular.herokuapp.com/ で試せるようなこともFluentd UIの中でできます。
  • pluginがうまく入らなかった
    • ものによる。fluentd-plugin-elasticsearchが入らなかった。依存gemをうまくもってこれてないのかもしれない。

Fluentdを触ったことがないという場合でも、さっくりセットアップと設定を行うことができるのではないか思います。ローカルでさくっと試す用途にもよいのではないでしょうか。まだversionも0.10ですので、今後使いやすくなっていくのが楽しみです。

*1:MongoDBのバージョンがちょっと古いですね、手抜きです。

*2:と思ったら日付型が微妙に間違っている旨のメッセージがはいってますね