Как отловить баг на продакшене?

Довольно сложный легаси проект после мерджа крупной пачки новых фич стал сыпать багами: в БД MongoDB у некоторых учеток меняются свойства, которые меняться вообще недолжны никогда, по идее.

Воспроизвести это на дев и стейдже не удаётся: всё работает ожидаемо, тесты (вручную) проходят. Нормальными тестами проект не покрыт, разумеется.

Как бы поймать хотя бы запрос или крон-джоб или Doctrine ODM слушатель событий, который меняет неприкасаемые документы?

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

Но точной корреляции времени изменения с записями в логах запросов нет – расхождения бывают. Менять базу ещё могут воркеры, сервисы, nodejs процесс, слушающий WebSocket. Куча народу и все не при делах :)

Как бы исследовать сей баг на проде?
  • Вопрос задан
  • 348 просмотров
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
боюсь, такое логирование уложит спать боевой проект. Хотя ненадолго можно попробовать.
Я про логирование запросов к Mongo..
Во первых все логировать не нужно. Можно тупо в коде доктрины апдейты только ловить и логировать, можно иначе извернуться, но вам нужны, очевидно, только апдейты. Которых сомневаюсь что мильён в секунду. Ну и во вторых - просто малореально что-то другое придумать...
Ответ написан
Комментировать
@vitaly_il1
DevOps Consulting
Чудесных способов нет - или включить логгинг запросов, как посоветовал Дмитрий (наверняка лог можно послать на отдельный диск чтобы меньше повлияло на производительность). Или ловить сниффером все обращения к Монго.
Или перелопатить все изменения в коде из мержа.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Автор вопроса, куратор тега PHP
♬♬
Нашли опытным путём некоторые действия, которые 100% приводили к нежелательному изменению данных.
Перерыли весь их код – ничего.

Глубокой ночью решились временно включить на проде дебажный режим кернела Symfony.

И повторив запрос, в профайлере нашли причину: один из разработчиков накостылил изменения на проде в /vendor/ доктрин-бридже. Он ошибочно полагал, что это ни на что не повлияет и никак не связано с появившейся проблемой.

Два дня «веселья».
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы