Nginx

Nginx:在supervisord下執行nginx時如何使用docker日誌收集器

  • January 8, 2015

官方的 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

我想做同樣的事情,但是我在容器中將supervisord設置為PID 1,它監督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

supervisord 文件很棒(http://supervisord.org/configuration.html)但是因為stdout_logfile他們沒有給我我需要的答案 - 即,我如何配置 supervisord 不攔截程序 stdout / stderr (或擷取到日誌文件,但也轉發到正常的標準輸出/標準錯誤)。

我已經嘗試過的:

  1. stdout_logfile=NONE- 不獲取任何日誌,既不標準輸出也不到文件
  2. stdout_logfile=/var/log/supervisor/%(program_name)s.log- 獲取日誌到文件但不是標準輸出。
  3. 未定義stdout_logfile - 將日誌獲取到隨機命名的文件,但不是標準輸出。
  4. stdout_logfile=/dev/stdout- Supervisord 給出錯誤:

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錯誤是由負責日誌文件輪換的 supervisord 中的程式碼引起的。要重定向到 stdout/stderr,您必須禁用日誌文件輪換,如下所述:

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

引用自:https://serverfault.com/questions/657863