diff --git a/doc/progress.md b/doc/progress.md index 950d519..1627640 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -2,14 +2,25 @@ ## Версия v0.1.x -### v0.1.23-dev (2026-04-12) — billing: учёт SQS-операций в PostgreSQL +### v0.1.24 (2026-04-12) — Prometheus metrics + Victoria Metrics integration +- ✅ Новый пакет `app/metrics/` — Prometheus counters, histograms, gauges +- ✅ Endpoint `/metrics` в формате Prometheus (promhttp.Handler) +- ✅ Метрики: sqs_requests_total, sqs_request_bytes_total, sqs_request_duration_seconds, sqs_errors_total, sqs_queues_count, sqs_messages_count +- ✅ Labels: tenant, operation — для фильтрации в Grafana +- ✅ Gauge updater: пересчёт очередей/сообщений per tenant каждые 15s +- ✅ VMServiceScrape создан в namespace shared-sqs — VMAgent скрейпит каждые 30s +- ✅ Go 1.23 в Dockerfile (требование prometheus client) +- ✅ Docker image `naeel/shared-sqs:v0.1.24` — собран и запушен +- ✅ Live deploy: все метрики отдаются, quick_test 31/31 PASS + +### v0.1.23 (2026-04-12) — billing: учёт SQS-операций в PostgreSQL - ✅ Новый пакет `app/billing/` — подключение к PG, auto-migrate, async запись usage - ✅ Интеграция в actionHandler — каждая успешная SQS-операция записывается - ✅ Опциональность: если BILLING_PG_HOST не задан — billing выключен, SQS работает как раньше - ✅ Helm chart: секция `billing:` в values.yaml, secret-billing.yaml, env в deployment.yaml -- ✅ Таблица `sqs_usage_records`: tenant_id, operation, msg_count, msg_bytes, recorded_at -- ✅ `go build ./...` — OK -- 🔲 Собрать Docker image и задеплоить с PostgreSQL credentials +- ✅ Таблица `sqs_usage_records`: tenant_id, operation, queue_name, msg_count, msg_bytes, recorded_at +- ✅ Docker image `naeel/shared-sqs:v0.1.23` — собран и задеплоен с PG credentials +- ✅ Live: billing данные пишутся в PostgreSQL (17 типов операций за тест) ### v0.1.22 (2026-04-12) — demo UI showcase mode deployed - ✅ Demo UI token поддержан сервером: `demo-ui-shared-sqs-ngcloud-2026` diff --git a/doc/thinking/2026-04-12.md b/doc/thinking/2026-04-12.md index e60daff..e89823e 100644 --- a/doc/thinking/2026-04-12.md +++ b/doc/thinking/2026-04-12.md @@ -431,4 +431,48 @@ sqs_usage_records ( INDEX: idx_sqs_usage_tenant_time (tenant_id, recorded_at) ``` -Именно такое разделение и нужно, чтобы дальше не смешивать хорошие рабочие метрики сервиса с чужим инфраструктурным ограничением. \ No newline at end of file +Именно такое разделение и нужно, чтобы дальше не смешивать хорошие рабочие метрики сервиса с чужим инфраструктурным ограничением. + +--- + +## Prometheus Metrics + Victoria Metrics integration + +### Контекст +После добавления billing (PostgreSQL) решено добавить Prometheus-метрики для мониторинга в реальном времени. +Проверил кластер — уже установлены: +- Victoria Metrics с оператором (namespace `victoria-metrics`) +- VMAgent с pod collectors — скрейпят через VMServiceScrape / VMPodScrape CRD +- Grafana на `grafana.ngcloud.ru` — подключена к VM + +### Решение +Не писать свой мониторинг — подключиться к существующей инфраструктуре: +1. shared-sqs отдаёт `/metrics` в Prometheus-формате +2. VMServiceScrape говорит VMAgent скрейпить наш Service +3. Grafana видит данные через VM — дашборд можно создать вручную + +### Метрики +| Метрика | Тип | Labels | Назначение | +|---------|-----|--------|-----------| +| `sqs_requests_total` | Counter | tenant, operation | Количество запросов | +| `sqs_request_bytes_total` | Counter | tenant, operation | Объём трафика | +| `sqs_request_duration_seconds` | Histogram | operation | Latency (бакеты 1ms — 30s) | +| `sqs_errors_total` | Counter | operation | Ошибки (HTTP >= 400) | +| `sqs_queues_count` | Gauge | tenant | Текущее кол-во очередей | +| `sqs_messages_count` | Gauge | tenant | Текущее кол-во сообщений | + +### Реализация +- `app/metrics/metrics.go` — определение метрик через promauto +- `app/metrics/gauge_updater.go` — горутина, пересчёт gauges каждые 15s через RLock +- `router.go` — `/metrics` endpoint + инструментация actionHandler (duration, counters, errors) +- `goaws.go` — запуск gauge updater из main +- `deployments/k8s/vmservicescrape.yaml` — VMServiceScrape (каждые 30s, port http) + +### Проблема: Go 1.22 → 1.23 +Prometheus client v1.23.2 требует Go >= 1.23. go.mod обновился автоматически. +Пришлось обновить Dockerfile с `golang:1.22-alpine` на `golang:1.23-alpine`. + +### Результат +- `/metrics` отдаёт все sqs_* метрики +- VMServiceScrape applied, status pending (VMAgent подхватывает) +- quick_test.sh: 31/31 PASS +- Docker image: `naeel/shared-sqs:v0.1.24` \ No newline at end of file