Как выявлять показатели (логи, метрику, дейтсвия пользователя) в приложении?
Ситуация: Хочу сделать приложение (и сайт) для небольшой типографии, с заказами принтов, балансом, и т.п., где будет:
- Авторизация
- Оплаты за услугу (предоплата)
- Обратная связь
- Личный кабинет
и прочее ..
Проект планируем на NodeJS (NestJS) для Backend, VueJS для фронта, Flutter мобилка.
Проект скорее для само-развития, интересует момент реализации с аналитики, ведения статистики, метрик, мониторинг и прочее отслеживание действий пользователя, я не знаю как это правильно реализовать, но требуется следующее:
- Количество успешных\неуспешных авторизация
- Количество запросов на восстановление пароля
- Количество обращений в поддержку
- Среднее время обработки обращений в поддержку
- Среднее время проведенное онлайн (Среднее время между заходами пользователя в приложение)
- Мин., макс,. и среднее время отклика каждого запроса (контроллера)
- Зарегистрировано пользователей за (месяц, год, всего)
- Проведено оплат (месяц, год, все время)
- Оплат на сумму за (месяц, год, все время)
- Средний размер транзакции/покупки
- Процент завершенных транзакций от общего числа начатых
- Количество отзывов и оценок пользователей
- Количество посещений определенной страницы (например, новостная)
- Процент использования различных функций приложения (чтобы определить, какие функции приложения наиболее популярны)
- Процент использования разных версий приложения
- Время загрузки страниц/экранов
- Количество ошибок приложения
- Количество активных (онлайн) пользователей в реальном времени
- Возможность посмотреть историю действий за определенный период
Точно не знаю, но предполагаю можно как-то анализировать логи.
Собственно вопрос: Как выявлять эти показатели, и как посоветуете реализовать такое?
Это называется метрики приложения.
Реализовать можно несколькими способами, в зависимости от требования:
- Для онлайн показателей (количество ошибок приложения, кол-во активных пользователей) можно реализовать через счетчики - грубо говоря, приходит пользователь -> увечиличиваем счетчик
- Для статичтических данных - нужно делать запросы в БД, т.к. онлайн такое вряд-ли реализуется (приложение может рестартануть и метрики потеряются) - это SQL (если данные в реялционке) или язык для своего хранилища
Чаще всего вижу такое решение:
- Приложение отслеживает внутрениие метрики и отдает их в Prometheus формате
- Prometheus приложение собирает эти метрики
- Grafana получает метрики из Prometheus и строит по ним дашборды
- Grafana делает запрос в БД для получения статистики и строит по ним дашборды
В общем, смотри пару Prometheus/Grafana
P.S. анализ логов для получения метрик - плохая затея, не надо так
P.P.S. метрики, логирование, действия пользователя и т.д. - в общем случае называется observability - возможность понимать что происходит в приложении/системе и т.д.