Спостережуваність (логи, метрики, помилки)
flowchart LR
subgraph aws[AWS]
api[Abitly API · ECS<br/>Prometheus /api/metrics]
front[Abitly Web · ECS<br/>/api/metrics]
ecs_logs[CloudWatch Logs<br/>/ecs/abitly-*]
lambda_logs[CloudWatch Logs<br/>/aws/lambda/*]
end
subgraph do[Digital Ocean Droplet]
prom[Prometheus<br/>scrape /api/metrics]
loki[Loki · 7-day retention]
graf[Grafana · dashboards]
end
subgraph tg[Telegram]
bot[abitly-logger bot]
chat[Log chat]
end
api -- метрики --> prom
front -- метрики --> prom
api -- помилки --> bot
front -- помилки --> bot
bot --> chat
prom --> graf
loki --> graf
api -- runtime stdout --> ecs_logs
front -- runtime stdout --> ecs_logs
Платформи
Section titled “Платформи”| Стек | Призначення | Хост |
|---|---|---|
| Prometheus + Loki + Grafana | метрики фронту/backend + лог-агрегація | DO Droplet (поточно), репо abitly-org/abitly-monitoring (docker-compose). 🚧 Міграція на AWS заплановано — нова інстанція або Managed Grafana + CloudWatch Logs. |
| Sentry (тільки frontend prod) | помилки JS/Next.js, source-map upload через SENTRY_AUTH_TOKEN | Sentry Cloud — org abitly, region de.sentry.io, URL https://abitly.sentry.io |
| Telegram-logger | помилки/алерти у Telegram-чат | бот: backend → SSM TELEGRAM_LOGGER_BOT_TOKEN → TELEGRAM_LOG_CHAT_ID; frontend → TELEGRAM_BOT_TOKEN → TELEGRAM_CHAT_ID через /api/logger/route.ts (з rate-limit + dedup) |
| AWS CloudWatch Logs | ECS task stdout/stderr · Lambda execution · API Gateway access | автоматично |
| AWS CloudTrail | audit IAM/API дзвінки в акаунті | bucket aws-cloudtrail-logs-* |
Метрики (Prometheus)
Section titled “Метрики (Prometheus)”Abitly API експортує @willsoto/nestjs-prometheus на ендпоїнт /api/metrics. Захищений basic auth (PROMETHEUS_PASSWORD). Abitly Web теж має /api/metrics (з Next.js middleware або власної реалізації — TODO: уточнити).
Prometheus на Droplet — prometheus.yml зі scrape config на ALB endpoint abitly-prod-shared.
| Сервіс | Куди |
|---|---|
| Abitly API (ECS) | CloudWatch /ecs/abitly-prod-backend (TODO: точно) + Loki (можливо через CloudWatch → Promtail) |
| Abitly Web (ECS) | CloudWatch /ecs/abitly-prod-frontend (TODO:) |
| Strapi (EC2) | TODO: (файл або systemd journal) |
| Studsearch backend (EB) | CloudWatch + EB log streaming |
| Telegram bot/webapp (Railway) | Railway built-in logs (через Railway MCP get-logs) |
| Lambda-функції | CloudWatch /aws/lambda/<name> |
Помилки — асиметричний стек
Section titled “Помилки — асиметричний стек”| Сервіс | Канали |
|---|---|
| Frontend prod (Abitly Web) | 3 канали одночасно: Sentry (runtime + build-time source maps) · Telegram через /api/logger/route.ts (rate-limited, deduped) · Loki напряму через lokiLogger (на DO Droplet) |
| Frontend dev | Telegram + Loki (Sentry тільки prod) |
| Backend (Abitly API) | Telegram-logger (ERROR_LOGGER_TYPE=telegram) + CloudWatch stdout. Sentry не підключений. |
| Strapi · Studsearch backend · Telegram bot | CloudWatch / EB logs / Railway logs + Telegram-logger де є |
Sentry MCP активний — використовуйте mcp__sentry__search_issues / analyze_issue_with_seer для frontend prod issues. Org slug — abitly, regionUrl — https://de.sentry.io.
Dashboards у Grafana
Section titled “Dashboards у Grafana”Prepovisioned:
- Abitly Frontend Metrics Dashboard — HTTP traffic, request rates, response times
- Abitly Frontend Logs Dashboard — error counts, log stream viewer
TODO: додати dashboard для backend / payments / БД.
Алерти
Section titled “Алерти”Target — Slack. Grafana Alerting → Slack webhook у командний workspace. Telegram-logger канал використовується для runtime помилок з коду, а Slack — для алертів-метрик (CPU/latency/error-rate). Точна назва Slack-каналу — TODO:.
Типові операції
Section titled “Типові операції”- Тригер скейлу ECS → CloudWatch metric (CPU/memory) → ECS Application Auto Scaling (
TODO:чи увімкнено). - Перевірка прод-помилок коду — Telegram чат
TELEGRAM_LOG_CHAT_ID. - Алерти інфраструктури — Slack workspace.
- Перевірка метрик — Grafana dashboard на DO Droplet (
TODO:URL, до міграції на AWS).