Много ошибок HTTP 502 и 429 после обновления до 3.4.0.beta1-dev

Версия Discourse: 3.4.0.beta1-dev (bf3d8a0a94)

Обновление было выполнено вчера, и, как было рекомендовано здесь, пришлось отключить минификацию в Cloudflare:

Однако с тех пор многие пользователи (включая меня) столкнулись с множественными случаями ошибок 502 (Bad Gateway) и 529 (Too Many Requests).

Пытаясь смягчить проблему, я также последовал этому руководству:

Но частота возникновения этих ошибок, похоже, не изменилась.

Обновление произошло вчера около 11:00. Я выполнил полную пересборку, так как также хотел отключить один плагин.

У меня есть инстанс Prometheus+Grafana для мониторинга сервера и Discourse, но сервер, судя по показателям загрузки, работает нормально:

Метрики Discourse (падение показателей около 11:00 вчера связано с остановкой контейнера во время пересборки):

Опять же, я не вижу никаких странных закономерностей.

Однако вот что показывает консоль браузера всего минуту назад, после попытки отправить личное сообщение пользователю:

Если вам нужны какие-либо дополнительные данные (логи любого рода), пожалуйста, спрашивайте. Спасибо.

О, если это поможет, то многие фоновые операции в реальном времени явно отстают.

Например, темы, которые уже были прочитаны, не помечаются как прочитанные.

Просто для уверенности: вы выполнили этот шаг и затем пересобрали, верно?

Да, извините, я забыл добавить, что шаблон Cloudflare я уже давно добавил в файл app.yml. Мы всегда находились за Cloudflare, с самого первого дня.

Это фрагмент файла app.yml. У нас есть собственные сертификаты, которые обновляются независимо, поэтому строка с letsencrypt закомментирована:

## это шаблон контейнера Docker Discourse all-in-one, standalone
##
## После внесения изменений в этот файл вы ОБЯЗАНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ И ВЫРАВНИВАНИИ!
## Посетите http://www.yamllint.com/, чтобы при необходимости проверить этот файл

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

## какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для подробностей
expose:
  - "80:80"   # http
  - "443:443" # https

[...]

Фрагмент /logs

Вижу, что это перенесено в #installation, но для ясности: это не новая установка.

Этот экземпляр Discourse работает с марта 2023 года, и у него никогда не было этой конкретной проблемы.

Ранее была проблема с некоторыми 529, но она уже была решена.

Думаю, это всё ещё подходит для

Похоже, ваш PostgreSQL перегружен. Судя по всему, большая часть вашей оперативной памяти простаивает. Попробуйте настроить БД для её использования и посмотрите, как изменится ситуация.

Как выглядит /sidekiq/queues?
С какой версии вы обновлялись?

С версии 3.2.1 от 6 мая (последняя стабильная) v3.2.1 до последней версии с пометкой test-passed.

Очереди Sidekiq:

Раздел «Dead job» выглядит так, но это одна и та же задача, которая, похоже, висит здесь с самого начала.

Самые старые записи:

Задачи в статусе «retry» — это, похоже, одна и та же задача, которая повторяется снова и снова.

Но почему это произошло внезапно? Сразу после обновления слоя приложения?

Я использую плагин Discourse Prometheus exporter.
Если бы я добавил exporter PostgreSQL в качестве отдельного контейнера на виртуальную машину, было бы возможно разрешить ему доступ к метрикам на установке PostgreSQL для Discourse?

Есть ли более точные рекомендации по тонкой настройке базы данных для Discourse?

Не уверен, связано ли это, но это точно началось после обновления: при нажатии на кнопку «Закрыть» во вкладке «Непрочитанные» всегда возвращается ошибка 503.

Что ж, похоже, решения нет, поэтому я попробую вернуться к последней версии stable, как и должно быть… вы знаете, стабильной.

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

Нельзя откатиться с версии «tests-passed» до стабильной, если нет более новой стабильной версии. Поэтому следующая возможность для вас появится, когда выйдет 3.4.0, думаю, это будет около или после Рождества…

Кроме того, рано или поздно придётся принять неизбежное.

Ну, я только что это сделал. Похоже, всё работает. В любом случае нам не важны какие-либо функции версии 3.3.0.

Посмотрю, остались ли ещё проблемы. В худшем случае у нас по-прежнему будет множество ошибок 429 и 502 — это не так уж сильно изменит ситуацию.

Однако я был бы признателен за инструкции по настройке Postgres в Discourse, чтобы выделить ему больше ресурсов.

Редактирование: Развёрнута версия 3.2.5. Система кажется стабильной.

Пожалуйста, напомни нам об этом, когда будешь публиковать следующую проблему :wink:

Я всегда указываю версию, на которой работаю, когда создаю заявку на проблему.
Считаю важным помнить именно то, что, поскольку это программное обеспечение с открытым исходным кодом, критические проблемы следует рассматривать всерьёз, а не писать подобные вещи:

Это ещё один пример того, как люди, прилагая дополнительные усилия и переключаясь на «стабильную» версию, сталкиваются с ошибками, которые остаются незамеченными, потому что это не самая распространённая развёрнутая версия.

Когда stable должен означать «стабильный», а не «устаревший».
Тот факт, что основные зависимости, такие как discourse docker, обновляются без системы тегов, должно быть достаточно, чтобы проявлять больше скромности при ответах пользователям, сообщающим о проблемах.

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

Я считаю важным помнить… что я не работаю в Discourse и помогаю вам в своё свободное время, поэтому ваш тон меня не устраивает, и я не могу ничего сделать с вашим отзывом.