Как работает Яндекс.Метрика

8 декабря 2015, 13:32

В интернете всё можно измерить. Если у вас есть сайт, несложно посмотреть, сколько посетителей на него приходит, на каких страницах они бывают, как долго там задерживаются и что делают. Можно составить портрет своей аудитории: узнать возраст и интересы разных категорий посетителей. Эти данные помогают развивать сайт и делать его понятнее и удобнее для разных людей.

Системы веб-аналитики

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

У Яндекса есть своя аналитическая система, которой ежедневного пользуются миллионы владельцев сайтов, — Метрика. Она умеет быстро обрабатывать огромные объёмы данных и строить произвольные отчёты в реальном времени.

Метрика, как и все системы веб-аналитики, оперирует несколькими базовыми понятиями. «Посетитель» — пользователь, зашедший на сайт. Когда он приходит впервые, в его браузер записывается уникальный идентификатор, по которому счётчик Метрики узнаёт его в следующий раз. «Просмотр» — каждое обращение посетителя к сайту, включая простое обновление страницы. «Визит» — один сеанс работы пользователя с сайтом. Визит начинается, когда посетитель попадает на сайт, и заканчивается, если он не предпринимает там никаких действий в течение определённого времени — по умолчанию это 30 минут. Визит может включать в себя множество просмотров разных страниц. В базе Метрики хранятся данные как об отдельных просмотрах, так и о визитах.

Сбор данных

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

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

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

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

Отчёты

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

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

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

Хранение и обработка данных

Поскольку отчёты создаются в реальном времени, их структура становится известна только в тот момент, когда владелец сайта делает через интерфейс Метрики запрос для получения отчёта. Структура отчёта может быть практически любой, а составляется он за долю секунды. Чтобы владелец сайта получал актуальную и полную информацию, нужно постоянно собирать данные о посещаемости и уметь тут же их обрабатывать. Для этого в 2012 году Яндекс разработал свою систему управления базами данных (СУБД) — ClickHouse.

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

Существует два основных типа СУБД — строковые и столбцовые. Они отличаются организацией хранения данных на физическом уровне. Большинство известных СУБД строковые — в них данные, которые в таблице находятся в разных ячейках одной строки, хранятся рядом, друг за другом. Такие СУБД хорошо подходят, например, для обработки транзакций, так как позволяют быстро обновлять отдельные строки в базе данных. Для аналитических запросов, когда необходимы только данные из нескольких столбцов в большом массиве строк, строковые СУБД подходят хуже. При обработке таких запросов необходимо прочитать и отбросить значения всех остальных столбцов — в том числе в данном случае ненужных. На это уходит время.

В столбцовых СУБД, к которым как раз и относится ClickHouse, данные хранятся в порядке столбцов: значения, относящиеся к одному столбцу, расположены рядом. В Яндекс.Метрике мы храним события (визиты, просмотры и т. п.) в нескольких таблицах, где строки — это всё те же события, а столбцы — их параметры. Такая структура СУБД позволяет увеличивать количество параметров событий без потери производительности. Например, если нам нужно получить отчёт по количеству уникальных посетителей в разрезе регионов, достаточно прочитать с диска только два столбца.

В октябре 2015 года объём данных Метрики только для веб-сайтов составил 10,65 триллиона строк. В наиболее крупной таблице содержится 349 столбцов. Каждый раз, когда владелец сайта открывает страницу в Метрике, в ClickHouse отправляется несколько запросов. Всего база данных получает примерно 2000 запросов в секунду; пиковая скорость обработки данных превышает два терабайта в секунду.

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

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

Система ClickHouse, разработанная в команде Метрики и для её нужд, оказалась полезна и для других задач Яндекса. В том числе СУБД используется в Маркете, рекламных технологиях, системе мониторинга серверов и внутренней бизнес-аналитике. ClickHouse сравнительно прост для изучения, так как для запросов используется язык SQL.

