2017-09-20 1 views
2

.NETコアでDockerコンテナとして動作し、EventHubからSQL Serverにフェッチされた大量のデータを書き込むため、AzureのApplication Insightsにログオンするマイクロサービスがあります。Dockerコンテナを再起動してログを永続化します

バックグラウンドスレッドでスローされたように見える未処理のSqlExceptionが発生するたびに、このスレッドを捕まえて処理することも、このバグを修正することもできません。

回避策は、再起動ポリシーをalwaysに設定し、サービスを再開することです。これはうまくいきますが、今はApplication Insightsでこの例外を追跡できません。

未処理の例外がCLRによってstderrに書き込まれているため、Dockerログに何らかのグレープが表示されることがありますが、起動時にこれを確認してからApplication Insightにログオンする方法がありますそれはSwarmクラスタにログオンせず、再起動情報のためにgrepする必要はありませんか?ホストマシンにログインし、

アプローチ1

マウントドッキングウィンドウのログディレクトリを永続化する

+2

ホストディレクトリをdockerにマウントし、そのディレクトリ(ホスト)を使用してログをマウントすることができます。 –

+0

@GirdharSojitraそれはあなたがDockerのログ、または一般的なログを意味するのでしょうか?これは、標準出力/エラーストリームにあります。これを回答として意味する場合は、回答として投稿してください。 –

答えて

0

例:

ドッキングウィンドウの実行-name Container_1 -v/host_dir /ログ:は/ var/log /アプリのdocker_image:

ドッカーコンテナはを/ var /ログ/アプリでログを書き込みますバージョンdirectory.Nowドロッカーを再起動しても、ログはホストの/ host_dir/logsディレクトリーに永続化されます。

アプローチ2

設定ドッキングウィンドウ内のsyslogまたはfluentdのようなドライバーをログに記録します。あなたはそれを設定するためにhttps://docs.docker.com/engine/admin/logging/overview/を見ることができます。

+0

残念ながら、私のサービスはAppInsightsを除いて直接ログを書きませんが、stdoutとstderrにログを書き込みます。これは推奨するログディレクトリには取り込まれないため、このディレクトリをDockerホストにマウントする必要はありません。 Dockerログをキャプチャする必要があります。デフォルトのドライバjson-fileでは、ドキュメントに書かれているようにファイルにログを記録しないようです。 –

+0

アプリケーションにロギングドライバを使用する必要があります。 https://docs.docker.com/engine/admin/logging/overview/をご覧ください。 –

関連する問題