image

Мы любили Яндекс Метрику. Правда, любили. Издалека.

До того момента, пока не поставили её себе — и через отрицание, гнев, торг и депрессию не приняли простую истину: каждый день мы добровольно скармливаем нашего пользователя конкуренту. А ведь для бизнеса данные о поведении клиентов — это не просто статистика, это то, что превращается в точечные рекламные кампании, персонализированные предложения и в конечном счёте в прибыль.

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

Тут-то мы и решили: это пора прекратить, надо делать свою метрику, хватит уже этих граблей. Потому что лоб ещё чесался от предыдущих — self-hosted аналитики PostHog, которая нам доставила изрядно танцев с бубнами. Именно оттуда мы, собственно, и перешли на Яндекс Метрику.

И это была ошибка.

Как всё начиналось


Когда мы делали наш первый продукт — L1veStack, нам хотелось сэкономить время и не писать всё с нуля. Поэтому мы взяли несколько хороших опенсорсных систем, которые могли бы закрыть приличную часть функционала. Одна из них — система аналитики PostHog. Она поставляется в двух версиях: облачная и self-hosted. Второе — как раз то, что мы искали, чтобы поставить у себя и не передавать данные на сторону. Мы решили затащить её к себе.

Функционал у PostHog — огонь: красиво, удобно, всё на месте. Поставили, встроили, и вроде всё шло нормально. Пока не решили, что мы хотим не просто смотреть цифры, а и сессии пользователей записывать — как в Яндекс Вебвизоре, когда можно посмотреть, что человек на сайте делал.

Мы включили эту опцию — и… ничего не заработало. Начали разбираться. Долго и больно.

Ковырялись с CORS (Cross-Origin Resource Sharing) и CSRF (Cross-Site Request Forgery) — это те штуки, которые отвечают за безопасность запросов между разными доменами. У нас PostHog был на одном домене, сайт — на другом. Вроде всё правильно делали, но ничего не помогало. Решили попробовать обновиться, потому что с момента установки вышла новая версия. Поставили. О чудо — сессии заработали! Но развалилось всё остальное.

Мы застряли в бесконечном цикле: либо сессии не пишутся, либо аналитика ломается. Постоянная нестабильность, баги, конфликты между функциями. Мы поняли, что это не то решение, с которым можно спокойно жить на продакшене. Особенно перед релизом.

Время шло, до релиза оставалось всё меньше, и мы поставили Яндекс Метрику. Не потому что хотели, а потому что без аналитики было нельзя.

Первое, что сразу резануло, — все данные теперь у Яндекса. Именно этого мы и хотели избежать. Но на старте решили с этим мириться. Посмотрели первые сессии, получили полезные инсайты, кое-что переделали, стало понятнее и удобнее.

Но радость была недолгой. Начались проблемы уже у самой Метрики — прямо в интерфейсе висело сообщение, что у них что-то сломалось и отчёты теперь не грузятся. Пользователь аналитики, ты сегодня отдыхаешь.

image

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

Остаётся вариант — хранить данные у себя


Главный аргумент — контроль. Когда ваши данные гуляют по чужим серверам, всегда есть риск, что они утекут к конкурентам.

Например, когда вы используете ту же Яндекс Метрику, происходит следующее:
  • Яндекс видит, какая аудитория посещает ваш сайт, и может повышать для вас цены на рекламу именно этой аудитории (а кто-то же ещё интеграцию с Яндекс Директ настраивает и выручку от транзакции отдаёт, добровольно).
  • Яндекс анализирует, какие функции вашего продукта популярны, и может внедрять похожие в свои сервисы.
  • Яндекс понимает, в какие моменты пользователи покидают ваш сайт, и может использовать эту информацию для улучшения своих продуктов.

Представьте, что вы строите инновационный финтех-сервис, а все данные о поведении ваших клиентов уходят в Яндекс Деньги (которые теперь ЮMoney). Или разрабатываете маркетплейс, а информацию о предпочтениях пользователей получает Яндекс Маркет.

