Django + Elasti c Beanstalk, 500 кодов ответов в access_log, но ничего в error_log - PullRequest
1 голос
/ 15 апреля 2020

У меня есть настройка приложения на Elasti c Beanstalk (с автоматическим масштабированием балансировки нагрузки) с использованием Django. В конфигурации также используются apache httpd и mod_wsgi.

Приложение работает правильно, но иногда я вижу ошибку, которую я не могу отладить. Это происходит из-за того, что сама ошибка не появляется ни в какой точке error_log.

Пример из журнала доступа (IP-адреса пропущены):

[15/Apr/2020:01:13:21 +0000] "GET /reroute/agument/ HTTP/1.1" 500 27 "-" ""
[15/Apr/2020:01:13:22 +0000] "GET /reroute/argument/ HTTP/1.1" 302 - "https://www.bing.com/" "Mozilla/5.0 (Linux; Android 4.4.3; KFSOWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/80.5.3 like Chrome/80.0.3987.162 Safari/537.36"

В верхнем запросе отображается ошибка запрос, внизу типичный запрос. Главное, что я здесь заметил, это отсутствие пользовательского агента в запросе 500. Проходя через access_log, в каждом отдельном запросе этого типа отсутствует пользовательский агент. У меня нет определенной c настройки функциональности для предотвращения ботов / пауков и т. П.

Эти 500 ошибок происходят случайным образом и повторяются в течение последних нескольких месяцев. Не было сообщений о том, что это произошло с конечным пользователем, что заставляет меня поверить в две возможности:

  1. Неправильный хост, не указанный в параметре Django ALLOWED_HOSTS, используется кем-то.
  2. Каким-то образом бот / паук отклоняется.

Я действительно хочу идентифицировать и остановить эти ошибочные запросы, так как это влияет на отчеты об ошибках для самого приложения. Как лучше всего определить проблему здесь?

Единственная функциональность, которую я добавил в свою среду beanstalk (через .ebextensions):

  • Перенаправление запросов Http на Https
  • Некоторые Django команды для запуска при запуске

1 Ответ

0 голосов
/ 29 апреля 2020

ОК, так что я тупой.

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

Настройка простого словаря журналирования в Django settings.py внезапно начала отображать следы стека 500 ошибок, когда они произошли. Оттуда я мог видеть, что это было простое необработанное исключение:

LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
    "console": {
        "class": "logging.StreamHandler",
    },
},
"loggers": {
    "django": {"handlers": ["console"], "level": "INFO"},
},

}

...