2015-09-21 12 views
7

私は、ドッカー環境用にfluentdを使用して集中ログシステムを作成しようとしています。現在、私はfluentdにdockerログを送ることができます。これは、in_tailメソッドを使ってdockerログファイルを読むことと比べてはるかに洗練された解決策です。しかし、私は現在、複数行ログの問題に直面しています。あなたは上の写真から見ることができるようにDocker Fluentd Logging Driver for multiline

enter image description here

、マルチラインは、ログインしたユーザのための非常に混乱して順不同です。これが解決できる方法はありますか?

ありがとうございました。

CWは

+1

私はいくつかのさらなる研究を行った後、このトピックに関するいくつかのコメントを追加するだけです。 Out of Orderの問題は、Fluentdの時間分解能によるものです(現在、サブ秒のサポートはありません)。この返答[リンク](http://stackoverflow.com/questions/27928479/fluentd-loses-milliseconds-and-now-log-messages-are-stored-out-of-order-in-elast)のおかげで、私はレコードを順番に表示することができ、少なくともこのユーザーがこのログを読むと混乱することはありません。 –

+0

milisecondの問題を解決する別の方法については、このブログ記事を参照してください。http://work.haufegroup.io/log-aggregation/#timestamp-fix – dutzu

+0

解決策はありますか? fluentdに送信する前にこのリンクhttps://www.fluentd.org/guides/recipes/docker-loggingをdockerにマージすることについて知っていましたが、実装はログフォーマットに特有です。 – Nextlink

答えて

1

が自分のドキュメントに解析するmultilineを見てみましょう:あなたは基本的に新しいログメッセージの先頭にマッチする正規表現を指定する必要がhttp://docs.fluentd.org/articles/parser-plugin-overview#

、それは複数行のログを集約するfluentdを可能にしますイベントを単一のメッセージに変換します。そのドキュメントからの通常のJavaスタックトレースのための

例:

format multiline format_firstline /\d{4}-\d{1,2}-\d{1,2}/ format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/

+1

fluentdの文書によると、 "multiline"はin_tailプラグインのみで動作します。 "つまり、ドッカーからの入力に '@type forward'を使用している場合、これは動作しません。 –

+0

@AshBerlin - 複数のプラグインで使用することもできます。解析をサポートするコアプラグインについては、http://docs.fluentd.org/articles/parser-plugin-overview#list-of-core-input-plugins- with-parser-support – dutzu

+0

@AshBerlin - また、おそらくin_forwardプラグインをin_tcpで置き換えることは可能ですが、これは基本的にはin_forwardだけがUDPでリッスンすることと同じです。そして、in_tcpは、フォーマットパーサーをすぐにサポートするプラグインの1つです – dutzu

0

私はこれがないとfluentd質問への「答え」であることを知っています。したがって、このと一緒に行きました、私はfluentdのための解決策を見つけたことはありません

ログ行を解析した後、彼のフィルターに

json { 
     source => "log_message" 
     target => "json" 
    } 

を追加することにより、 http://www.labouisse.com/how-to/2015/09/14/elk-and-docker-1-8

JSONサポート:しかし、このガイドでは、logstashの問題を解決しますソリューションの代わりに

更新リンク

+0

これでリンクが死んでしまいました。もっと詳しく説明できますか? – herm

0

Fluent-Plugin-Concatプラグインを使用すると、上記の問題を解決するのに役立ちました。流暢-confの中

2017-09-21T15:03:27Z tag  {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:27.289 INFO 1 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.6"} 
2017-09-21T15:03:28Z tag  {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:28.191 INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext"} 
以下の私の正規表現は、各行がで始まり、日付とタイムスタンプログにDateTimeStampをチェックして

<filter **> 
    @type concat 
    key log 
    stream_identity_key container_id 
    multiline_start_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} 
    multiline_end_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} 
</filter> 

を("log":"2017-09-21 15:03:27.289に注意を払う)これらの行を追加

また、以下の行をDockerfileに追加してプラグインをインストールする必要がありました。

例外が発生した場合でもこの正規表現はうまく動作しませんが、これまでよりもはるかに優れています。 Fluentd Link, for reference