Add a once-a-day anonymous heartbeat (PostHog) so maintainers can see active installs and version/OS breakdowns. Self-hosted friendly: opt out via TELEMETRY_ENABLED in .env or the Admin -> System toggle (applied without a restart), or by clearing the endpoint/key. - Share version resolution in bot/utils/app_version.py so the admin sidebar and the beacon report the same build version - TelemetryWorker sends an opaque install id plus coarse facts only (version, OS/arch, python, locale, enabled providers, user-count range); never tokens, domains or user data - Register the worker in main_worker.py behind a Redis single-flight lock - Expose TELEMETRY_* settings and an Admin -> System manifest toggle - Document the payload and opt-out in docs/configuration/telemetry.md - Cover bucketing, payload shape and anonymity with tests
4.4 KiB
Анонимная телеметрия установок
Чтобы понимать, сколько инсталляций активно и какие версии используются, бот может раз в сутки отправлять один полностью обезличенный «heartbeat». Телеметрия задумана как self-hosted friendly: её легко выключить, она не содержит персональных данных и не мешает работе бота.
Что отправляется
Каждый сигнал — это случайный непривязанный идентификатор установки плюс грубые факты об окружении:
| Поле | Пример | Назначение |
|---|---|---|
installation_id |
f47ac10b-... (UUIDv4) |
Случайный идентификатор установки. Генерируется один раз, хранится в БД. Не выводится из токена, домена или ID администраторов. |
app_version |
v3.4.6+gabc1234 |
Полная версия сборки. |
app_version_tag |
v3.4.6 |
Релизный тег для разбивки по версиям. |
os / arch |
linux / x86_64 |
Платформа. |
python_version |
3.12.7 |
Версия рантайма. |
locale |
ru |
Язык по умолчанию. |
payment_providers |
["stars", "yookassa"] |
Идентификаторы включённых платёжных провайдеров (без ключей и секретов). |
users_bucket |
51-200 |
Число пользователей в виде диапазона, не точное значение. |
webapp_enabled / panel_configured |
true |
Флаги конфигурации. |
Время приёма (last_seen) проставляет коллектор. «Активные установки» = уникальные installation_id, от которых сигнал приходил за последние ~48 часов; «разбивка по версиям» = последняя версия на каждую установку.
Чего там нет
Никогда не отправляются: токен бота, домены, URL вебхуков, ключи платёжных систем и Remnawave, ID или данные пользователей, точное число пользователей, какой-либо контент.
Как выключить
Достаточно любого из способов:
.env:TELEMETRY_ENABLED=False, затем перезапуск.- Веб-админка:
Admin → System → «Анонимная статистика установки». Переключатель применяется без перезапуска (читается из БД на каждом тике). - Сборка/образ: оставить пустыми
TELEMETRY_ENDPOINTилиTELEMETRY_API_KEY— без точки доставки беакон не запускается.
Доставка
Беакон шлёт POST {TELEMETRY_ENDPOINT}/capture/ в формате PostHog ({api_key, event, distinct_id, properties}). Доставка строго fire-and-forget: таймаут 10 секунд, любые ошибки проглатываются и логируются на уровне debug — телеметрия не может задержать или уронить воркер. При нескольких репликах воркера за интервал отправляет только одна (через Redis-lock).
Переменные окружения
| Переменная | По умолчанию | Назначение |
|---|---|---|
TELEMETRY_ENABLED |
True |
Главный переключатель (opt-out). Дублируется тогглом в админке. |
TELEMETRY_ENDPOINT |
https://eu.i.posthog.com |
Хост приёма PostHog. Пусто — телеметрия выключена. |
TELEMETRY_API_KEY |
пусто | Project API key PostHog (phc_...). Это write-only ключ ingest, его безопасно зашивать в образ. Пусто — телеметрия выключена. |
TELEMETRY_INTERVAL_HOURS |
24 |
Интервал между сигналами. |