Python вход через uwsgi, supervisor и Docker - PullRequest
0 голосов
/ 13 января 2020

У меня есть Python REST API, работающий в Docker контейнере, за uUWSGI, который управляется Supervisord. При локальном запуске приложения мои журналы отображаются в терминале так, как я хочу, но я не могу скопировать это в контейнере / рабочей среде на мой сервер системного журнала. Я прошел через множество SO-потоков, но ни одна комбинация флагов, по-видимому, не помогает моей регистрации.

Мой Python код записи в main.py:

formatter = logging.Formatter('%(asctime)s %(request_id)s %(module)s:%(levelname)s %(message)s')
handler = logging.StreamHandler() # have tried forcing this to stderr/stdout
handler.setFormatter(formatter)
handler.addFilter(AppFilter())

application.app.logger.handlers.clear()
application.app.logger.addHandler(handler)
application.app.logger.setLevel(logging.DEBUG)
application.app.logger.debug('application starting...')

Приведенный выше код отлично работает для вывода на локальный терминал. Вот что я попытался настроить для других программ / служб:

uwsgi.ini:

[uwsgi]
chdir = ./src
wsgi-file = main.py
pythonpath = ./src

master = true
processes = 4
threads = 2

uid = nginx
gid = nginx
socket = /tmp/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 664

plugins = python3

supervisord.conf:

[supervisord]
nodaemon=true
user=root

[program:uwsgi]
command=/usr/sbin/uwsgi --ini /etc/uwsgi/uwsgi.ini --die-on-term --log-master
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

И, наконец, демон Docker настроен как /etc/docker/daemon.json

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://syslog_server_ip_address:514", # IP redacted for stackoverflow
    "tag": "my_api"
  }
}

Поскольку журналы проходят довольно много уровней, я не уверен, что делаю неправильно , Мой сервер системного журнала получает журнал для каждого запроса, который, я думаю, является необработанным журналом uWSGI, но я не могу получить ни один из моих кодов Python для работы в среде контейнера.

Работающий журнал выглядит так:

host1.net my_api[1753]: [pid: 12|app: 0|req: 2/2] ip.ip.ip.ip () {36 vars in 432 bytes} [Mon Jan 13 07:58:43 2020] GET /v1/test => generated 25256 bytes in 16 msecs (HTTP/1.0 200) 2 headers in 74 bytes (1 switches on core 1)

Любая помощь / указатели оценены, спасибо.

...