Operacje
Obserwowalność i monitorowanie
Obserwowalność na platformie DataFlow AI Platform obejmuje dwie warstwy: warstwę infrastruktury (Prometheus zbierający dane z endpointów Actuatora, wizualizowane w Grafanie) oraz warstwę aplikacji (monitor-service, pełnoprawna funkcja produktu, która śledzi alerty, SLA, koszty, świeżość danych i historię uruchomień pipeline'ów). Ta strona wyjaśnia obie warstwy oraz to, jak ich używać, aby utrzymać pipeline'y w dobrej kondycji.
Stos obserwowalności
┌──────────────┐ ┌───────────────┐ ┌──────────────┐ ┌─────────────┐
│ api-gateway │ │ metadata-svc │ │ pipeline-eng │ │ monitor-svc │
│ /actuator/ │ │ /actuator/ │ │ /actuator/ │ │ /actuator/ │
│ prometheus │ │ prometheus │ │ prometheus │ │ prometheus │
└──────┬───────┘ └──────┬────────┘ └──────┬───────┘ └──────┬──────┘
│ │ │ │
└─────────────────┴────────┬─────────┴─────────────────┘
│ scrape every 15s
┌─────────▼──────────┐
│ Prometheus │
│ v2.54.1 │
└─────────┬──────────┘
│ datasource (default)
┌─────────▼──────────┐
│ Grafana 11.2.2 │
│ dashboards (UI) │
└────────────────────┘
monitor-service ── OpenTelemetry tracing + Prometheus metrics + SSE streams
copilot ── exposes /metrics (Python)
Stos składa się z trzech współpracujących części:
- Prometheus zbiera metryki z endpointu Spring Boot Actuator każdej usługi.
- Grafana odpytuje Prometheusa jako źródło danych i renderuje dashboardy.
monitor-serviceto własna usługa monitorowania produktu — dodaje śledzenie OpenTelemetry, alertowanie na poziomie biznesowym, śledzenie tempa wypalania budżetu SLA (SLA burn-rate) oraz strumienie na żywo SSE, które konsumuje frontend.
Prometheus
Prometheus (prom/prometheus:v2.54.1) jest konfigurowany przez docker/prometheus/prometheus.yml z 15-sekundowym interwałem zbierania danych. Zbiera dane z endpointu /actuator/prometheus z:
api-gatewaymetadata-servicepipeline-enginepushdown-sqllineage-servicemonitor-service
Znana niezgodność portów scrape
Konfiguracja scrape kieruje na numery portów hosta (na przykład metadata-service:8081), ale wewnątrz sieci Docker każda usługa JVM nasłuchuje na porcie kontenera 8080. To potencjalna niezgodność — dodając lub debugując cele scrape, sprawdź port, który kontener faktycznie udostępnia na moście dataflow-network, a nie port opublikowany na hoście.
Jakie metryki są udostępniane
Spring Boot Actuator z Micrometerem udostępnia standardowe rodziny metryk JVM i HTTP na /actuator/prometheus, w tym:
| Rodzina metryk | Co mówi |
|---|---|
http_server_requests_* | Liczba żądań, histogramy latencji, kody statusu na trasę |
jvm_memory_*, jvm_gc_* | Zużycie sterty/poza stertą i zachowanie odśmiecania pamięci (garbage collection) |
jvm_threads_* | Nasycenie puli wątków |
process_cpu_usage, system_cpu_usage | Obciążenie CPU hosta i procesu |
hikaricp_connections_* | Wykorzystanie i oczekiwanie puli połączeń bazy danych |
Usługa copilot w Pythonie udostępnia własny endpoint /metrics do zbierania danych.
Grafana
Grafana (grafana/grafana:11.2.2) jest provisionowana przez docker/grafana/datasources.yml z pojedynczym źródłem danych Prometheus (http://prometheus:9090), ustawionym jako domyślne.
Repozytorium nie dostarcza dashboardów
Repozytorium provisionuje źródło danych Prometheus, ale nie provisionuje żadnych dashboardów. Dashboardy tworzy się ręcznie w interfejsie Grafany. Stawiając świeże środowisko, zaplanuj samodzielne zaimportowanie lub zbudowanie dashboardów — w repozytorium nie ma dashboardów jako kodu.
Na VPS Grafana jest opublikowana na porcie 4001 (przesuniętym, aby współistnieć ze stosem itsm). W domyślnym wdrożeniu Compose działa na porcie 3001.
Zalecane panele dashboardu
Ponieważ dashboardy buduje się ręcznie, przydatny zestaw startowy obejmuje:
- Kondycja żądań — częstotliwość
http_server_requests, latencja p50/p95/p99 oraz współczynnik 5xx na usługę. - Kondycja JVM — trend zużycia sterty, czas pauz GC, liczba wątków.
- Baza danych — aktywne/bezczynne/oczekujące połączenia HikariCP.
- Przepustowość pipeline'ów — liczby uruchomień pipeline'ów i współczynnik awarii (na podstawie danych z
monitor-service).
Śledzenie OpenTelemetry
monitor-service realizuje rozproszone śledzenie platformy za pomocą swojej konfiguracji OpenTelemetryConfig oraz filter/TracingFilter. Korelacja żądań jest propagowana od początku do końca za pomocą nagłówka X-Request-Id, dzięki czemu pojedyncze żądanie można śledzić przez gateway i usługi w dół łańcucha.
RequestLoggingFilter gateway'a produkuje strukturalne logi dostępu, a identyfikator żądania wygenerowany lub zaakceptowany na brzegu sieci przepływa przez każdy przeskok. Badając wolne lub nieudane żądanie, przechwyć X-Request-Id z odpowiedzi i użyj go do skorelowania logów i śladów.
Sondy stanu (health) i gotowości (readiness)
api-gateway udostępnia HealthController ze standardowym trio sond Spring Boot Actuator:
| Sonda | Endpoint | Znaczenie |
|---|---|---|
| Liveness | /actuator/health/liveness | Proces żyje; zrestartuj go, jeśli ta sonda zawiedzie |
| Readiness | /actuator/health/readiness | Usługa jest gotowa do przyjmowania ruchu |
| Startup | /actuator/health/startup | Usługa zakończyła inicjalizację |
Sonda readiness gateway'a jest świadoma zależności — odpytuje endpoint odkrywania OIDC .well-known Keycloaka oraz endpoint stanu metadata-service. Oznacza to, że gateway nie zgłosi gotowości, dopóki jego krytyczne usługi nadrzędne nie będą osiągalne.
Każdy kontener usługi Kotlina definiuje też healthcheck Dockera na /actuator/health. Compose depends_on … condition: service_healthy wykorzystuje je do wymuszenia kolejności startu: postgres → keycloak / kafka / redis → usługi aplikacyjne → frontend.
Aby sprawdzić stan ręcznie na VPS:
# gateway aggregate health
curl -sf http://127.0.0.1:8085/actuator/health | jq
# readiness specifically
curl -sf http://127.0.0.1:8085/actuator/health/readiness | jq
# container health at a glance
docker compose ps
Monitorowanie na poziomie aplikacji — monitor-service
monitor-service to nie tylko instalacja infrastrukturalna — to pełnoprawna funkcja produktu. Odpowiada za alerty, śledzenie SLA, historię uruchomień pipeline'ów, śledzenie kosztów, świeżość danych oraz monitorowanie zmian schematu.
Jego schemat Flyway obejmuje 25 migracji (V9–V25), pokrywających:
- Trwałe przechowywanie alertów i kierowanie powiadomień
- Historię metryk klastra
- Śledzenie tempa wypalania budżetu SLA (SLA burn-rate)
- Kwarantannę danych
- Monitorowanie zmian schematu (tabele
monitor_*, w tymmonitor_alertsimonitor_pipeline_runs)
monitor-service pobiera również metryki użytkowników Keycloaka, gdy MONITOR_KEYCLOAK_ENABLED=true.
Jak obserwować kondycję pipeline'ów
Uruchomienie pipeline'u przepływa przez platformę i pojawia się w monitorowaniu w kilku punktach:
pipeline-enginewykonuje uruchomienie i publikuje zdarzenia uruchomienia przezExecutionEventPublisher/PipelineRunLogPublisher.- Przy awarii zadania
SelfHealingServiceklasyfikuje awarię i stosuje strategie odzyskiwania — te zdarzenia odzyskiwania są obserwowalne. - Po zakończeniu
monitor-serviceprzyjmuje metryki uruchomienia i ocenia koszt, SLA oraz świeżość, podnosząc alerty tam, gdzie przekroczono progi. - Historia uruchomień jest trwale przechowywana w
monitor_pipeline_runs; alerty wmonitor_alerts.
Aby sprawdzić stan uruchomień pipeline'ów bezpośrednio w bazie danych:
docker compose exec postgres psql -U postgres -d dataflow_metadata \
-c "SELECT status, COUNT(*) FROM monitor_pipeline_runs GROUP BY status;"
Strumienie na żywo SSE
Platforma wypycha dane obserwowalności w czasie rzeczywistym do interfejsu użytkownika za pomocą Server-Sent Events zamiast odpytywania (polling).
| Strumień | Źródło | Przenosi |
|---|---|---|
| Alerty | monitor-service /api/v1/monitor/sse/** | Wyzwalanie/wygaszanie alertów na żywo |
| Metryki | monitor-service SSE | Aktualizacje metryk na żywo |
| Powiadomienia | skrzynka odbiorcza powiadomień monitor-service | Zdarzenia skrzynki odbiorczej powiadomień widoczne dla użytkownika |
| Czat Copilota | copilot | Odpowiedzi AI strumieniowane token po tokenie |
Dodatkowo WebSocket przenosi strumieniowanie logów uruchomień pipeline'ów na /api/v1/runs/{runId}/stream — gateway przepisuje http→ws do pipeline-engine, a komponent LogStream frontendu renderuje aktualizacje stanu zadań i logów na żywo.
SSE wymaga poprawnej konfiguracji nginx
SSE działa przez nginx na VPS tylko dlatego, że /api/ jest skonfigurowane z proxy_buffering off oraz warunkową mapą uaktualnienia WebSocket. Jeśli alerty lub metryki na żywo przestają się aktualizować po zmianie nginx, ponownie sprawdź ten hotfix — zakodowany na sztywno nagłówek Connection "upgrade" psuje strumienie SSE i WebSocket. Zobacz sekcję hotfixu nginx w przewodniku wdrożenia.
SSEManager frontendu (EventSource) napędza alerty, metryki i powiadomienia; interceptor żądań w frontend/src/api/client.ts zapewnia, że żaden strumień nie otworzy się przed gotowością tokenu Keycloaka.
Logowanie
Każda usługa produkuje logi strukturalne. RequestLoggingFilter gateway'a emituje strukturalne logi dostępu na brzegu sieci, a nagłówek korelacji X-Request-Id przewija się przez usługi w dół łańcucha, dzięki czemu żądanie można zrekonstruować przez wiele przeskoków.
Na VPS logi kontenerów są dostępne przez Docker Compose:
# tail logs for one service
docker compose logs -f --tail=200 api-gateway
# logs since a timestamp
docker compose logs --since 2026-05-20T04:00:00 monitor-service
Diagnozując problem, przechwyć X-Request-Id z nieudanej odpowiedzi i wyszukaj go (grep) w logach odpowiednich usług, aby prześledzić pełną ścieżkę żądania.
Alertowanie
Alertowanie istnieje na dwóch poziomach.
Alertowanie na poziomie aplikacji (monitor-service)
monitor-service ocenia warunki tempa wypalania budżetu SLA, kosztu, świeżości oraz zmian schematu i trwale zapisuje alerty do monitor_alerts, z konfigurowalnym kierowaniem powiadomień. Alerty te są prezentowane na żywo w interfejsie użytkownika przez strumień alertów SSE oraz przez skrzynkę odbiorczą powiadomień.
Alertowanie infrastruktury (ścieżka GKE)
Runbook DR oraz produkcyjny workflow GitHub Actions odwołują się do PagerDuty (klucze kierujące P1/P2) oraz Slacka (#dataflow-incidents, SLACK_WEBHOOK_DEPLOYMENTS). Polityki alertów Cloud Monitoring są opisane w docs/deployment-scenarios.html.
Alertowanie infrastruktury dotyczy tylko GKE
PagerDuty, powiadomienia o wdrożeniach w Slacku oraz polityki alertów Cloud Monitoring należą do udokumentowanej ścieżki GKE. Produkcyjne wdrożenie na pojedynczym VPS opiera się na wbudowanym w produkt alertowaniu monitor-service oraz ręcznych kontrolach stanu — dla VPS nie skonfigurowano żadnego zewnętrznego pagingu.
Szybka lista kontrolna obserwowalności
Gdy potrzebujesz wiedzieć „czy platforma jest teraz w dobrej kondycji?", przejdź przez tę listę:
docker compose ps— czy wszystkie 8 usług oraz warstwa infrastruktury sąhealthy?curl -sf http://127.0.0.1:8085/actuator/health/readiness— czy gateway jest gotowy?- Otwórz Grafanę — czy latencja żądań p99 i współczynnik 5xx mieszczą się w normalnych granicach?
- Sprawdź
monitor_pipeline_runspod kątem skoku statusuFAILED. - Sprawdź
monitor_alerts(oraz strumień alertów w interfejsie) pod kątem niepotwierdzonych alertów. docker compose logs --since 1hna dowolnej usłudze wykazującej błędy — koreluj poX-Request-Id.