2017-04-19 8 views
0

複数のマイクロサービスをdockerで実行して構築されたアプリケーション(現在はswram内にある)のロギングに、elkスタック(Elastic search、kibana、logstash)を使用します。Docker:ログにドライバを記録することの効果

stdout/stderrからメッセージをログに記録します。私たちのシステムでは、serviceName、ContainerID、タイムスタンプ(可能な場合はそれを正確に行うために)、ホスト名....を開発者のための作業なしで各ログに追加する必要があります。

Dockerは、logstashや出荷システム(logspoutなど)から直接出荷できるJson、syslog、Gelf(UDPのみ)など複数のlogging driversをサポートしています。

私の質問:ログドライバとログ配布の選択はどのようにログに影響しますか?ドッカーは常に異なるデータ(コンテナID、タイムスタンプ、実際のログメッセージなど)を異なる方法でパッケージ化しているのでしょうか、それとも実際にコンテンツに影響しますか?

私の同僚は標準のドッカーjsonログからログを収集するためにlogspoutを使用しました。 --log-driver = gelfを使用すると、logstashに全く同じ情報が得られますか(パッケージが失われていないと仮定して)?

答えて

0

私はJsonのログに{ログ ":"ログメッセージ "、"ストリーム ":"標準エラー "、"時刻 ":" 2017-04-20T07:05:19.584571658Z "} docker inspectで見つかったログファイルを表示します。 GELFは、しかし説明hereとして追加フィールドの多くを持っているログに記録します。

fields := gelfFields{ 
hostname:  hostname, 
containerID: ctx.ContainerID, 
containerName: string(containerName), 
imageID:  ctx.ContainerImageID, 
imageName:  ctx.ContainerImageName, 
command:  ctx.Command(), 
tag:   ctx.Config["gelf-tag"], 
created:  ctx.ContainerCreated, } 

残念ながら唯一のパケットが失われる可能性がありますのでGELFがUDPでメッセージをログに送信しドッカー。しかし、localhost udpパッケージは、失われません。

jsonログをLogstashに発送するLogspoutは、コンテナに関する追加情報を収集し、最終結果がgelfエントリとあまり変わらないようにします。しかし、LogSpoutはドッカーによってメインタインされておらず、データが実際のjsonログエントリにないため、ドッカーへの変更によって機能が中断または変更される可能性があります。

関連する問題