2016-09-07 9 views
0

私はdocker-composeを使用していて、 'gelf'ロギングドライバを使用して、同じコンポジションで定義されているlogstashコンテナに個々のコンテナのログを送信したいとします。dockerログを特定のドッカーコンテナに収集するにはどうすればいいですか?

'gelf-address'の '論理的な'ホスト名の1つを使用すると、定義されていないエラーが発生し、 'ipv4_address'を使用した(最適ではない)ソリューションが動作しないようです。

私はスタートアップシーケンスのためにいくつかの最初のロギングメッセージを失う可能性があることを知っていますが、それは問題ありません。特定のセットアップへのロギングが含まれているので、ロードテストがずっと簡単になります。

これに近づく方法に関する巧妙な解決策はありますか?

+0

ました。決してゲルフを聞いたことがない –

答えて

0

@cricket_007によるコメントは、logspoutを参照して、正しいトラックに入れてください。これは直接/var/run/docker.sockに接続し、そこからログを取得し、通常のコンテナで実行されているので、利用可能なすべてのルーティング情報を持っています。

ログがアクティブになったときからログを取得するだけで、本当に早いものを見逃すように見えることが問題です。しかし、それは私が支払う気がある価格です。 logstashに接続するのも苦痛です。それは非常に長い時間がかかりそうです。

もう一つの良いリファレンスは、私がlogspoutで成功を収めてきたGary A. Stafford's"Containerized Microservice Log Aggregation and Visualization using ELK Stack and Logspout"

0

あなたの作曲からのホスト名の検索は難しいでしょう。サービス名はDockerの内部DNSリゾルバに保持されます。コンテナを実行するDockerホストはこれらのアドレスを解決できないため、ロギングコンテナに静的IPを使用する必要があります。

ホストが.1アドレスをブリッジインターフェイスに割り当てるため、Dockerホストは、ユーザー定義のブリッジネットワーク上でコンテナipv4_addressに接続できる必要があります。それがオーバレイネットワークに当てはまるかどうかはわかりません。

ログコンテナ上に他のサービスdepends_onを作成して、少なくとも最初に表示されるようにすることもできます。

fluentdを使用している人はfluentd-async-connectオプションが必要な場合があります。そのため、コンテナがログコンテナへの接続を開こうとするのをブロックしないようにします。

関連する問題