公式のnginx Dockerイメージ( Dockerfile )は、次のトリックを使用してログをstdoutとstderrに渡し、それらがdockerログコレクターによってキャプチャされ、_docker logs <container-name>
_を使用して表示できるようにします。
_# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
_
同じことをしたいのですが、コンテナにPID 1としてsupervisordがあり、nginxプロセスを監視し、stdoutとstderrをキャプチャして、独自のログファイルです。したがって、ログはDockerログコレクターに到達しません。
これが私のsupervisord.confの関連ブロックです
_[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=990
; NOTE: We do not want to redirect stdout and stderr of a nginx process to a logfile because we want docker log collector to get them.
stdout_logfile= NOT SURE WHAT TO PUT HERE?
stderr_logfile= NOT SURE WHAT TO PUT HERE?
username=www-data
autorestart=true
_
スーパーバイザドキュメントは素晴らしい( http://supervisord.org/configuration.html )ですが、_stdout_logfile
_の場合、必要な答えが得られません。つまり、スーパーバイザをどのように構成するのですか?プロセスstdout/stderrをインターセプトしない(またはログファイルにキャプチャするだけでなく、通常のstdout/stderrにも転送する)。
私がすでに試したこと:
stdout_logfile=NONE
_-stdoutもファイルもログを取得しませんstdout_logfile=/var/log/supervisor/%(program_name)s.log
-ログをファイルに取得しますが、標準出力は取得しません。stdout_logfile
_を定義しない-ランダムに名前が付けられたファイルにログを取得しますが、標準出力は取得しません。_stdout_logfile=/dev/stdout
_-スーパーバイザーがエラーを出します:
キャプチャされていないCRIT python例外、チャネルを閉じる(stdout)>(:[Errno 29]不正なシーク[/usr/lib/python2.7/dist-packages/supervisor/supervisord.py | runforever | 233] [/usr/lib/python2.7/dist-packages/supervisor/dispatchers.py|handle_read_event|231] [/usr/lib/python2.7/dist-packages/supervisor/dispatchers.py|record_output|165] [/usr/lib/python2.7/dist-packages/supervisor/dispatchers.py|_log|141] [/usr/lib/python2.7/dist-packages/supervisor/loggers.py|info|273] [/ usr/lib/python2.7/dist-packages/supervisor/loggers.py | log | 291] [/usr/lib/python2.7/dist-packages/supervisor/loggers.py|emit|186] [/ usr/lib/python2.7/dist-packages/supervisor/loggers.py | doRollover | 195])
Illegal seek
エラーは、ログファイルのローテーションを担当する監視対象のコードによって発生します。ここで説明するように、stdout/stderrにリダイレクトするには、ログファイルのローテーションを無効にする必要があります。
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html