2020年10月6日火曜日

Sinatra の CustomLogger を使ってロギングに fluent-logger を使ってみる

概要

Sinatra アプリのロギングに fluent-logger を使ってみました
CustomLogger を使うだけなので簡単にできます 

環境

  • macOS 10.15.7
  • Ruby 2.7.1p83
    • fluent-logger 0.9.0
    • sinatra 2.0.7

通常のロギング

まず通常のロギング方法です
logger を require して使うだけなので簡単です

require 'sinatra/base'
require 'logger'

class MyApp < Sinatra::Base

  configure do
    logger = Logger.new(STDOUT)
    logger.level = Logger::DEBUG
    set :logger, logger
  end

  get '/test' do
    logger.info 'ok'
    'ok'
  end

end

CustomLogger を使う

次に CustomLogger を使って fluent-logger を設定してみます
level と info というメソッドが fluent-logger にはありません
level は削除し info は post というメソッドに置き換えます
また post メソッドはタグ情報+ハッシュでロギングするようにします

require 'sinatra/base'
require 'logger'
require 'fluent-logger'
require 'sinatra/custom_logger'

class MyApp < Sinatra::Base
  helpers Sinatra::CustomLogger

  configure do
    logger = Fluent::Logger::FluentLogger.new(nil, :host => 'localhost', :port => 24224)
    set :logger, logger
  end

  get '/test' do
    logger.post('myapp.access', {'msg' => 'ok'})
    'ok'
  end

end

動作確認

受け取り側の fluentd を起動します
今回は docker で起動します

  • vim fluent.conf
<source>
  @type forward
</source>

<match *.*>
  @type stdout
</match>
  • docker run --name fluentd -d -v $(pwd)/fluent.conf:/fluentd/etc/fluent.conf -p 24224:24224 fluentd -c /fluentd/etc/fluent.conf

ログが表示されるか準備しておきます

  • docker logs -f fluentd

あとはアプリを起動してエンドポイントにアクセスします

  • bundle exec rackup config.ru
  • curl localhost:9292/test

ちゃんとアプリのログが fluentd 側に転送されているのが確認できると思います

最後に

Sinatra の Custom::Logger を使ってロガーを fluent-logger にしてみました
特定のログだけ直接 fluentd に飛ばすこともできるかなと思います

ちなみに Sinatra のデフォルトの logger はすべて標準エラーに吐かれるので logger.info を標準出力に出したい場合は CustomLogger を使うのが必須になります

参考サイト

0 件のコメント:

コメントを投稿