Программа курса

Модуль 05 / Урок 19 из 27

Сэмплирование и стоимость в проде

Теория и практика

Сэмплирование — главный регулятор «цены трассировки». В этом уроке — экономика: сколько стоит трейс, как выставить бюджет и какие политикой его соблюсти.

Математика объёма

Средний спан в хранилище — 0.5–1 КБ (индексы + документ). Формула суточного объёма:

Объём/сутки ≈ RPS × спанов_на_трейс × сэмпл_% × 1КБ × 86400
СценарийRPSСпанов/трейсСэмплГБ/сутки
Микросервисный прод1 000201%~1.7
Тот же, 100%1 00020100%~170
Крупный прод10 000301%~26
Крупный, 10%10 0003010%~260

Хранилище с retention 7 дней при 26 ГБ/сутки — уже ~180 ГБ только «горячего» индекса. Отсюда правило: решайте сэмплирование бюджетом, а не вкусом: «у меня есть 200 ГБ на трейсы, значит бюджет = X трейсов/сек».

Политика в проде (типовая)

  • Корневой сэмплер: probabilistic 1–10% от общего трафика (или adaptive);
  • Обязательно 100% для: запросов с ошибками — увы, head-based этого не умеет (решение ещё неизвестно) — это работа tail-сэмплирования (урок 5.2);
  • Малые сервисы: не давите одинаковым процентом — 5% от 3 RPS = мёртвые данные; ставьте им ratelimit (например, 10 трейсов/сек) или 100%;
  • Фоновые задачи: свой (обычно более щедрый) сэмплер — их мало, а разбирать хочется все.

Инструменты снижения объёма без потери ценности

  • Фильтрация шума до записи: healthchecks, роботы, дубли — процессор filter (урок 3.2);
  • Меньше атрибутов-балласта: полные SQL-тексты и URL — главные раздуватели спанов;
  • Retention по этажам: 7 дней полного индекса + 30 дней «архива» только корневых спанов — зависит от хранилища (урок 5.3);
  • Сжатие: OTLP-экспорт уже сжимает (gRPC+zlib); на уровне Kafka — compressor.

Частые ошибки стоимости

ОшибкаСимптом
Один сэмплер на все сервисы «1%»малые сервисы пустые, большие переполнены
always_on в проде «на время отладки»ES не влезает, UI умирает; забыли выключить
Теги с высокой карточностьюиндексы растут быстрее спанов
Бесконечный retentionдисковая катастрофа через полгода
Двойное сэмплирование (SDK и Collector независимо)непредсказуемый итоговый процент

Практика

  1. Посчитайте объём для своего приложения: RPS × спанов/трейс (возьмите из реального трейса) × 1% × 1КБ. Сравните с доступным местом.
  2. Задайте каждому сервису свой сэмплер: тяжёлому — 2%, малому — ratelimit 5/с. Проверьте в UI, что оба дают полезные трейсы.
  3. Сымитируйте «забыли выключить always_on»: замерьте рост хранилища за 10 минут под нагрузкой и посчитайте, через сколько дней закончится диск.
Мини-квиз

1. Почему head-based не может «все ошибки»? — Решение принимается до начала запроса: об исходе ещё ничего не известно.

2. Что не так с «5% для всех»? — Игнорирует профиль трафика: малым сервисам мало, большим — много; считать надо трейсы/сек.

3. Первые два подозреваемых при взрывном росте хранилища? — Кто-то включил always_on; появились атрибуты с высокой карточностью.