Monitoring i obserwowalność
1. Cztery filary obserwowalności
| Filar | Narzędzie | Zakres |
|---|---|---|
| Błędy | Sentry | Śledzenie wyjątków, performance, sessions |
| Metryki | Prometheus + Grafana | Metryki systemowe, aplikacyjne, biznesowe |
| Dostępność | Uptime Kuma | Monitoring endpointów i usług |
| Logi | Structured logging | JSON logi z korelacją request ID |
2. Sentry — śledzenie błędów
Projekty
| Projekt | Platforma | SDK |
|---|---|---|
| busikm-backend | Python / Django | sentry-sdk[django,celery] |
| busikm-mobile | React Native | @sentry/react-native |
| busikm-web | Next.js | @sentry/nextjs |
Funkcje
- Error tracking — automatyczne przechwytywanie wyjątków z pełnym stack trace
- Performance monitoring — czas odpowiedzi endpointów, transakcje bazodanowe
- Session replay (web) — nagrywanie sesji użytkowników
- Release tracking — powiązanie błędów z wersjami kodu
Scrubbing danych wrażliwych
Automatycznie usuwane z raportów: password, token, NIP, PESEL, credit_card, nagłówki Authorization i Cookie.
3. Prometheus — metryki
Cele scrapowania
| Target | Endpoint | Port | Interwał |
|---|---|---|---|
| django | /metrics | 8000 | 15s |
| postgres-exporter | /metrics | 9187 | 15s |
| redis-exporter | /metrics | 9121 | 15s |
| mongo-exporter | /metrics | 9216 | 15s |
| celery-exporter | /metrics | 9808 | 15s |
| node-exporter | /metrics | 9100 | 15s |
4. Grafana — dashboardy
| Dashboard | Panele |
|---|---|
| System Overview | CPU, RAM, disk, network, uptime per usługę |
| API Performance | Latency p50/p95/p99, requests/s, error rate, top-10 slowest |
| Celery | Queue length, task success/failure rate, avg task time |
| Business Metrics | Active trips, GPS points ingested, reports generated, companies registered |
5. Metryki biznesowe
| Metryka | Źródło | Opis |
|---|---|---|
| busikm_active_trips | Django | Aktywne przejazdy w danej chwili |
| busikm_gps_points_total | Django | Łączna liczba zapisanych punktów GPS |
| busikm_reports_generated | Celery | Wygenerowane raporty (per typ: PDF, CSV) |
| busikm_exports_total | Celery | Eksporty FK (per provider: insert_gt, optima) |
| busikm_companies_total | Django | Zarejestrowane firmy (per plan) |
6. Reguły alertów
| Alert | Warunek | Severity |
|---|---|---|
| ServiceDown | up == 0 przez 1 min | critical |
| HighErrorRate | >5% błędów 5xx w 5 min | critical |
| HighLatency | p95 > 2s przez 5 min | warning |
| DiskSpaceLow | <10% wolnego miejsca | warning |
| CeleryBacklog | >100 zadań w kolejce >5 min | warning |
| DatabaseConnections | >80% max connections | warning |
| HighMemoryUsage | >90% RAM przez 5 min | critical |
7. Uptime Kuma
Publiczna strona statusu: status.busikm.pl
Monitorowane endpointy (12):
- API Health (
/api/health/) - Auth endpoint (
/api/v1/auth/login/) - WebSocket (
wss://api.busikm.pl/ws/) - PostgreSQL, MongoDB, Redis
- Celery workers, MinIO/S3
- Web frontend, Grafana, Sentry
8. Kanały powiadomień
| Kanał | Cel | Faza |
|---|---|---|
| Alerty non-critical | MVP | |
| Slack (#busikm-alerts) | Wszystkie alerty | MVP |
| PagerDuty | Eskalacja SEV-1 | Post-MVP |
9. Reagowanie na incydenty
| Severity | Opis | Czas reakcji | Przykład |
|---|---|---|---|
| SEV-1 | Krytyczny — system niedostępny | <15 min | API nie odpowiada, baza padła |
| SEV-2 | Poważny — degradacja funkcji | <1h | GPS nie zapisuje, raporty nie generują się |
| SEV-3 | Średni — funkcja działa z ograniczeniami | <4h | Wolne ładowanie mapy, timeout na eksporcie |
| SEV-4 | Niski — kosmetyczny problem | <24h | Błąd w UI, literówka w raporcie |