TLDR
Главная особенность StatsHouse — способность "переваривать" сколько угодно данных и отображать их в режиме реального времени. Это возможно благодаря агрегации и семплированию: данные приходится сжимать и (иногда) выбрасывать.
Избавиться от семплирования в общем случае нельзя (и чаще всего это не нужно).
Чтобы понять, подходит ли вам StatsHouse, узнайте, какие механизмы и понятия лежат в основе этой системы. Они описаны ниже — в двух словах и картинках:
Агрегация
Узнайте больше об агрегации. Здесь приводится лишь краткое объяснение.
StatsHouse "схлопывает" ряды данных с одинаковыми значениями тегов. Счётчики при этом суммируются.
StatsHouse НЕ хранит точное значение метрики за каждый момент времени. Хранится только общая статистика (агрегат = count, sum, min, max) за временной интервал.
Максимальное разрешение — одна секунда. Данные с таким разрешением доступны в течение двух дней, затем разрешение уменьшается (до минут и часов).
Кардинальность
Узнайте больше о кардинальности. Здесь приводится лишь краткое объяснение.
Данные с высокой кардинальностью — это данные, в которых много разных значений тегов. Они плохо сжимаются, занимают большой объём, и их приходится семплировать.
Данные с низкой кардинальностью хорошо агрегируются (сжимаются), и обычно их не приходится семплировать.
Семплирование
Узнайте больше о семплировании. Здесь приводится лишь краткое объяснение.
При слишком высоких нагрузках StatsHouse выбрасывает случайные ряды данных. Суммы и счётчики в оставшихся рядах домножаются на коэффициент семплирования так, чтобы сохранялись средние значения.
В большинстве случаев семплирование не мешает пользователям и защищает систему от перегрузки.
Гарантировать отсутствие семплирования нельзя!
Как минимизировать семплирование?
Семплирование включается, когда вы отправляете в StatsHouse больше рядов данных, чем вам разрешено. Вы можете либо уменьшить объём отправляемых данных (1–3), либо увеличить бюджет (4).
- Минимизируйте кардинальность — количество значений тегов. Количество самих тегов не так важно, их и так не очень много. Важнее то, сколько разных значений может принимать каждый тег.
Не используйте userID
или hostname
в качестве значения тега. Используйте в качестве значений более крупные
категории.
Делите пользователей не по персональному идентификатору, а по региону, платформе и т.п.
Хосты можно делить не по имени, а по датацентру, кластеру и т.п.
- Учтите тип метрики — от него зависит объём отправляемых данных:
- метрики типа counter занимают меньший объём по сравнению с метриками типа value;
- включение перцентилей увеличивает объём данных — это может привести к усилению семплирования.
- Уменьшите разрешение метрики. Узнайте, как это сделать.
- Увеличьте бюджет. Настроить бюджет для отдельных метрик (а также групп и неймспейсов) могут администраторы StatsHouse. Не злоупотребляйте этой возможностью.