awesome-everything EN
↑ Обратно к восхождению

Наблюдаемость

Стратегии sampling и стоимость логов

Суть Success-path, pattern-based и tail-sampling — три рычага, которые держат счёт за логи пропорциональным инцидентам, а не объёму трафика.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 12 min

Команда включает структурное логирование. Через шесть недель счёт за логи втрое превышает счёт за compute. Каждый сервис, каждый запрос, каждая INFO-строка — индексируется и биллится. Логирование стоит дороже, чем обслуживание трафика. Сервис в порядке. Политики sampling нет.

Уравнение стоимости

Цена log-строки платится в трёх местах: на write-time (CPU + RAM на сериализацию), в транспорте (egress + ёмкость collector’а) и на backend’е (ingest-GB + indexed-event-count + retention-байты).

Скромный сервис, эмитящий одну log-строку на запрос, обрабатывает 1 MB/s при 1000 req/s — около 86 GB/день. По ценам хостируемых логов ($0.10/GB ingest плюс indexed-event cost), счёт быстро накапливается на десятках сервисов.

Нагрузка на сервисСуточный объёмЕжемесячная стоимость ingest
1000 req/s, 1 KB/лог~86 GB~$260 (один сервис)
То же, с 1-из-10 INFO sampling~10 GB~$30
10 сервисов по 1000 req/s~860 GB~$2600/месяц raw

Три стратегии sampling

Success-path sampling держит 1-из-N INFO-строк для high-volume успешных событий, сохраняя 100% WARN и ERROR. Типичный N — от 10 до 100. Это первый рычаг: он срезает INFO-объём на 90% без ущерба для forensics по ошибкам.

Pattern-based sampling держит каждый уникальный log-pattern на полной скорости и сэмплирует дубликаты. Vector и Fluent Bit поставляются с sampling-фильтрами, хешируемыми по шаблону message — так pattern «retry attempt 1 of 5» держится 1-из-100, а «payment_declined» (редкий) остаётся на 100%.

Tail sampling для логов повторяет trace-паттерн: буферизует логи окна запроса, затем решает по outcome — хранит все логи для failed-запросов, сэмплирует успешные. Это самая мощная стратегия, требующая stateful-буфера на tier’е collector’а. Она гарантирует нулевую потерю failure-контекста, избавляясь до 99% success-path-объёма.

Почему это работает

Tier pipeline (collector / agent) — правильное место для sampling, а не приложение. Sampling на collector’е держит application-код простым и позволяет platform-команде управлять политикой централизованно. Антипаттерн — запекать sampling в каждый сервис по отдельности: это фрагментирует политику и затрудняет консистентное изменение по парку.

Shipping-pipeline

Логи проходят три стадии: emit (приложение пишет JSON в stdout или logger SDK), collect (sidecar-агент или DaemonSet читает stdout, парсит JSON, батчует, применяет sampling), ship (OTLP-HTTP или native-протокол на backend).

Слой collector’а — Fluent Bit, Vector, OTel Collector с filelog-receiver — делает три вещи, которые не нужны в приложении: backpressure (буферизует на диск, если backend медленный), enrichment (прикрепляет resource-атрибуты из pod-метаданных), redaction (убирает PII-паттерны до отправки с хоста).

Продакшн-правило: emit JSON в stdout, остальное пусть делает платформа.

Retention tiering: горячий, тёплый, холодный

Indexed-log-хранение по $0.10-$1.00/GB-месяц слишком дорого для многомесячного retention в масштабе. Зрелые стеки tier’уют:

  • Hot (последние 7-15 дней, полный индекс, sub-second-запрос — Datadog Standard, Loki recent)
  • Warm (30-90 дней, частичный индекс или scan-only — Datadog Flex, Splunk Frozen-Searchable)
  • Cold (compliance-retention в S3 или эквиваленте по $0.023/GB-месяц, восстанавливается, но не query-ready напрямую)

Инцидент давностью до 7 дней работает против hot-tier с полной query-мощью. Расследование «что случилось 6 месяцев назад» требует warm-tier-запросов, которые могут занять минуты на сканирование и могут не иметь каждой dimension проиндексированной.

Структурные логи: цифры стоимости и ёмкости
Throughput pino (Node 24, 1 ядро)
~140k msg/сек
Throughput Winston (та же нагрузка)
~20k msg/сек
Типовой размер структурного лога
~0.5-2 KB
Сервис @ 1000 req/s, 1 лог/запрос
~86 GB / день
Datadog log ingest
~$0.10 / GB
Datadog indexed events (standard tier)
~$1.27 / миллион
Hot tier retention типовой
7-15 дней
Cold tier (S3) стоимость
~$0.023 / GB-месяц
Викторина

Команда применяет 1-из-10 sampling ко всем log-строкам, включая ERROR. В чём проблема?

Викторина

Что такое tail sampling для логов и чем он отличается от success-path sampling?

Расставь шаги по порядку

Упорядочь рычаги log cost-control от самого дешёвого к самому сложному в реализации:

  1. 1 Поставить INFO дефолтом в продакшне, выключить DEBUG глобально
  2. 2 Применить success-path sampling (1-из-10 INFO, 100% WARN/ERROR) в collector'е
  3. 3 Добавить pattern-based sampling для схлопывания болтливых дубликатов
  4. 4 Настроить retention tiering: hot 15d, warm 90d, cold S3
  5. 5 Реализовать tail sampling с per-request буферизацией в центральном collector-gateway
Вспомните перед уходом
  1. 01
    Сервис эмитит 1 KB JSON-логи при 1000 req/s. Каков приблизительный месячный ingest-счёт, и какой стандартный рычаг срезает его на 90% без потери failure-forensics?
  2. 02
    Почему sampling принадлежит tier'у collector'а, а не приложению?
  3. 03
    Что такое retention tiering и почему разделение hot/warm/cold важно для incident response?
Итог

Стоимость логов накапливается, потому что каждая структурная строка индексируется и биллится per-event и per-GB. Сервис на 1000 req/s эмитит ~86 GB/день — и у большинства парков десятки сервисов. Три sampling-рычага: success-path sampling (1-из-10 INFO, 100% WARN/ERROR) срезает объём на 90% без потери failure-контекста; pattern-based sampling схлопывает болтливые дубликаты на collector’е; tail sampling буферизует per-request-логи и хранит всё для failure, сэмплируя только success. Все три принадлежат tier’у collector’а для централизованного управления политикой. Дополни sampling retention tiering — hot (7-15d), warm (30-90d), cold (S3) — чтобы держать audit-trail без полного indexed-storage-счёта.

Связанные уроки
встречается в167
Продолжить восхождение ↑PII-редакция и log injection
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.