32 комментария
Подписаться на комментарии к посту
познавательно для любителей метрики. спасибо)
Круто! Хотелось бы больше узнать о СУБД ClickHouse.
https://habrahabr.ru/company/yandex/blog/303282/
Спасибо за разъяснения. Теперь знаем, что рассказывать клиентам :)
Антонiй Стовпѣцъ
10 декабря 2015, 14:12
Метрика работает фигово!!!!! сколько времени прошло с момента нового дизайна вы так и не сделали правильного отображения статистики на главной странице метрики. Когда данные на главной отличаются от данных на страницах детализации по каждому сайту возникает вопрос. А правильная ли статистика? особенно разница видна в показателях %
Интересно, как система определяет пол и возраст посетителя, можно этот момент подробнее описать?
pixbug,
Я думаю что Yandex метрика читает кукисы в которых указаны ID страниц допустим в ВКонтакте, далее робот ищет ту страницу в ВК и смотрит возраст в анкете пользователя ВК. Ну это конечно же моя теория (я так думаю), а кто его знает - можнт быть Yandex использует похожий алгоритм.
naraikinkolya,
у Яндекса нет доступа к кукам контакта или каким-либо другим. Яндекс может посмотреть пол и возраст в анекете человека на Яндексе, например.
pixbug,
Если коротко - с помощью Крипты. https://yandex.ru/company/technologies/crypta/
Вот это да!!! Вот это технологии, очень интересно было почитать.
Когда буду пользоваться метрикой - буду знать теперь сколько запросов обрабатывается.
м-да....придётся подумать о випорнокс---....
А про цены на рекламу в Директе вообще молчу,какой то Ты Яндекс прожорливый стал....
виталий,
ага, яндекс сам ставки в аукционе в директе назначает? Лучше делайте правильно рекламу, и тогда в любой нише будут хорошие ставки. Так-то!
а когда будет мобильное приложение метрики?
Здравствуйте, возможно ли от почты Яндекса получить документ подтверждающий переписку. Ответы присылать по почте kuibyshevs@yandex.ru
Познавательно, интересно. Спасибо.
Очень простым и понятным языком написано. Даже не имея технического образования, все предельно понятно. Спасибо за интересную статью!
Спасибо, очень полезно!
К сожалению, в отчетах Метрики нельзя одновременно увидеть общее число визитов и число целевых визитов по одному показателю. А соотношение между этими цифрами является важнейшим показателем эффективности работы сайта и его отдельных странци.
бОльшая част статьи написана Капитаном Очевидность. А обычному юзеру нафиг не надо знать, как у вас там устроено считывание данных.
motlohov.aa@esystem42.ru
5 января 2016, 07:54
А как отключиться от вашей долбаной метрики ?
Я понимаю, что в целом яндекс зарабатывает бабло и на этом живет, но скажу что за всё время существования этой хрени, я ни разу не воспользовался этим. Во первых бесит навязчивая реклама, когда я поискал что-то, нашел, а потом мне начинают ещё как минимум месяц втюхивать подобные шняги. Во вторых просто достала реклама уже......
Круто, я тоже себе на mirpost реализую, спасибо.
Спасибо интересно.
Верните пожалуйста способность, как в старой метрике, выстраивать отчеты не по одной цели а по набору из нескольких, с возможностью суммировать результаты.
Метрика - отличный сервис у Яндекса! только пожалуйста не закрывайте старый интерфейс)
Андрей Плотников
11 февраля 2016, 00:19
нужная прога, но работы разработчикам еще мрого
Молодцы!)))) Мне нравиться способ аналитики сайта, очень удобно и понятно. Спасибо!
adBlock будем считать как уже майл начал это делать или нет?
Илья Зубарев
3 марта 2016, 16:49
Верните уже наконец цели на главную страницу метрики, как это было в старой версии! Раньше достижение целей было видно сразу по всем сайтам на одной главной странице, а теперь нужно проделать целую кучу телодвижений, чтобы посмотреть достигнутые цели только для одного сайта.
Я когда ставил себе на сайт метрику, помню, что мне говорили seo-шники с форума joomla, она грузит сайт долго. То есть скорость загрузки страницы увеличивается из-за метрики, всяких счетчиков и тд. Какова нагрузка на сервер сайта, сколько запросов отправляется с сайта, когда посетитель заходит на сайт?
С уважением, Артем
В нашем бизнесе клиент очень долго думает, прежде чем купить. В метрике можно посмотреть заходы на сайт по вебвизору только за последние 2 недели. 
Есть ли какая-либо альтернатива? Или можно как-нибудь увеличить общее время сбора статистики?
А что сегодня с вашей Метрикой? Ни в одном браузере я не могу её открыть?