LogStashLogger は、Ruby のLogger
クラスを拡張して Logstash に直接ログを記録します。 logstash JSON 形式でのさまざまな出力への書き込みをサポートします。 Logstash は構造化データを直接受信できるため、これはファイルまたは syslog への書き込みよりも優れています。
UDP または TCP/SSL 接続経由で Logstash リスナーに直接書き込むことができます。
ファイル、Redis、Kafka、Kinesis、Firehose、UNIX ソケット、syslog、stdout、または stderr に書き込むことができます。
Logger は、文字列メッセージ、ハッシュ、 LogStash::Event
、オブジェクト、または JSON 文字列を入力として受け取ることができます。
イベントには、メッセージ、タイムスタンプ、ホスト、重大度が自動的に入力されます。
logstash JSON 形式で書き込みますが、他の形式もサポートしています。
複数の出力に書き込むことができます。
ログ メッセージはバッファリングされ、接続に問題がある場合は自動的に再送信されます。
構成を通じて Rails と簡単に統合できます。
次の行をアプリケーションの Gemfile に追加します。
gem 'logstash-logger'
そして、以下を実行します。
$ bundle
または、次のように自分でインストールします。
$ gem install logstash-logger
require 'logstash-logger'# 0.0.0.0logger では UDP がデフォルト = LogStashLogger.new(port: 5228)# ホストとタイプ (UDP または TCP) を明示的に指定しますudp_logger = LogStashLogger.new(type: :udp, host: 'localhost' 、ポート: 5228)tcp_logger = LogStashLogger.new(タイプ: :tcp, ホスト: 'localhost', ポート: 5229)# その他の種類のロガーfile_logger = LogStashLogger.new(type: :file, path: 'log/development.log', sync: true)unix_logger = LogStashLogger.new(type: :unix、パス: '/tmp/sock')syslog_logger = LogStashLogger.new(タイプ: :syslog)redis_logger = LogStashLogger.new(タイプ: :redis)kafka_logger = LogStashLogger.new(タイプ: :kafka)stdout_logger = LogStashLogger.new(タイプ: :stdout)stderr_logger = LogStashLogger.new(タイプ: :stderr)io_logger = LogStashLogger .new(タイプ: :io, io: io)# 別の形式を使用するtercee_logger = LogStashLogger.new( タイプ: :tcp、 ホスト: 'logsene-receiver-syslog.sematext.com', ポート: 514、 フォーマッタ: :cee_syslog)custom_formatted_logger = LogStashLogger.new( タイプ: :redis、 フォーマッタ: MyCustomFormatter)lambda_formatted_logger = LogStashLogger.new( タイプ: :stdout、 フォーマッタ: ->(重大度、時間、プログラム名、メッセージ) { "[#{プログラム名}] #{メッセージ}" })ruby_default_formatter_logger = LogStashLogger.new( タイプ: :ファイル、 パス: 'log/development.log', formatter: ::Logger::Formatter)# メッセージを複数の出力に送信します。各出力は同じ形式になります。# 別の logger が必要なため、syslog を出力にすることはできません。multi_delegating_logger = LogStashLogger.new( タイプ: :multi_delegator、 出力: [{ タイプ: :file, パス: 'log/development.log' },{ タイプ: :udp, ホスト: 'localhost', ポート: 5228 } ])# 複数の出力間でメッセージのバランスをとります。# マルチデリゲータと同じように動作しますが、各メッセージを送信する出力をランダムに選択します。balancer_logger = LogStashLogger.new( タイプ: :バランサー、 出力: [{ タイプ: :udp, ホスト: 'host1', ポート: 5228 },{ タイプ: :udp, ホスト: 'host2', ポート: 5228 } ])# 複数のロガーにメッセージを送信します。# 異なる形式を異なる出力に送信する必要がある場合は、これを使用します。# syslog にログを記録する必要がある場合は、これを使用する必要があります。multi_logger = LogStashLogger.new( タイプ: :multi_logger、 出力: [{ タイプ: :file, パス: 'log/development.log', フォーマッタ: ::Logger::Formatter },{ タイプ: :tcp, ホスト: 'localhost', ポート: 5228, フォーマッタ: :json } ])# 次のメッセージは UDP ポート 5228 に書き込まれます:logger.info 'test'# {"message":"test","@timestamp":"2014-05-22T09:37:19.204-07:00", "@version":"1","severity":"INFO","host":"[ホスト名]"}logger.error '{"メッセージ": "エラー"}'# {"メッセージ":"エラー","@timestamp":"2014-05-22T10:10:55.877-07:00","@バージョン":"1" ,"severity":"ERROR","host":"[ホスト名]"}logger.debug メッセージ: 'test'、foo: 'bar'# {"message":"test","foo":"bar","@timestamp":"2014-05-22T09:43:24.004-07:00","@version":"1","severity" :"DEBUG","host":"[ホスト名]"}logger.warn LogStash::Event.new(message: 'test', foo: 'bar')# {"message":"test","foo":"bar","@timestamp":"2014-05-22T16:44:37.364Z","@version":"1","重大度":"警告","ホスト":"[ホスト名]"}# タグ付きlogger.tagged('foo') { logger.fatal('bar') }# {"メッセージ":"バー","@タイムスタンプ":"2014-05-26T20:35:14.685-07:00","@バージョン":"1","重大度":"致命的","ホスト" :"[ホスト名]","タグ":["foo"]}
ハッシュの代わりに URI を使用して logstash ロガーを構成できます。これは、環境から構成値を読み取る必要がある Heroku などの環境で役立ちます。 URI スキームはtype://host:port/path?key=value
。いくつかのサンプル URI 構成を以下に示します。
udp://localhost:5228 tcp://localhost:5229 unix:///tmp/socket file:///path/to/file redis://localhost:6379 kafka://localhost:9092 stdout:/ stderr:/
次のように URI を logstash ロガーに渡します。
# 環境変数から URI を読み取りますlogger = LogStashLogger.new(uri: ENV['LOGSTASH_URI'])
logstash がイベントを正しく受信して解析するには、 json_lines
コーデックを使用するリスナーを構成して実行する必要があります。たとえば、UDP 経由でポート 5228 でイベントを受信するには、次のようにします。
入力 { udp {ホスト => "0.0.0.0"ポート => 5228コーデック => json_lines }}
ファイルと Redis の入力では、代わりにjson
コーデックを使用する必要があります。詳細については、Logstash のドキュメントを参照してください。
その他の構成サンプルについては、サンプル ディレクトリを参照してください。
TCP を使用している場合は、初期化時に SSL 証明書をオプション ハッシュに追加するオプションがあります。
LogStashLogger.new(タイプ: :tcp、ポート: 5228、ssl_certificate: "/path/to/certificate.crt")
SSL 証明書とキーは次を使用して生成できます。
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout logstash.key -out logstash.crt
証明書なしで SSL を有効にすることもできます。
LogStashLogger.new(タイプ: :tcp、ポート: 5228、ssl_enable: true)
動作をより詳細に制御するには、SSL コンテキストを指定します。たとえば、検証モードを設定します。
ctx = OpenSSL::SSL::SSLContext.newctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)LogStashLogger.new(タイプ: :tcp、ポート: 5228、ssl_context: ctx)
SSL には次の Logstash 構成が必要です。
入力 { tcp {host => "0.0.0.0"port => 5228codec => json_inesssl_enable => truessl_cert => "/path/to/certificate.crt"ssl_key => "/path/to/key.key" }}
ホスト名の検証はデフォルトで有効になっています。さらに構成を行わないと、 :host
に指定されたホスト名がサーバーの証明書の ID を検証するために使用されます。
:ssl_context
を渡さない場合、または:verify_hostname
オプションに falsey 値を渡した場合、ホスト名の検証は行われません。
:host
オプションからホスト名を確認します。
ctx = OpenSSL::SSL::SSLContext.newctx.cert = '/path/to/cert.pem'ctx.verify_mode = OpenSSL::SSL::VERIFY_PEERLogStashLogger.new タイプ: :tcp、 ホスト: 「logstash.example.com」 ポート: 5228、 ssl_context: ctx
:host
オプションとは異なるホスト名を確認してください
LogStashLogger.new タイプ: :tcp、 ホスト: '1.2.3.4' ポート: 5228、 ssl_context: ctx、 verify_hostname: 'server.example.com'
ホスト名検証を明示的に無効にする
LogStashLogger.new タイプ: :tcp、 ホスト: '1.2.3.4' ポート: 5228、 ssl_context: ctx、 verify_hostname: false
LogStashLogger
はデフォルトで、以下の形式で JSON オブジェクトをログに記録します。
{ "message":"何らかのメッセージ", "@timestamp":"2015-01-29T10:43:32.196-05:00", "@version":"1", "severity":"INFO", "host ":"ホスト名"}
一部のアプリケーションでは、各メッセージに追加のメタデータを添付する必要がある場合があります。 LogStash::Event
LogStashLogger
構成でcustomize_event
ブロックを指定することで直接操作できます。
config = LogStashLogger.configure do |config| config.customize_event do |event|event["other_field"] = "some_other_value" 終わる
この構成では、次の出力が得られます。
{"message": "何らかのメッセージ","@timestamp": "2015-01-29T10:43:32.196-05:00","@version": "1","severity": "INFO","host ": "ホスト名","other_field": "some_other_value"}
このブロックはイベントへの完全なアクセス権を持っているため、フィールドの削除、既存のフィールドの変更などを行うことができます。たとえば、デフォルトのタイムスタンプを削除するには、次のようにします。
config = LogStashLogger.configure do |config| config.customize_event do |event|event.remove('@timestamp') 終わる
ロガーの作成時に呼び出し可能オブジェクト (lambda または proc) をcustomize_event
オプションに渡すことで、ロガーごとにイベントをカスタマイズすることもできます。
LogStashLogger.new(カスタマイズイベント: ->(イベント){ イベント['その他のフィールド'] = 'その他のフィールド' })
リモート サービスへの接続を確立するデバイスの場合、ログ メッセージは内部でバッファされ、バックグラウンド スレッドでフラッシュされます。接続に問題がある場合、メッセージはバッファに保持され、成功するまで自動的に再送信されます。バッチ書き込みをサポートする出力 (Redis および Kafka) は、バッファからログ メッセージを一括で書き込みます。この機能は Stud::Buffer のフォークを使用して実装されます。次のオプションを LogStashLogger に渡すことで、その動作を構成できます。
:buffer_max_items - フラッシュする前にバッファリングする項目の最大数。デフォルトは 50 です。
:buffer_max_interval - フラッシュ間で待機する最大秒数。デフォルトは 5 です。
:drop_messages_on_flush_error - フラッシュ エラーが発生した場合にメッセージを削除します。デフォルトは false です。
:drop_messages_on_full_buffer - バッファーがいっぱいの場合にメッセージをドロップします。デフォルトは true です。
:sync - メッセージを受信するたびにバッファをフラッシュします (ブロック)。デフォルトは false です。
:buffer_flush_at_exit - プログラムの終了時にメッセージをフラッシュします。デフォルトは true です。
:buffer_logger - バッファのデバッグ/エラー メッセージを書き込むロガー。デフォルトはなしです。
sync = true
設定すると、バッファリングをオフにできます。
この動作については、次の注意事項に注意してください。
再試行時に重複したログ メッセージが送信される可能性があります。バッチで書き込む Redis や Kafka などの出力の場合、バッチ全体が再送信される可能性があります。これが問題になる場合は、各イベントに UUID フィールドを追加して、イベントを一意に識別できます。これは、 customize_event
ブロックで行うか、logstash の UUID フィルターを使用して行うことができます。
ログ メッセージが失われる可能性は依然としてあります。 Ruby は、TCP/UDP 接続の問題をすぐには検出しません。私のテストでは、Ruby が受信側がダウンしていることに気づき、例外を生成し始めるまでに約 4 秒かかりました。 TCP/UDP 上の logstash リスナーは受信メッセージを確認しないため、どのログ メッセージを再送信すればよいかを知ることはできません。
sync
オフになっている場合、Ruby は IO デバイスに書き込む前にデータを内部でバッファリングする場合があります。 LogStashLogger のバッファが定期的にフラッシュされても、メッセージが UDP または TCP ソケットにすぐに書き込まれないのはこのためです。
デフォルトでは、バッファがいっぱいになるとメッセージは破棄されます。これは、出力ソースが長時間停止している場合、またはログ メッセージの受信が速すぎる場合に発生する可能性があります。アプリケーションが突然終了すると (SIGKILL や停電などにより)、バッファ全体が失われます。
メッセージ損失の可能性を低くするには、 buffer_max_items
を増やし (バッファーに保持できるイベントを増やすため)、 buffer_max_interval
減らします (フラッシュ間の待ち時間を短縮するため)。これにより、ログ メッセージがバッファに蓄積されるため、アプリケーションのメモリ負荷が増大するため、プロセスに十分なメモリが割り当てられていることを確認してください。
バッファーがいっぱいになったときにメッセージを失いたくない場合は、 drop_messages_on_full_buffer = false
を設定できます。バッファがいっぱいになると、受信ログ メッセージがブロックされるため、望ましくない可能性があることに注意してください。
すべてのロガー出力はsync
設定をサポートしています。これは、Ruby IO オブジェクトの「同期モード」設定に似ています。 true
に設定すると、出力はすぐにフラッシュされ、内部でバッファリングされません。通常、リモート サービスに接続するデバイスにとって、バッファリングはパフォーマンスを向上させ、プログラムに影響を与えるエラーの可能性を減らすため、良いことです。これらのデバイスの場合、 sync
デフォルトはfalse
であり、デフォルト値のままにすることをお勧めします。たとえば、ログメッセージが書き込まれた直後に確認したい場合など、テストのために同期モードをオンにすることができます。
ファイルおよび Unix ソケット出力に対して同期モードをオンにすることをお勧めします。これにより、異なるスレッドまたはプロセスからのログ メッセージが別々の行に正しく書き込まれるようになります。
詳細については #44 を参照してください。
デバイスへのメッセージの書き込み中に例外が発生した場合、その例外は内部ロガーを使用して記録されます。デフォルトでは、これは $stderr に記録されます。エラー ロガーを変更するには、 LogStashLogger.configuration.default_error_logger
を設定するか、LogStashLogger をインスタンス化するときに:error_logger
構成キーで独自のロガー オブジェクトを渡します。
LogStashLogger は、Rails スタイルのロガー サイレンシングのサポートを提供します。この実装は Rails から抽出されましたが、依存関係がないため、Rails アプリの外部で使用できます。インターフェイスは Rails と同じです。
logger.silence(temporary_level) を実行します ...終わり
デフォルトでは、LogStashLogger は Ruby の組み込みLogger
クラスを拡張するロガーを作成します。別のロガー実装が必要な場合は、 logger_class
オプションを使用してクラスを渡すことによって、別のクラスを使用できます。
syslog の場合、 Syslog::Logger
クラスは必須であり、変更できないことに注意してください。
Rails 4.2 および 5.x をサポートします。
デフォルトでは、すべての Rails ログ メッセージはLogStash::Event
JSON 形式で logstash に書き込まれます。
最小限でより構造化された logstash イベントについては、次のいずれかの gem を試してください。
ロラージュ
庭師
現在、これらの gem は JSON 文字列を出力し、LogStashLogger が解析します。これらの gem の将来のバージョンでは、LogStashLogger とより深く統合される可能性があります (たとえば、 LogStash::Event
オブジェクトを直接記述することによって)。
以下をconfig/environments/production.rb
に追加します。
# オプション、Rails はデフォルトを :infoconfig.log_level = :debug# に設定します。 オプション、Rails 4 のデフォルトは、開発では true、本番では false に設定されますconfig.autoflush_log = true# オプションで、URI を使用して設定します。 Herokuconfig.logstash.uri = ENV['LOGSTASH_URI']# で便利です。オプション。デフォルトは:json_lines です。複数の出力がある場合、# それらはすべて同じ formatter.config.logstash.formatter = :json_lines# オプションで、書き込みエラーのログを記録するロガーです。デフォルトでは、$stderrconfig.logstash.error_logger = Logger.new($stderr)# にログが記録されます。オプション。フラッシュする前にバッファーに保存する項目の最大数。デフォルトは 50config.logstash.buffer_max_items = 50# オプション。フラッシュ間で待機する最大秒数。デフォルトは 5config.logstash.buffer_max_interval = 5# オプションで、接続エラーが発生したときにメッセージをドロップします。デフォルトは falseconfig.logstash.drop_messages_on_flush_error = false# オプションで、バッファがいっぱいになったときにメッセージを削除します。デフォルトは trueconfig.logstash.drop_messages_on_full_buffer = true
# オプション、デフォルトは '0.0.0.0'config.logstash.host = 'localhost'# オプション、デフォルトは :udp.config.logstash.type = :udp# 必須、接続するポートconfig.logstash.port = 5228
# オプション、デフォルトは「0.0.0.0」ですconfig.logstash.host = 'localhost'# 必須、接続するポートconfig.logstash.port = 5228# 必須config.logstash.type = :tcp# オプション、SSLconfig.logstash を有効にします。 ssl_enable = true
# Requiredconfig.logstash.type = :unix# Requiredconfig.logstash.path = '/tmp/sock'
Ruby 1.9 を使用している場合は、 Syslog::Logger
v2 を Gemfile に追加します。
gem 'SyslogLogger', '2.0'
Ruby 2+ を使用している場合、 Syslog::Logger
すでに標準ライブラリに組み込まれています。
# Requiredconfig.logstash.type = :syslog# オプション。デフォルトは 'ruby'config.logstash.program_name = 'MyApp'# オプションのデフォルト機能レベル。 Ruby 2+config.logstash.facility = Syslog::LOG_LOCAL0 でのみ動作します
Redis gem を Gemfile に追加します。
gem 'redis'
# Requiredconfig.logstash.type = :redis# オプション、デフォルトは「logstash」 listconfig.logstash.list = 'logstash'# 他のすべてのオプションは Redis クライアントに渡されます# サポートされるオプションには、ホスト、ポート、パス、パスワードが含まれます、url# 例:# オプション、Redis はデフォルトで localhostconfig.logstash.host = 'localhost'# オプション、Redis はデフォルトでポートになります6379config.logstash.port = 6379
ポセイドン gem を Gemfile に追加します。
gem 'poseidon'
# Requiredconfig.logstash.type = :kafka# オプション、デフォルトは 'logstash' topicconfig.logstash.path = 'logstash'# オプション、デフォルトは 'logstash-logger' プロデューサーconfig.logstash.Producer = 'logstash-logger '# オプション。デフォルトは localhost:9092 host/portconfig.logstash.hosts = ['localhost:9092']# オプション、デフォルトは 1 秒 backoffconfig.logstash.backoff = 1
aws-sdk gem を Gemfile に追加します。
# aws-sdk >= 3.0 gem 'aws-sdk-kinesis' # aws-sdk < 3.0 gem 'aws-sdk'
# Requiredconfig.logstash.type = :kinesis# オプション、デフォルトは「logstash」になります streamconfig.logstash.stream = 'my-stream-name'# オプション、デフォルトは「us-east-1」config.logstash.aws_region = 'us-west-2'# オプション。デフォルトは AWS_ACCESS_KEY_ID 環境変数config.logstash.aws_access_key_id = 'ASKASKHLD12341'# オプション。デフォルトは AWS_SECRET_ACCESS_KEY 環境変数config.logstash.aws_secret_access_key = 'ASKASKHLD1234123412341234'
aws-sdk gem を Gemfile に追加します。
# aws-sdk >= 3.0 gem 'aws-sdk-firehose' # aws-sdk < 3.0 gem 'aws-sdk'
# Requiredconfig.logstash.type = :firehose# オプション、デフォルトは「logstash」配信になります streamconfig.logstash.stream = 'my-stream-name'# オプション、デフォルトは AWS デフォルト リージョンになります configchainconfig.logstash.aws_region = ' us-west-2'# オプション。AWS のデフォルト認証情報プロバイダーchainconfig.logstash.aws_access_key_id = がデフォルトになります。 'ASKASKHLD12341'# オプション。デフォルトは AWS のデフォルト認証情報プロバイダーchainconfig.logstash.aws_secret_access_key = 'ASKASKHLD1234123412341234'
# Requiredconfig.logstash.type = :file# オプション、デフォルトは Rails ログ pathconfig.logstash.path = 'log/production.log'
# Requiredconfig.logstash.type = :io# Requiredconfig.logstash.io = io
# Requiredconfig.logstash.type = :multi_delegator# Requiredconfig.logstash.outputs = [ {タイプ: :ファイル、パス: 'log/production.log' }、 {タイプ: :udp、ポート: 5228、ホスト: 'localhost' }]
# Requiredconfig.logstash.type = :multi_logger# 必須。各ロガーには独自の formatter.config.logstash.outputs = [ {タイプ: :file、パス: 'log/production.log'、フォーマッタ: ::Logger::Formatter }、 {タイプ: :udp、ポート: 5228、ホスト: 'localhost' }]
Web アプリケーションでは、RequestStore ミドルウェアを使用して、HTTP リクエストからのデータ (ヘッダーなど) をログに記録できます。次の例は Rails を前提としています。
# Gemfilegem 'request_store' 内
# application.rbLogStashLogger.configure で |config| を実行します。 config.customize_event do |event|event["session_id"] = RequestStore.store[:load_balancer_session_id] 終わる
# app/controllers/application_controller.rbbefore_filter :track_load_balancer_session_iddef track_load_balancer_session_id RequestStore.store[:load_balancer_session_id] = request.headers["X-LOADBALANCER-SESSIONID"]end
アプリケーションがフォークする場合 (多くの Web サーバーでよくあることですが)、LogStashLogger インスタンス上のリソースのクリーンアップを管理する必要があります。この目的には、インスタンス メソッド#reset
使用できます。 Rails で使用されるいくつかの一般的な Web サーバーのサンプル構成を次に示します。
乗客:
::PhusionPassenger.on_event(:starting_worker_process) は |forked| を行います Rails.logger.resetend
プーマ:
# config/puma.rbon_worker_boot で実行します Rails.logger.resetend
ユニコーン
# config/unicorn.rbafter_fork で |server, worker| を実行します。 Rails.logger.resetend
動作確認済み:
MRI ルビー 2.2 ~ 2.5
JRuby 9.x
ルビニウス
Ruby バージョン 2.2 未満は EOL となり、サポートされなくなりました。
特定のニーズによって異なりますが、ほとんどのアプリケーションではデフォルト (UDP) を使用する必要があります。各タイプの長所と短所は次のとおりです。
UDP は非同期 (ファイア アンド フォーゲット) であるため、TCP よりも高速です。ただし、これはログ メッセージがドロップされる可能性があることを意味します。多くのアプリケーションではこれで問題ありません。
TCP は、すべてのメッセージが双方向通信で受信されたことを検証します。また、ネットワーク上でログ メッセージを安全に送信するための SSL もサポートしています。これにより、TCP リスナーの負荷が高い場合、アプリの速度が最高速度まで低下する可能性があります。
ファイルの使用は簡単ですが、ログのローテーションやディスク容量の不足について心配する必要があります。
Unix ソケットへの書き込みは、TCP または UDP ポートへの書き込みよりも高速ですが、ローカルでのみ機能します。
Redis への書き込みは、大量のログを生成する分散セットアップに適しています。ただし、別の可動部分があるため、Redis のメモリ不足を心配する必要があります。
標準出力への書き込みは、デバッグ目的でのみ推奨されます。
UDP と TCP の詳細については、この記事を読むことをお勧めします: UDP と TCP
Ruby IO オブジェクト (ファイル、UDP ソケット、TCP ソケットなど) によってサポートされるデバイスを使用している場合は、Ruby が独自の内部バッファを保持していることに注意してください。 LogStashLogger はメッセージをバッファリングし、定期的にフラッシュしますが、IO オブジェクトに書き込まれるデータは、Ruby によって内部的に無期限にバッファリングされる可能性があり、プログラムが終了するまで書き込めない場合もあります。これが気になる場合、またはログ メッセージをすぐに確認する必要がある場合、唯一の手段はsync: true
オプションを設定することです。
アプリケーションはおそらく、有効な方法でエンコードされていないデータをログに記録しようとしています。これが発生すると、Ruby の標準 JSON ライブラリは例外を発生させます。 Oj などの別の JSON エンコーダーを交換することで、この問題を解決できる場合があります。 Oj を JSON 生成に使用するには、oj_mimic_json gem を使用します。
Heroku では、ログが STDOUT に送信されるように、rails_12factor をインストールすることをお勧めします。残念ながら、これにより LogStashLogger がオーバーライドされ、構成された宛先にログが送信されなくなります。解決策は、Gemfile からrails_12factor
削除することです。
これはおそらく LogStashLogger の問題ではなく、 Rails.logger
のログ レベルを変更する別の gem の問題であると考えられます。これは、Gem が非スレッドセーフな方法でRails.logger
のログ レベルを変更することが多いため、Puma などのスレッド サーバーを使用している場合に特に起こりやすくなります。詳細については #17 を参照してください。
UDP 出力を使用し、logstash リスナーに書き込んでいる場合は、logstash リスナーの UDP 実装でバグが発生している可能性があります。現時点では既知の修正はありません。詳細については #43 を参照してください。
TCP または UDP を使用する場合の既知の欠点は、合計メッセージ サイズが 65535 バイトに制限されていることです。この問題を回避するには、最大メッセージ サイズを設定してメッセージを切り詰める必要があります。
LogStashLogger.configure do |config| config.max_message_size = 2000end
これにより、LogStash イベントのmessage
フィールドのみが切り捨てられます。したがって、他のフィールド用のスペースを確保するために、最大メッセージ サイズを 65535 バイトより大幅に小さく設定してください。
Rails 3.2、MRI Ruby < 2.2、および JRuby 1.7 は EOL になったため、サポートされなくなりました。 Ruby の古いバージョンを使用している場合は、0.24 以下を使用する必要があります。
最新の logstash とより一致するように、 source
イベント キーがhost
に置き換えられました。
(host, port, type)
コンストラクターは非推奨となり、オプション ハッシュ コンストラクターが使用されます。
LogStash::Event
バージョン 1.2 以降では v1 形式を使用します。 v1 を使用している場合は、LogStashLogger バージョン 0.4 以降をインストールする必要があります。これには、v0 形式を使用する古いLogStash::Event
v1.1.5 との下位互換性がありません。
この gem の以前のバージョン (<= 0.2.1) では、TCP 接続のみが実装されていました。新しいバージョン (>= 0.3) も UDP を実装し、それを新しいデフォルトとして使用します。デフォルトのコンストラクターを使用していて TCP が必要な場合は、追加の引数を追加する必要があることに注意してください。
# TCPlogger の代わりに UDP がデフォルトになりました = LogStashLogger.new('localhost', 5228)# UDPlogger の代わりに TCP を明示的に指定します = LogStashLogger.new('localhost', 5228, :tcp)
デビッド・バトラー
pctj101
ゲイリー・レニー
ニック・イーサー
アーロン・メイブリー
ヤン・シュルテ
カート・プレストン
クリス・ブラッチリー
フェリックス・ベヒシュタイン
ワディム・カザコフ
アニル・レムトゥラ
ニキータ・ヴォロベイ
ファイアーボーイ1919
マイク・ガンダーロイ
ヴィタリー・ゴロデツキー
コートランド・コールドウェル
ビベク・シュレスタ
アレックス・イアナス
クレイグ・リード
グラスジグ
ビン・ラン
ジョアン・フェルナンデス
クールエルヴィス
セルゲイ・ピャンコフ
アレック・ホーイ
アレクセイ・クラスノペロフ
ガブリエル・デ・オリベイラ
ウラジスラフ・シャブルク
マトゥス・ヴァキュラ
フォークしてみよう
機能ブランチを作成します ( git checkout -b my-new-feature
)
変更をコミットします ( git commit -am 'Add some feature'
)
ブランチにプッシュします ( git push origin my-new-feature
)
新しいプルリクエストを作成する