web-dev-qa-db-ja.com

Docker、監視、ロギング-Dockerログにログを統合する方法?

そこで、Docker + Supervisord + Django app by uWSGIで実験します。スタック全体が正常に動作していますが、ログを整理する必要があります。

非デーモンモードでスーパーバイザを起動すると、

/usr/bin/supervisord -n

次に、docker logs stdoutで再生されるスーパーバイザのログ出力を取得します。ただし、supervisordがデーモンモードの場合、独自のログはコンテナファイルシステムに隠され、アプリケーションのログも独自のapp__stderr/stdoutファイルに格納されます。

私が欲しいのは、スーパーバイザーとアプリケーションの標準出力の両方をdockerログに記録することです。

非デーモンモードで監視を開始することは、このための賢明なアイデアですか、それとも意図しない結果を引き起こしますか?また、アプリケーションログをDockerログにも再生するにはどうすればよいですか?

20
jvc26

私は同意します。デーモンモードを使用しないことが最良の解決策のように聞こえますが、実際の物理サーバーまたはある種のVMセットアップ:ログの集中化を行う場合と同じ戦略を使用するでしょう。

コンテナー内で logstash のような自己ホスト型を使用して、ログを収集し、中央サーバーに送信することができます。または、logglyやpapertrailなどの商用サービスを使用して同じことを行います。

5
Till

私はこれを使ってこれを達成しました。

Dockerイメージに supervisor-stdout をインストールします。

RUN apt-get install -y python-pip && pip install supervisor-stdout

監視構成

supervisord.confのように見えます:

[program:myprogram]
command=/what/ever/command
stdout_events_enabled=true
stderr_events_enabled=true

[eventlistener:stdout] 
command = supervisor_stdout 
buffer_size = 100 
events = PROCESS_LOG 
result_handler = supervisor_stdout:event_handler
36
Drew

Dockerコンテナーはkleenexのようなもので、使用してからドロップします。 「生きている」ためには、Dockerはフォアグラウンドで実行されるものを必要とします(デーモンはバックグラウンドで実行されます)。そのため、Supervisordを使用しています。

したがって、コンテナーの実行時に表示される監視出力にプロセス出力(アクセスとエラー)を「リダイレクト/追加/マージ」する必要があります。

Drewが言ったように、誰もが https://github.com/coderanger/supervisor-stdout を使用してそれを達成しています(私にはこれを監視対象プロジェクトに追加する必要があります!)。ドリューが言うのを忘れた、あなたは追加する必要があるかもしれません

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

監視プログラム構成ブロックへ。

また、非常に便利なものとして、プロセスがstdoutではなくログファイルにログを記録していると想像してください。監視するように監督者に依頼することができます。

[program:php-fpm-log]
command=tail -f /var/log/php5-fpm.log
stdout_events_enabled=true
stderr_events_enabled=true

これにより、php5-fpm.logのコンテンツがstdoutにリダイレクトされ、supervisord-stdoutを介してスーパーバイザーstdoutにリダイレクトされます。

18
Thomas Decaux

supervisor-stdoutはpython-pipをインストールする必要があります。これは、150 MBをダウンロードします。コンテナーには、別のツールをインストールするためだけにたくさんあると思います。

ログファイルを/ dev/stdoutにリダイレクトすると、うまくいきます:

stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html

12
ruloweb

今日のベストプラクティスは、Dockerイメージを最小限にすることです。私にとって、Pythonアプリケーションを含む理想的なコンテナには、コード、サポートライブラリ、および必要に応じてuwsgiなどが含まれます。

https://github.com/msgre/uwsgi_logging にソリューションを1つ公開しました。シンプルですDjango uwsgiの背後にあるアプリケーションuwsgiおよびDjango supervisorが必要です。

1
msgre

実際、非デーモンモードで監視プログラムを開始することが最善のソリューションです。

ボリュームを使用して、監視対象のログを中央の場所にマウントすることもできます。

0
creack