> ## Documentation Index
> Fetch the complete documentation index at: https://omniflow-vpn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Анонимная телеметрия

> Какое именно событие отправляет Omniflow, зачем оно нужно, как это проверить и как всё выключить

Раз в сутки процесс API отправляет один HTTPS-запрос коллектору проекта. В нём — анонимный
идентификатор установки, версия сборки, имя сервиса, операционная система и архитектура
процессора. Больше ничего. Он включён по умолчанию, никогда ничего не блокирует, и одна
переменная окружения останавливает все запросы.

Телеметрия существует потому, что Omniflow разворачивается самостоятельно, а значит,
у сопровождающих иначе нет никакого представления о том, какие платформы и версии реально
используются. Знание о том, что сборка работает на `linux/arm64`, решает, будет ли эта
архитектура и дальше получать релизные образы. Знание о том, какие версии ещё живы,
решает, как долго поддерживается базовая линия миграций. Ни одному из этих вопросов не
нужны ни клиент, ни сумма, ни домен, — поэтому ничего из этого не собирается.

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

Вот полное тело JSON, поле за полем:

```json theme={null}
{
  "schema": 1,
  "installation_id": "0195f3c9-2b47-7a10-9f2c-4c1a6c9b2d55",
  "name": "installation.heartbeat",
  "version": "dev",
  "service": "api",
  "os": "linux",
  "architecture": "amd64",
  "occurred_at": "2026-08-13T03:14:07Z"
}
```

| Поле | Значение | Примечания |
| - | - | - |
| `schema` | всегда `1` | Версия конверта. Всё остальное коллектор отклоняет. |
| `installation_id` | UUID | Разрешается один раз из единственной строки `telemetry_installation`. Он опознаёт установку для неё самой во времени — и больше ни для чего. |
| `name` | всегда `installation.heartbeat` | Единственное событие, которое конструирует хоть какой-то процесс Omniflow. |
| `version` | версия сборки | Всегда `dev`, в том числе в выпущенных образах, — ни одна сборка не проставляет версию в бинарники. |
| `service` | всегда `api` | Отправляет только процесс API. Бот и воркер никогда не конструируют клиент телеметрии. |
| `os` | `GOOS` | `linux`, `darwin`, … |
| `architecture` | `GOARCH` | `amd64`, `arm64`, … |
| `occurred_at` | RFC 3339 UTC | Момент, в который событие было построено. |

Формат передачи объявляет также необязательные словари `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`.

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

```bash theme={null}
APP_TELEMETRY_ENABLED=false
```

Перезапустите API. Ничто не перечитывает окружение, поэтому изменение вступает в силу при
следующем старте и не раньше.

Убедитесь в этом по логу API. При каждом старте процесс логирует ровно одно из:

```text theme={null}
level=INFO msg="anonymous telemetry enabled" disable_with=APP_TELEMETRY_ENABLED=false
level=INFO msg="anonymous telemetry disabled"
```

Эта строка лога — авторитетное утверждение о том, что делает эта установка.

> [!WARNING]
>
> Карточка предпросмотра телеметрии в панели на `/admin/settings/operations` читает своё состояние
> вкл/выкл из раздела настроек `telemetry`, который на свежей установке пуст, — поэтому
> карточка показывает `enabled: false`, пока API отправляет сигналы, ведь
> `APP_TELEMETRY_ENABLED` по умолчанию равна `true`. Карточка к тому же отрисовывает
> другой набор полей, чем событие выше. Доверяйте стартовому логу и этой странице, а не
> карточке. См.
> [Настройки установки](https://omniflow-vpn.mintlify.site/ru/operations/installation-settings.md).

Неразбираемое значение откатывается на значение по умолчанию. `APP_TELEMETRY_ENABLED=nope`
означает «включено», а не «выключено», — пишите именно `false`.

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

| Переменная | По умолчанию | Назначение |
| - | - | - |
| `APP_TELEMETRY_ENABLED` | `true` | Стартует ли горутина сигнала вообще. Читается только API. |
| `APP_TELEMETRY_ENDPOINT` | `https://telemetry.omniflw.xyz/v1/telemetry/events` | Куда отправляется событие. Должен разбираться и обязан быть **HTTPS**, когда телеметрия включена, иначе API завершается на старте с `APP_TELEMETRY_ENDPOINT must be an HTTPS URL`. |
| `APP_TELEMETRY_COLLECTOR_ENABLED` | `false` | Превращает эту установку в коллектор. См. ниже. |
| `APP_RETENTION_TELEMETRY_DAYS` | `30` | Как долго **коллектор** хранит строки в собственной таблице `telemetry_events`, прежде чем их уберёт проход очистки в воркере. |

Форки, которым нужны собственные числа, задают `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 час в будущем

| Ответ | Значение |
| - | - |
| `202` | Сохранено. |
| `400 invalid telemetry event` | Не прошло любую из проверок выше. |
| `503 collector unavailable` | Пул коллектора не удалось открыть. |

Строгость намеренна: коллектор принимает поступления от установок, которые он не
контролирует, поэтому неограниченный словарь или строка в свободной форме были бы
поверхностью для инъекции, а не единицей данных. `feature.usage` принимается валидатором и
не порождается ничем, поэтому коллектор увидит от самого Omniflow только сигналы.

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

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

> **[Настройки установки](https://omniflow-vpn.mintlify.site/ru/operations/installation-settings.md)**
>
> Почему карточка телеметрии в панели и работающая конфигурация могут расходиться.

> **[Безопасность](https://omniflow-vpn.mintlify.site/ru/operations/security.md)**
>
> Более широкая позиция по приватности: редактирование, секреты и то, что не покидает установку.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.