То есть хранение данных у себя — это не просто технический выбор, это стратегическое конкурентное преимущество. Своя система даёт инструмент для глубокого анализа поведения пользователей без риска раскрытия секретов фирмы. Полный контроль над информацией позволяет быстро реагировать на изменения, обходить блокировки браузеров и использовать самые крутые методы профайлинга. Выгода тут очевидна. Свой продукт не зависит от внешних факторов и обеспечивает конфиденциальность, скорость и стабильность.

В общем, мы для себя так сформулировали основную проблему: существующие решения либо передают данные третьим лицам, либо страдают от блокировок браузерных трекеров, либо слишком сложны в настройке и поддержке.

Нам нужен был инструмент, который:
  1. Хранит все данные на наших серверах.
  2. Стабильно работает даже при агрессивной блокировке трекеров.
  3. Легко настраивается и не требует команды DevOps для поддержки.
  4. Предоставляет всю необходимую функциональность для глубокого анализа.

А раз нужен, то его надо сделать. Ну мы и сделали.

image
Дашборд с метриками

Что под капотом нашей метрики и зачем всё именно так


Основной приоритет — полный контроль над данными и лёгкость внедрения. Система предоставляет всё, что нужно для глубокой и точной аналитики:
  • Базовый сбор метаданных: IP, тип устройства, браузер, ОС, разрешение экрана и другие параметры — всё, что помогает понять пользователя.
  • Запись сессий пользователей — аналог Вебвизора: можно воспроизвести действия пользователя на сайте и отследить моменты фрустрации или проблем.
  • Продвинутый профайлинг: события до и после авторизации объединяются в один профиль. Если пользователь несколько раз заходил как гость, а затем авторизовался — вся его история объединяется в единую сессию (если не чистил куки).
  • Feature flags (фича-флаги): гибкое управление функциональностью. Можно включать/отключать фичи для конкретных сегментов пользователей — например, для мобильной аудитории, зарегистрированных в декабре или просто раскатить новую фичу на 5% случайных посетителей.
  • A/B-тестирование: настройка продуктовых гипотез на базе фича-флагов. Можно тестировать разные интерфейсные решения или функционал на разделённых группах пользователей и собирать аналитику.
  • Customer Journey Map (CJM): визуализация пути пользователя — от первого визита до ключевого действия. Видно, где он свернул, где ушёл и как можно улучшить путь.

image
Запись и воспроизведение действий пользователя на сайте

Отдельно расскажу про прогнозный профиль. Это не просто метрика, это чуть-чуть предсказатель. Мы его почти доделали и вот-вот выпустим. Он анализирует поведение пользователя в реальном времени и пытается понять, кто перед нами, ещё до того, как он что-то купил, зарегистрировался или вообще раскрылся.

Если человек зашёл на сайт, походил, потыкал кнопки — система собирает сигналы, классифицирует и относит его к одной из поведенческих групп. Похож на тех, кто чаще возвращается? Или на тех, кто сливается после третьего шага? А может, это «быстрый покупатель» и ему нужно меньше отвлечений и больше CTA?

Зачем это нужно: чтобы реагировать не постфактум, а прямо по ходу. Подсвечивать нужный сценарий, менять интерфейс, не дожидаясь оттока. Это уже не просто аналитика, а инструмент персонализации и адаптивного интерфейса.

Работает он на базе простых ML-моделей, которые дообучаются по мере накопления исторических данных. Всё быстро и с каждым шагом всё точнее.

Архитектура с прицелом на будущее


С самого начала мы собирали систему с прицелом на простоту, скорость и масштабируемость. Поэтому — микросервисная архитектура, язык Go и только проверенные Open Source компоненты (и то — по минимуму). Всё летает, не ломается и легко разворачивается.

Каждый компонент упакован в контейнер: всё разворачивается через Docker Compose или Helm Chart. Установить на собственные серверы можно за 3–4 клика. А при размещении у нас — вообще в один.

Интеграция тоже продумана: трекер можно поставить на тот же домен, что и основное приложение. Поэтому он не определяется браузером как сторонний и не блокируется.

В архитектуре:
  • REST API принимает данные с фронта;
  • Микросервис записывает сессии пользователей;
  • Работает система профилирования и объединения данных до и после авторизации;
  • Админка построена на GraphQL;
  • Для интеграции на фронте — SDK для React (Next.js).

Между сервисами данные передаются по gRPC — это быстрее, надёжнее и стабильнее, чем классический HTTP. Снаружи этого не видно, но именно это делает систему живучей и быстрой даже под нагрузкой.

