Перейти к основному содержимому

Dev-сервер писал телеметрию в продакшн-базу аналитики. Ошибка распространённая и на редкость коварная — из-за того, в какую сторону она смещает числа.

Искажение, которое льстит

Dev-замеры приходят с localhost: без сети, без TLS, без холодного старта. Они не дают симметричного шума вокруг истины — они тянут вниз каждый процентиль задержки. За одно 30-дневное окно 72% замеров оказались dev-строками, и время до первого байта читалось куда лучше реальности.

Показывалось (все замеры) 1051 ms
На самом деле (продакшн-поток) 1431 ms

Различитель

Не понадобилось ни отдельной колонки, ни обратного заполнения. Сборка с атрибуцией записывает CSS-селектор элемента, на который она указала, а формат scope-классов Svelte различается между сборками — значит, каждый замер уже несёт отпечаток породившей его сборки.

Dev-сервер nav.flex-1.overflow-y-auto.p-2.s-Xv7_7mcdkQaC.scrollbar-nav
Продакшн nav.flex-1.overflow-y-auto.p-2.scrollbar-nav.svelte-1e55qdy

Dev-шаблон закреплён так, что не может совпасть с продакшн-префиксом: сразу после s требуется дефис, а в svelte- там стоит v. Шаблон, попадающий в оба, отфильтровал бы все настоящие замеры и показал бы пустой продакшн-поток на совершенно здоровом деплое.

Живое разделение

Классификация за последние 30 дней собственной телеметрии этого сайта. Сессия с любым dev-маркером считается dev: потерять настоящую сессию — это минус один замер, оставить dev-сессию — это точность каждого процентиля, в который она попадёт.

Продакшн 65 (сессий: 10) Не определено 17 (сессий: 4)

Что отсюда обобщается

Починить источник необходимо, но недостаточно. Долговечной починку делает фильтр на чтении:

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

Думаете, этот паттерн можно сделать лучше? Расскажите как.

Оставить отзыв