Телеметрия использования: usage_telemetry

Для разработчиков. Состояние на 28.09.2026. Подробности и переменные — README репозитория usage_telemetry. Выкатка коллектора и дашборд лежат в репозитории infra, про него — статья «Мониторинг и автоматизация серверов: infra».

Коротко

usage_telemetry отвечает на вопрос, какими приложениями и какими их разделами пользуются живые люди. Цель — отличить приложение, которое висит мёртвым грузом, от приложения, которым пользуются редко, но по делу, и выключать только первое. Проект состоит из двух частей:

Результат смотрят в Grafana, на дашборде «Использование приложений».

приложение (middleware) ──пачками по HTTP──> коллектор ──> PostgreSQL ──> Grafana

Как подключить к проекту

  1. Добавить пакет в requirements.txt (или в pyproject.toml), закрепив тег:
    usage-telemetry @ https://github.com/Buharestskie/usage_telemetry/archive/refs/tags/v0.2.0.tar.gz
    Для отправки ошибок в GlitchTip нужен ещё sentry-sdk (extra sentry).
  2. Повесить сбор на приложение FastAPI или Starlette:
    from usage_telemetry import install_telemetry
    
    app = FastAPI()
    install_telemetry(app)
    Если задан SENTRY_DSN, install_telemetry заодно инициализирует GlitchTip. Если в проекте SDK уже поднят своим кодом, вызывайте install_telemetry(app, sentry=False).
  3. Сообщить, кто пришёл. В зависимости авторизации, где сессия или токен уже разобраны:
    from usage_telemetry import mark_user
    
    mark_user(request, user_id=session.amocrm_user_id, auth="session", session_id=session_id)
    Значения auth: session — человек в браузере; jwt — виджет amoCRM с токеном от widget_auth; telegram — бот или Mini App; basic — админки; api_key — вызов между сервисами; none — без авторизации. Без mark_user вид входа угадывается по заголовкам, но идентификатора пользователя не будет.
  4. Для бота на aiogram 3:
    from usage_telemetry import install_bot_telemetry
    
    install_bot_telemetry(dispatcher)
  5. Добавить переменные в compose проекта и выкатить в окне обслуживания.
ПеременнаяОбязательнаЧто означает
TELEMETRY_SERVICEдамашинный код приложения. Должен совпадать с project этого сервиса в status_page_services (infra)
TELEMETRY_URLдаадрес коллектора. Приложения на одном сервере с коллектором используют http://host.docker.internal:8130, с других серверов — https://donula26.ru/telemetry
TELEMETRY_ENABLEDнет0 выключает сбор целиком
TELEMETRY_QUEUE_SIZE, TELEMETRY_BATCH_SIZE, TELEMETRY_FLUSH_SECONDS, TELEMETRY_TIMEOUTнеточередь (5000), размер пачки (200), интервал отправки неполной пачки (5 с), таймаут запроса (3 с)
SENTRY_DSNнетпроект в GlitchTip; без него ошибки не отправляются

Если не задан TELEMETRY_SERVICE или TELEMETRY_URL, пакет пишет предупреждение в лог и ничего не собирает. Приложение при этом работает как обычно.

Что собирается

Одно событие на одно обращение к приложению:

ПолеЧто в нём
at, service, sourceвремя, код приложения, источник: http или bot
method, pathметод и шаблон пути из маршрута (/api/deals/{id}, а не /api/deals/451). Если маршрута нет, путь нормализуется: числа заменяются на {id}, UUID — на {uuid}, длинные непрозрачные сегменты — на {token}
status, duration_msкод ответа и длительность
auth, user_id, session_idчем запрос аутентифицирован и чей идентификатор из уже существующей авторизации: amocrm_user_id, id из JWT, telegram_id
user_agentпервые 200 символов
client_ipдоходит только до коллектора. Там из него, user-agent и общей соли считается отпечаток посетителя, а сам адрес не сохраняется

Как устроено внутри

Где смотреть

Grafana, grafana.donula26.ru → папка «Инфраструктура» → дашборд «Использование приложений». Период по умолчанию — 30 дней.

ПанельЧто показывает
Приложений под наблюдениемсколько приложений в справочнике
Сбор не раскатанприложения, от которых не пришло ни одного события. Пока здесь не ноль, выводы о неиспользуемых делать рано
Без единого обращения за периодсбор работает, а обращений не было — кандидаты на выключение
Приложения по живостиглавная таблица: обращения, люди, посетители (оценка), человеко-дни, последний заход и замечание: «сбор не подключён», «никто не заходил», «люди не опознаются» или «только оценка по отпечатку»
Человеко-дни по приложениямграфик по дням
Разделы и данныеразделы выбранного приложения (переменная «Приложение»)
Кто пользуетсяидентификаторы пользователей выбранного приложения, без имён: нужны, чтобы предупредить людей перед выключением
Медленное и ошибающеесяразделы с ошибками или с 95-м перцентилем больше 3 секунд

Дашборд генерируется скриптом roles/monitoring_server/files/dashboards/generate_usage.py в infra. В браузере он не редактируется.

Выкатка

На что наступают


Версия #1
Admin создал 2026-09-28 08:25:29 UTC
Admin обновил 2026-09-28 08:25:29 UTC