Продуктовые счётчики и дашборд воронки #3491
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3491
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/3471-product-metrics-dashboard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Зачем
Мониторинг видел только инфраструктуру. Сколько прошло оценок, лидов, входов и обращений в поддержку, было видно лишь запросом в базу.
Откуда взят список
Из таблицы
user_eventsна проде:estimate_request294,login290,login_success97,login_failed453. Счётчики повторяют реально происходящие события, а не воображаемые.Счётчики
Мера: оценки с исходом, подсказки адреса, выгруженные отчёты, лиды, сообщения в поддержку по каналу, входы по результату.
Птица: выгрузки отчётов по формату.
Все лейблы — фиксированные литералы из места вызова. Ни имени пользователя, ни адреса, ни идентификатора оценки, ни кадастрового номера в кардинальность не попадает.
Дашборд
ops/metrics/grafana/dashboards/product.json, uidgendesign-product. Воронка Меры и форматы выгрузок Птицы, часовые окна. Provisioning общий сapps.json, каталог сканируется целиком.Test plan
backend/tests/test_3471_product_metrics.pyиtradein-mvp/backend/tests/test_3471_product_metrics.py— 8/8 и 14/14 в настоящих окруженияхappsв Alloy нет фильтра по имени метрики, новые ряды пройдут без правок/metricsобоих бэкендов отдаёт новые ряды, панели рисуютсяRefs #3471
🤖 Generated with Claude Code
https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
Владелец попросил вывести продукт в Графану — до этого там были только технические панели (запросы/латентность/память). Список счётчиков взят из реально пишущихся событий, а не выдуман: Мера (tradein-mvp/backend/app/observability/metrics.py): - mera_estimates_total{outcome=ok|insufficient_data} — POST /estimate, зеркалит user_events.event_type=estimate_request (294 строки в БД), insufficient_data — не ошибка, а исход без аналогов. - mera_address_suggestions_total{found=yes|no} — GET /geocode/suggest, своего user_events-события у ручки не было. - mera_reports_exported_total (без лейблов) — GET /estimate/{id}/pdf. - mera_leads_total (без лейблов) — POST /trade-in/lead. - mera_support_messages_total{channel=web|anon} — POST /support/messages и /support/anon/messages, счётчик после успешной доставки в Telegram. - mera_logins_total{result=success|failed} — рядом с user_events login_success/login_failed в auth.py (97/453 строк в БД). Птица (backend/app/observability/metrics.py): - sitefinder_reports_exported_total{format} — GET .../forecast/export (md/json/tg/docx/pptx/pdf) и POST .../best-layouts/pdf. Метки везде — фиксированный литерал из места вызова (outcome/found/channel/ result/format), никогда username/адрес/estimate_id/кадастровый номер — это ровно то, что взрывает кардинальность ряда у Prometheus. Дашборд ops/metrics/grafana/dashboards/product.json ("Продуктовые метрики", uid gendesign-product) — воронка Меры (оценки/подсказки/лиды/отчёты/входы/ поддержка) + экспорт форматов Птицы, часовые increase()-панели без стекирования (на соседней панели оно уже давало ложную тревогу, PR #3474). Provisioning тот же, что у apps.json — сканирует директорию, отдельного конфига не нужно. ops/metrics/alloy/alloy-apps.alloy проверен: у job "apps" нет relabel- фильтра по __name__ (в отличие от cadvisor) — новые счётчики уходят в remote_write как есть, правки не потребовалось. Refs #3471