Для админки — отдельный GraphQL-микросервис. Он общается только с внутренними компонентами и не торчит наружу. Всё, что касается настройки фича-флагов, A/B-тестов, CJM и просмотра сессий, — делается через него. Это повышает безопасность: административная логика отделена и не доступна извне.

Всю систему мы собрали на проверенных Open Source компонентах: Postgres — для хранения структурированных данных, Redis — для кеширования, Kafka — для обмена сообщениями, ClickHouse — для аналитики. Никаких закрытых зависимостей или скрытых ограничений.

Сразу внедрили инструменты наблюдаемости — LGTM-стек (Loki, Grafana, Tempo, Mimir). Это позволяет отслеживать состояние системы, трассировать запросы и анализировать логи — всё прозрачно и под контролем.

В общем, получилось решение, которое легко разворачивается, стабильно работает и масштабируется вместе с бизнесом.

image
Feature-flags и параметры раскатки на аудитории

Вайб-кодинг: нейросети в разы ускорили нам разработку


Разработка такой системы вручную — это долго и дорого. Если собрать команду из 2–3 бэкендеров, 2 фронтендеров, DevOps и тимлида, то даже на минимальный MVP уйдёт полтора-два месяца плотной работы. Именно так это делалось бы год-полтора назад — без нейросетей, с написанием всего кода вручную. И затраты на разработку вряд ли оправдали бы себя — проще было бы просто оформить подписку на готовый платный сервис.

С появлением вайб-кодинга всё изменилось. Прототип мы собрали примерно за неделю силами одного разработчика (меня), и уже на второй неделе система имела рабочий функционал.

Здесь важный момент: нужно давать нейросети чёткие инструкции, иначе она начнёт улетать в своих «фантазиях» и понапишет лишнее. Тут не сработает принцип «сделай по лучшим практикам»: получится раздутый проект с размытой логикой и десятками лишних слоёв (не факт, что работающих).

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

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

Кодовая база сократилась в разы, функциональность стабилизировалась. С каждой итерацией ТЗ конкретизировалось, и нейросеть предлагала всё более эффективные решения. В итоге код стал проще, компактнее и логика — такая, как если бы ты писал сам.

Что в результате получилось


Это рабочая аналитическая система, которая включает примерно всё, что нужно для глубокого понимания пользователей:
  • Базовый сбор метаданных — то же самое, что собирает Яндекс Метрика: IP-адрес, данные о браузере, тип устройства, разрешение экрана.
  • Запись сессий — полноценный аналог Вебвизора, позволяющий воссоздать каждое действие пользователя на сайте.
  • Продвинутый профайлинг — объединение данных о пользователе до и после авторизации, что решает извечную проблему «потери» посетителя при логине.
  • Фича-флаги — включение или отключение функций для разных групп пользователей без необходимости деплоить новую версию.
  • A/B-тестирование — инструменты для проверки продуктовых гипотез с детальной аналитикой результатов.
  • Customer Journey Map (CJM) — визуализация пути клиента с выявлением точек отказа и затруднений на каждом этапе воронки.

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

В разработке находится система прогнозного профиля (уже почти готова). Она позволит группировать схожих пользователей и предсказывать их поведение в самом начале сессии.

В чём мы круче конкурентов


Про Яндекс Метрику я уже много сказал. Добавлю ещё про PostHog: он требует отдельного домена, 4 vCPU, 16 Гб ОЗУ и 30 Гб диска. Установка долгая, несмотря на контейнеры и собственный инсталлятор. При трафике выше 50 тысяч пользователей в сутки начинаются проблемы с производительностью.

Собственно, для наглядности сведу всё в таблицу:

Критерий

Яндекс Метрика

PostHog

Наше решение

Конфиденциальность данных

Данные уходят конкуренту

Вы контролируете данные

Вы контролируете данные

Устойчивость к блокировкам

Блокируется браузерами

Средняя устойчивость

Высокая устойчивость

Запись сессий

Реализована

Конфликтует с другими функциями

Работает стабильно

Сложность обслуживания

Не требуется

Высокая

Минимальная

Интеграция

Простая

Сложная (CORS/CSRF проблемы)

