Docker ComposeでRailsのアプリケーションログをFluentdでElasticsearchに送信する

過去の記事

前々回

前回


実現したいこと

Nginxと同じようにRailsのアプリケーションログもKibanaで参照できるようにしたい。
引き続き、過去の記事で使用した環境に変更を加えていくのでdiffを記載していく。

Rails

参考

基本的には参考サイトの通りやれば実現可能。
ただ、act-fluent-logger-railsに関してリリースされている最新の0.5.0ではRails6に対応していない。
Githubを確認したところmasterブランチには修正が適応されていたのでGemfileでGithubを指定すれば可能。

Gemfile
--- a/Gemfile
+++ b/Gemfile
@@ -47,3 +47,6 @@ end

 # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
 gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+gem 'act-fluent-logger-rails', git: 'https://github.com/actindi/act-fluent-logger-rails.git'
+gem 'lograge'

Gemfileを更新したのでdocker-compose build webを行っておく。

config/application.rb
--- a/config/application.rb
+++ b/config/application.rb
@@ -15,5 +15,9 @@ module Myapp
     # Application configuration can go into files in config/initializers
     # -- all .rb files in that directory are automatically loaded after loading
     # the framework and any gems in your application.
+    config.log_level = :info
+    config.logger = ActFluentLoggerRails::Logger.new
+    config.lograge.enabled = true
+    config.lograge.formatter = Lograge::Formatters::Json.new
   end
 end
config/fluent-logger.yml

ファイルを新規に作成。ひとまずdevelopmentのhostのみ設定しておく。

development:
  fluent_host:   fluentd
  fluent_port:   24224
  tag:           'rails'
  messages_type: 'string'

test:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'rails'
  messages_type: 'string'

production:
  fluent_host:   '127.0.0.1'
  fluent_port:   24224
  tag:           'rails'
  messages_type: 'string'

Fluentd

fluent.conf

ひとまず、Nginxの設定をほぼコピペで設定。

--- a/fluentd/fluent.conf
+++ b/fluentd/fluent.conf
@@ -14,3 +14,13 @@
   logstash_format true
   logstash_prefix nginx.access
 </match>
+
+<match rails>
+  @type elasticsearch
+  host elasticsearch
+  buffer_type memory
+  port 9200
+  type_name rails
+  logstash_format true
+  logstash_prefix rails.access
+</match>

この状態で、localhostにアクセスをしてKibanaでCreate index patternをするとrailsのログがきているはず。
f:id:arcright:20190930232653p:plain

[asin:429710461X:detail]