Uwsgi отправляет только журналы stdout на GCP в Kubernetes Engine

У меня есть приложение django, для которого я хочу отправлять журналы в GCP.

Локально все работает нормально, используя django dev server и Cloud Logging for Python. Я вижу журналы на моей приборной панели GCP с нужным уровнем, я также могу видеть структурированные json журналы, когда я их использую. Это также хорошо работает, когда я использую gunicorn в локальном докере вместо сервера django dev.

Однако, как только я использую uwsgi локально, я не могу найти никаких следов моих журналов в приборной панели GCP. Когда я разворачиваю свой образ докера в Kubernetes Engine, все журналы отображаются только как информация, и они больше не структурированы в json. Я заметил, что имя логгера stdout в моем проводнике журналов

Я предполагаю, что uwsgi каким-то образом не использует мой конфиг протоколирования python и протоколирует только stdout, который автоматически отправляется как информация каким-то внутренним процессом gcp.

Вот мой uwsgi.ini:

[uwsgi]
chdir=xxx
module=xxx
http = 0.0.0.0:8080

vacuum = true
enable-threads = true
listen = 128
# socket-timeout, http-timeout and harakiri are in s
socket-timeout = 180
http-timeout = 180
harakiri = 180
harakiri-verbose = true
py-autoreload = false
processes = 4
memory-report = false
master = true
master-fifo = /tmp/master-fifo
post-buffering = 65536
buffer-size = 65535
max-requests = 1500
max-requests-delta = 100
max-worker-lifetime = 3600
hook-accepting1-once = write:/tmp/bkm.ready ok

# Logging configuration
# Disable request logging. It's done from the application
disable-logging = true

log-master = false
# this will only prefix system logs
log-prefix = [uWSGI]

и моя конфигурация протоколирования

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'verbose': {
            'format': '%(name)s [%(module)s:%(funcName)s:%(lineno)d] > %(message)s',
        },
        'simple': {
            'format': '%(levelname)s > %(message)s',
        },
    },
    'handlers': {
        'console_simple': {
            'class': 'logging.StreamHandler',
            'filters': ['require_debug_true'],
            'formatter': 'simple',
            'level': 'DEBUG',
        },
        'console_verbose': {
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
            'level': 'INFO',
        },
        'slack': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'api.project.logger.SlackHandler',
        },
        'stackdriver_logging': {
            'level': 'INFO',
            'class': 'google.cloud.logging_v2.handlers.CloudLoggingHandler',
            'formatter': 'verbose',
            'client': logging_v2.Client(),
            'labels': {'env': ENV_LABEL},
        },
    },
    'loggers': {
        'api': {
            'handlers': [
                # 'console_simple',
                'console_verbose',
                'stackdriver_logging',
                'slack',
            ],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
    'root': {
        'handlers': ['console_verbose'],
        'level': 'DEBUG',
    },
}

Я пробовал различные конфигурации uwsgi (log-master, log-encoder...), но безрезультатно. Я могу правильно видеть свои журналы, когда я использую gunicorn, поэтому я подозреваю, что причиной является uwsgi, но я хотел бы избежать изменения моего wsgi сервера, если это возможно.

Спасибо

Вернуться на верх