Простая


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

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

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

В итоге наш продукт — это универсальное решение для компаний, которые хотят контролировать свои данные и экономить деньги.

image
Когортный анализ

Чему всё это нас научило


Вот ключевые уроки, которые мы извлекли:
  1. Технологические ограничения внешних сервисов неизбежны. Когда вы используете чужой продукт, вы всегда зависите от решений, принятых его разработчиками. Собственная система даёт полный контроль.
  2. Выбор правильного технологического стека критически важен. Go и микросервисная архитектура позволили создать легковесное, но мощное решение, которое легко масштабируется.
  3. Нейросети способны радикально ускорить разработку при правильном подходе. Секрет в строгих технических рамках и постоянном тестировании промежуточных результатов.
  4. Меньше кода — лучше код. По мере развития проекта мы постоянно оптимизировали архитектуру, уменьшая объём кода и делая его более поддерживаемым.

Для разработчиков, которые задумываются о создании подобных систем, наши рекомендации просты:
  • Начинайте с чёткого понимания проблем, которые вы хотите решить.
  • Используйте компактные, хорошо тестируемые компоненты.
  • Не бойтесь применять нейросети, но устанавливайте для них чёткие рамки.
  • Фокусируйтесь на создании ценности для конечных пользователей, а не на технологиях ради технологий.

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

Контроль над данными — это не роскошь, это необходимость. Не отдавайте своё золото конкурентам. Стройте будущее на основе собственных знаний о своих клиентах.

