QueryPort

Счётчик включили вчера — его числам ещё нельзя верить

Свежий счётчик показывает числа, похожие на живой трафик: страницы отвечают 200, тесты зелёные, панель заполнена. У нас он соврал четыре раза подряд. Разбираем каждую ложь и даём инструмент, который скажет, каким выводам ваши данные служить не могут.

Потому что счётчик, который только что включили, показывает не трафик, а собственную настройку. Числа при этом выглядят живыми: страницы отвечают 200, набор из 607 тестов зелёный, панель заполнена. Отличить одно от другого можно только замером, и замер надо сделать самому — снаружи это состояние неотличимо от рабочего.

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

Четыре лжи одного счётчика

замер

3 запроса к одной странице

показал: 1 попадание
правда: 3

Строка учёта стояла ПОСЛЕ инициализации кэша, а кэш отдаёт готовую страницу и на этом завершает запрос. До счётчика доходили только промахи кэша — то есть счётчик показывал тем меньше, чем лучше работал кэш.

замер

5 запросов одним клиентом, один User-Agent

показал: 3 «посетителя»
правда: 1

Отпечаток посетителя строился из адреса соединения. За обратным прокси это адрес края сети, и он меняется от соединения к соединению. Ошибка даёт не «всех в одного», а обратное: одного человека во многих.

замер

первые 4 запроса после включения

показал: 4 «посетителя»
правда: 1

Соль отпечатка создавалась при первом обращении. Четыре одновременных запроса не нашли файла соли, каждый выдумал свою и записал — и каждый получил своего «посетителя».

замер

прогон тестов

показал: боевой файл счётчика с 53 обращениями
правда: 0

Список подменяемых путей жил в одном каркасе, а свои дев-серверы поднимают ещё два теста. Они собирали окружение сами и писали мимо подмены — прямо в боевой файл.

Почему это враньё выглядит успехом

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

То есть у свежего счётчика нет даже понятного направления ошибки: он умеет занижать и завышать одновременно, разными механизмами. Пока не сделан замер, неизвестно, в какую сторону смотрит число, а значит любое сравнение «стало больше — стало меньше» на этих данных бессмысленно.

Что из этого следует для любого своего счётчика

  • Счётчик обязан стоять ДО кэша. Иначе он показывает тем меньше, чем лучше работает кэш, и расхождение с чужой аналитикой объяснить будет нечем: оба ряда «правильные», а различаются вдвое.
  • Адрес посетителя за прокси — не адрес соединения. Проверяется это ровно одним действием: N одинаковых запросов одним клиентом обязаны дать одного посетителя и N попаданий.
  • Ленивая инициализация секрета — гонка на первом же трафике. Соль, ключ, идентификатор установки: если он создаётся «когда понадобится», первые одновременные запросы создадут по своему. Лечится перечитыванием файла ПОСЛЕ записи — тогда все сходятся на победившем значении.
  • Свой трафик исключается в одном месте на весь набор. Каждая служба с боевым файлом добавляет строку, и если мест запуска дев-сервера несколько, одно из них отстаёт молча. Сторож, который ищет нужную строку в тексте каркаса, тут бесполезен вдвойне: он краснеет на верной правке и зеленеет на сервере, который собрал окружение сам.

Третий дефект нельзя найти потом

Гонка при создании соли — дефект разовый. Он портит ровно те сутки, когда механизм включили, и больше не повторяется никогда: файл уже есть, и второй раз его никто не создаёт. Значит, испорченные сутки останутся в ряду навсегда, а причина к тому времени исчезнет из кода. Найти его можно только сразу — тем самым замером, который делают в день включения и обычно не делают.

Поверка, которую надо повторять

Три из четырёх дефектов ловятся одной строкой:

N одинаковых запросов одним клиентом
    → ровно N попаданий у ОДНОГО посетителя

Повторять её надо после любой правки порядка подключений: порядок здесь несёт смысл, а не стиль. Строка кэша, переставленная на две позиции, не ломает ни одного теста и меняет все числа сразу.

Это тот же класс, что ноль в отчёте

В соседнем разборе описан ноль, который значит «не измеряли», а выглядит как «не было». Здесь то же самое, только хуже замаскировано: числа не нулевые. Ноль хотя бы вызывает вопрос, а «3 посетителя» в первый день не вызывает никакого — это ровно то, чего от нового счётчика и ждёшь.

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

Ниже — инструмент, который считает это окно за вас. Он ничего не знает о вашем счётчике и никуда не обращается: считает по датам и по тому, что вы отметите.

Чему ваши данные сейчас служить не могут

Две даты и отметки о том, что уже сделано. Считает браузер: ни одного запроса наружу, ваш сайт инструмент не открывает и адреса не спрашивает.

Что уже сделано

Где инструмент перестаёт быть надёжным

  • Он верит отметкам на слово и вашего счётчика не видит. «Настроено» здесь значит «проверено замером»; настройка, включённая в панели, и настройка, которая работает, — разные вещи, и весь разбор выше ровно об этом.
  • Он не знает о событиях, которые заводят показателю новую дату начала помимо перечисленных: смена часового пояса, пересчёт задним числом, отсев роботов, выборочный сбор. Случилось такое — отсчёт начинается от него, а не от дня включения.
  • Даты он считает по календарю, а сутки берёт целыми. Если ваш счётчик режет сутки по другому поясу, границы дней сдвинутся, и на коротких периодах это заметно.
  • Он не заменяет поверку, а только спрашивает, делали ли вы её. Сделать её всё равно придётся руками — она и есть единственное, что здесь проверяет реальность.

Читать дальше

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

Как мы беремся за интеграцию · Рассказать свою задачу

Разбор подготовила QueryPort Engineering. Случай собственный, 10.08.2026, свой счётчик обращений. Нашли ошибку — напишите.