Sentry для ошибок
Для метрик grafana/prometheus
Для логов ELK
И ещё свой инструмент для трассировок (мы можете взять jaeger, например)
Смысл в целом такой, что для каждого запроса надо назначать уникальный correlationID (чтобы трассировку можно было нарисовать), а потом по ходу выполнения запроса надо хранить контекст с тем, от какого пользователя пришёл запрос и обогащать им логи. Ну и когда приходит запрос - сразу логгируем метод, путь, correlationID, id пользователя, аргументы, ну и тело, если возможно.
Invalid argument supplied for foreach() in Controller.php:350
А от таких ошибок должны спасать статические анализаторы и аннотации типов.