Комментарии (21)


  1. MesDes
    26.06.2025 11:50

    Статья о чем? Похвастаться, ну допустим молодцы. Если бы выложили хотя часть функционала, были дважды молодцы.


    1. SergeyEgorov
      26.06.2025 11:50

      Статья же рекламная? Нет? Арендуйте ЭТО у нас и наслаждайтесь...

      "Наша модель — это бесплатный продукт без сбора и перепродажи данных. Мы зарабатываем за счёт того, что проще всего запустить систему именно у нас: всё разворачивается в один клик, без лишней возни и администрирования."


      1. Krakanosh
        26.06.2025 11:50

        Молодцы конечно, но вы бы хоть ссылку оставили, интересно посмотреть же. А так получается вы не продаете, а только показываете)


  1. Schakal
    26.06.2025 11:50

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

    У вас есть страница со списком клиентов? Добавить их в список блокировки целиком.

    мы хотим не просто смотреть цифры, а и сессии пользователей записывать — как в Яндекс Вебвизоре, когда можно посмотреть, что человек на сайте делал.

    А хотят ли этого пользователи? Их хотя бы спрашивают перед тем, как начать их "пасти"?


    1. km1337 Автор
      26.06.2025 11:50

      Вас смущает, что данные о вашем взаимодействии с продуктом собирают разработчики этого продукта?

      В планах глобальный выпуск, там будет соблюдение требований по передающимся данным с возможностью выбирать, что именно о пользователе собирается. В России пока достаточно написать «мы собираем куки».


      1. Schakal
        26.06.2025 11:50

        Вас смущает, что данные о вашем взаимодействии с продуктом собирают разработчики этого продукта?

        Конечно, смущает. Кому такое понравится? Если бы нравилось, не было бы всех этих списков блокировки аналитических сервисов.

        В России пока достаточно написать «мы собираем куки».

        И собирать при этом далеко не только их просто потому, что "это официально не запрещено делать молча"? По закону может быть и можно пока что, но чисто по-человечески.. Ну посмотрим, что будет в финале. Возможно, прибавится работы для Tampermonkey и иже с ним.


        1. km1337 Автор
          26.06.2025 11:50

          Что касается cookie и разнообразных трекеров, я еще понимаю: зло в них в том, что они отслеживают активность за пределами отдельно взятого сайта. Но что плохого сделала пользователю продуктовая аналитика на конкретном ресурсе? От того, что разработчик лучше поймет, как используется его продукт, кому это вред наносит и какой?


          1. Schakal
            26.06.2025 11:50

            Не обязательно должен быть вред, чтобы чего-то не хотеть. Скажем, человек снимает жильё, ходит по квартире, и за ним всё время ходит хозяин. Ничего не делает, никак не комментирует, просто ходит и смотрит. Пусть даже арендатор ничего предрассудительного не совершает, ему всё равно будет не по себе. Так и тут. Цель сайта – давать информацию людям, а не изучать поведение людей. Либо, если уж очень любопытно, это должно бы доноситься до них в явном виде, кмк. Чтобы люди могли решить, хотят они быть подопытными крысками или нет.


            1. km1337 Автор
              26.06.2025 11:50

              Да, я понимаю вас. Телеметрия так или иначе собирается со всего сейчас, чем вы пользуетесь — от вагона метро до приложений. Мы за этичность, то есть обезличенность и отсутствие любого злонамеренного использования. Но при этом мы считаем нормальным обезличенно (и агрегированно) собирать те же ситуации, приводящие к ошибкам или задержкам, что является абсолютно общепринятой практикой. Можем ли не собирать? Да, и в беклоге сделать этот функционал отключаемым, как я уже сказал выше.


              1. Schakal
                26.06.2025 11:50

                собирать те же ситуации, приводящие к ошибкам или задержкам

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

                объединение данных о пользователе до и после авторизации, что решает извечную проблему «потери» посетителя при логине."

                А значит и обезличенность сразу отпадает. Всё очень даже персонифицированно получается. Так что где тут этичность - не очень понятно.


  1. rkhairov
    26.06.2025 11:50

    Выглядит слишком ванильно. Подождем реальных отзывов.

    А то похоже на форк posthog в упакованной коробке (это не плохо, вопрос в насколько это доработано)


  1. tkutru
    26.06.2025 11:50

    Без исходников нещитово - одна маркетинговая болтовня...


  1. init0
    26.06.2025 11:50

    Чем это лучше Matomo?


    1. km1337 Автор
      26.06.2025 11:50

      Раздел Pricing на сайте Matomo ответит на этот вопрос: всё кроме базовых фич стоит денег. Например, Session recording — от 219 € в год.


      1. nightwolf_du
        26.06.2025 11:50

        И это по-прежнему сильно дешевле чем написать хорошую систему аналитики


        1. init0
          26.06.2025 11:50

          Именно, для self hosted решения это копейки.


  1. Tepliy_Chainik
    26.06.2025 11:50

    Все же понимают, к чему ведет коммерция, - к укрупнению бизнеса и в конечном счете слиянию его с государством. Вот на примере Яндекса мы это и видим. Только не говорите про честную конкуренцию и прочую справедливость, проверьте сначала, верите ли вы в это сами.
    Яндекс захватил огромную часть рынка и будет стремиться захватить его весь. Вы ничего с этим не можете поделать и никогда не сможете. Это слон, который пока ведет себя спокойно, потому что занял не все место. А вот посмотрите скажем, на Google. Он уже занял все место в своем дворе и полез в соседние. И Яндекс хочет делать так же. И все компании хотят так же, а вы зачем-то сопротивляетесь этому закону рыночной экономики.
    Если ты нужен системе, то система тебя достанет. Бороться бессмысленно, поскольку система вечна. Даже если ты ее сломаешь, на ее месте окажется другая и сломает тебя.


  1. knstntnhl2b
    26.06.2025 11:50

    Каждая сессия пользователя становилась частью огромной аналитической машины, которая затем оборачивалась против нас же — в виде повышения цен на рекламу именно нашей целевой аудитории или дополнительных знаний, помогающих продуктам Яндекса конкурировать с нашими

    Есть ли какие то доказательства именно повышения цен на рекламу, если на сайте установлена я.метрика? звучит громко, но никаких обоснований этого в статье не приведено. Без этого как будто бы и нет смысла никакого в такой системе аналитики, ну разве что для продвинутого профайлинга, и то который будет шумно работать, тк если пользователь заходил в инкогнито или чистил куки то ничего не сметчится


  1. inkvizitor68sl
    26.06.2025 11:50

    Мы застряли в бесконечном цикле: либо сессии не пишутся, либо аналитика ломается.

    Да любой средней руки SRE пошел бы и сразу придумал, что нужно поставить обе версии и подключить 2 счетчика от разных инстансов -)


  1. KwI
    26.06.2025 11:50

    Т.е. вы не смогли побороть настройки CORS и написали свое? Мое уважение :)