Медленный роут часто связан не с самим PHP. Обычно виноваты неоптимальные запросы, отсутствующий индекс или дорогая агрегация. Без видимости на уровне драйвера ловить такое — гадание на кофейной гуще.
В гайде собирают лёгкий монитор для связки Laravel + MongoDB из трех частей:
— middleware замеряет общую длительность HTTP-запроса;
— класс, реализующий CommandSubscriber из MongoDB PHP driver, ловит события commandStarted / commandSucceeded / commandFailed и считает длительность каждой команды;
— метрики собираются в QueryMonitorService и в конце реквеста сбрасываются в коллекцию performance_logs.
Ключевое → подписка регистрируется один раз в boot() провайдера:
use function MongoDB\Driver\Monitoring\addSubscriber;
public function boot(): void
{
addSubscriber(new MongoCommandSubscriber());
}
Дальше драйвер сам отдаёт операцию (find, aggregate, insert), коллекцию и тайминг, без правок прикладного кода. Запросы дольше порога помечаются is_slow.
Чтобы коллекция логов не разрасталась до неприличия, навешивают TTL-индекс на created_at с expireAfterSeconds: 604800 (неделя). Mongo сам подметает старьё.
🔗 Подробнее
Библиотека пхпшника
#how_to