Skip to main content
Раз в сутки процесс API отправляет один HTTPS-запрос коллектору проекта. В нём — анонимный идентификатор установки, версия сборки, имя сервиса, операционная система и архитектура процессора. Больше ничего. Он включён по умолчанию, никогда ничего не блокирует, и одна переменная окружения останавливает все запросы. Телеметрия существует потому, что Omniflow разворачивается самостоятельно, а значит, у сопровождающих иначе нет никакого представления о том, какие платформы и версии реально используются. Знание о том, что сборка работает на linux/arm64, решает, будет ли эта архитектура и дальше получать релизные образы. Знание о том, какие версии ещё живы, решает, как долго поддерживается базовая линия миграций. Ни одному из этих вопросов не нужны ни клиент, ни сумма, ни домен, — поэтому ничего из этого не собирается.

Точный вид события

Вот полное тело JSON, поле за полем:
Формат передачи объявляет также необязательные словари features и counters. Ни один процесс Omniflow их не заполняет, поэтому в каждом запросе они опущены. В том, что отправляется сегодня, нет ни перечня модулей, ни счётчика использования; если это изменится, эта страница и публичная схема изменятся в одном и том же релизе.

Что не собирается никогда

  • Идентификаторы клиентов, Telegram ID, имена пользователей и адреса электронной почты
  • IP-адреса, имена хостов, домены и URL
  • Суммы платежей, валюты, балансы кошельков, выручка и полезные нагрузки провайдеров
  • Трафик VPN, ссылки доступа, URL подписок, ноды и идентификаторы устройств
  • Токены, секреты, содержимое сообщений, названия тарифов, тексты обращений и любые другие данные в свободной форме
  • Количества строк любого рода — число, достаточно маленькое, чтобы опознать установку, является идентификатором

Тайминг и поведение при сбоях

Один сигнал уходит сразу при старте API, затем по одному каждые 24 часа. У HTTP-клиента тайм-аут 5 секунд, а отправитель отбрасывает результат: ответ не из класса 2xx, отказ DNS и недоступный коллектор обрабатываются одинаково, то есть игнорируются. Телеметрия никогда не может заблокировать ни старт, ни запрос, ни задачу, ни завершение работы, а защита через sync.Once означает, что она стартует не более одного раза на процесс. Если API не может прочитать или создать строку установки — нет APP_DATABASE_URL либо база данных недоступна на старте, — он использует случайный UUID на время жизни этого процесса и логирует telemetry installation ID is ephemeral.

Как это выключить

Перезапустите API. Ничто не перечитывает окружение, поэтому изменение вступает в силу при следующем старте и не раньше. Убедитесь в этом по логу API. При каждом старте процесс логирует ровно одно из:
Эта строка лога — авторитетное утверждение о том, что делает эта установка.
Карточка предпросмотра телеметрии в панели на /admin/settings/operations читает своё состояние вкл/выкл из раздела настроек telemetry, который на свежей установке пуст, — поэтому карточка показывает enabled: false, пока API отправляет сигналы, ведь APP_TELEMETRY_ENABLED по умолчанию равна true. Карточка к тому же отрисовывает другой набор полей, чем событие выше. Доверяйте стартовому логу и этой странице, а не карточке. См. Настройки установки.
Неразбираемое значение откатывается на значение по умолчанию. APP_TELEMETRY_ENABLED=nope означает «включено», а не «выключено», — пишите именно false.

Конфигурация

Форки, которым нужны собственные числа, задают APP_TELEMETRY_ENDPOINT на HTTPS-коллектор, который они контролируют. Эндпоинт проверяется на старте, а не в момент отправки, поэтому опечатка — это отказ загрузиться, а не год тихо потерянных событий.

Как запустить коллектор

APP_TELEMETRY_COLLECTOR_ENABLED=true монтирует POST /v1/telemetry/events на этой установке и открывает второй пул к базе данных на запись. На обычной установке этого маршрута не существует — поэтому на ней нечего закрывать файрволом. Каждое поступление проверяется до сохранения, и событие, не прошедшее любую из проверок, отклоняется целиком:
  • тело ограничено 64 КиБ, а неизвестные поля JSON отвергаются сразу
  • schema должна быть 1, а installation_id — ровно 36 символов
  • name должно быть installation.heartbeat или feature.usage
  • version ≤ 32, service ≤ 16, os ≤ 32, architecture ≤ 32 символов
  • не более 64 features и 64 counters, каждый ключ ≤ 64 символов из [a-z0-9._]
  • occurred_at должно быть ненулевым, не старше 7 дней и не более чем на 1 час в будущем
Строгость намеренна: коллектор принимает поступления от установок, которые он не контролирует, поэтому неограниченный словарь или строка в свободной форме были бы поверхностью для инъекции, а не единицей данных. feature.usage принимается валидатором и не порождается ничем, поэтому коллектор увидит от самого Omniflow только сигналы. Коллектор ежедневным циклом удаляет собственные строки старше 180 дней, независимо от прохода очистки в воркере. Сопровождающие используют агрегированные тренды по установкам и платформам для решений о совместимости и дорожной карте. Сырые события не продаются и не передаются для рекламы.

Связанные страницы

Настройки установки

Почему карточка телеметрии в панели и работающая конфигурация могут расходиться.

Безопасность

Более широкая позиция по приватности: редактирование, секреты и то, что не покидает установку.