143 lines
4.9 KiB
Markdown
143 lines
4.9 KiB
Markdown
|
|
# ClickHouse + Analytics Engine — Verifieringsrapport
|
|||
|
|
**Datum:** 2026-06-05
|
|||
|
|
**Utförd av:** subagent clickhouse-analytics
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Statusöversikt
|
|||
|
|
|
|||
|
|
| Komponent | Status |
|
|||
|
|
|---|---|
|
|||
|
|
| ClickHouse (Docker :8123) | ✅ Online, auth OK |
|
|||
|
|
| aamos-analytics-engine (:3211) | ✅ Active, systemd |
|
|||
|
|
| analytics-rust (:3281) | ✅ Active (stub) |
|
|||
|
|
| Schema `aamos` | ✅ Komplett, 12 tabeller |
|
|||
|
|
| Seed-data (MRR + Cohort) | ✅ Fyllt |
|
|||
|
|
| Test-event (events-table) | ✅ Verifierat |
|
|||
|
|
| Nginx upstream analytics | ⚠️ Felaktig port (se nedan) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ClickHouse: Databaser
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
INFORMATION_SCHEMA, aamos, default, information_schema, system
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Credentials:** user=`aamos` password=`aamos_wh_2026`
|
|||
|
|
*(Default-user kräver lösenord — använd alltid aamos-user)*
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Schema: Tabeller i `aamos`
|
|||
|
|
|
|||
|
|
| Tabell | Rader | Kommentar |
|
|||
|
|
|---|---|---|
|
|||
|
|
| `events` | 1 (testad) | DAU-events, UUID-baserad |
|
|||
|
|
| `analytics_mrr` | 36 | 3 produkter × 12 månader, seedad |
|
|||
|
|
| `analytics_cohort` | 126 | 3 produkter × 6 cohorts × 7 perioder, seedad |
|
|||
|
|
| `campaign_events` | 0 | Tom — redo för data |
|
|||
|
|
| `entity_scores` | 0 | ML-scores, tom |
|
|||
|
|
| `intent_signals` | 0 | Tom |
|
|||
|
|
| `kong_api_key_usage` | 0 | Tom |
|
|||
|
|
| `kong_consumer_rate_audit` | 0 | Tom |
|
|||
|
|
| `kong_request_log` | 0 | Tom |
|
|||
|
|
| `kong_request_log_per_minute` | - | Materialized view |
|
|||
|
|
| `system_state_history` | 0 | Tom |
|
|||
|
|
| `.inner_id.*` (×3) | - | Interna MV-tabeller |
|
|||
|
|
|
|||
|
|
### Events-table schema
|
|||
|
|
```
|
|||
|
|
id UUID (DEFAULT generateUUIDv4())
|
|||
|
|
event_type LowCardinality(String)
|
|||
|
|
entity_id UUID
|
|||
|
|
entity_type LowCardinality(String)
|
|||
|
|
properties String
|
|||
|
|
source LowCardinality(String)
|
|||
|
|
ts DateTime64(3, 'UTC')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Analytics Engine Services
|
|||
|
|
|
|||
|
|
### Service 1: `aamos-analytics-engine` (:3211)
|
|||
|
|
**Binary:** `/opt/amos/rust/analytics-engine/target/release/amos-analytics`
|
|||
|
|
**Systemd:** `/etc/systemd/system/aamos-analytics-engine.service`
|
|||
|
|
|
|||
|
|
**Endpoints:**
|
|||
|
|
| Endpoint | Status | Beskrivning |
|
|||
|
|
|---|---|---|
|
|||
|
|
| `GET /health` | ✅ 200 | `{"status":"ok","service":"amos-analytics","port":3211,"clickhouse":"ok"}` |
|
|||
|
|
| `GET /api/analytics/dau?days=N` | ✅ 200 | Daily Active Users från events-tabell |
|
|||
|
|
| `GET /api/analytics/mrr?months=N&product=X` | ✅ 200 | MRR från analytics_mrr |
|
|||
|
|
| `GET /api/analytics/cohort?product=X&periods=N` | ✅ 200 | Cohort retention |
|
|||
|
|
| `POST /api/analytics/events` | ❌ 404 | Finns ej — inget event-ingest endpoint |
|
|||
|
|
|
|||
|
|
**Notering:** Service initierar DDL-schema (CREATE TABLE IF NOT EXISTS) vid start, och seedar om analytics_mrr är tom.
|
|||
|
|
|
|||
|
|
### Service 2: `amos-analytics-rust` (:3281) — STUB
|
|||
|
|
**Binary:** `/opt/amos/rust/analytics-rust/target/release/amos-analytics-rust`
|
|||
|
|
Denna är en **stub/placeholder** utan ClickHouse-integration.
|
|||
|
|
Endpoints: `/health`, `/status`, `/list`, `/create` — returnerar tomma svar.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Test-event
|
|||
|
|
Skickades direkt till ClickHouse (analytics-engine har inget POST-endpoint):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST "http://localhost:8123/?user=aamos&password=aamos_wh_2026&database=aamos" \
|
|||
|
|
--data-binary "INSERT INTO events (event_type, entity_id, entity_type, properties, source, ts)
|
|||
|
|
VALUES ('test', generateUUIDv4(), 'test',
|
|||
|
|
'{\"source\":\"e1-008-test\",\"tenant_id\":\"wavult-group\"}',
|
|||
|
|
'e1-008-test', now())"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Resultat:** ✅ Insertat — DAU-endpoint returnerade `{"days":1,"series":[{"date":"2026-06-05","dau":1}],"avg_dau":1.0,"peak_dau":1}`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## MRR-data (aktuell)
|
|||
|
|
Från `/api/analytics/mrr?months=3`:
|
|||
|
|
|
|||
|
|
| Produkt | MRR (Juni 2026) | Kunder | MoM-tillväxt |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| aamos | 2 914 549 SEK | 727 | ~8% |
|
|||
|
|
| quixzoom | 3 195 032 SEK | 3 592 | ~14% |
|
|||
|
|
| ouroboros | 2 551 313 SEK | 79 | ~6% |
|
|||
|
|
| **TOTALT** | **8 660 894 SEK** | - | **9.52%** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ Nginx-upstream — Portmismatch
|
|||
|
|
|
|||
|
|
**Problem:** Nginx-upstream pekar på fel port!
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
# /etc/nginx/conf.d/aamos-upstreams.conf
|
|||
|
|
upstream rust_analytics { server 127.0.0.1:3281; keepalive 16; }
|
|||
|
|
|
|||
|
|
# /etc/nginx/snippets/rust-services.conf
|
|||
|
|
location /api/svc/analytics/ {
|
|||
|
|
proxy_pass http://rust_analytics/; # → :3281 (STUB!)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- `rust_analytics` upstream → `:3281` = **stub-service** (ingen ClickHouse-integration)
|
|||
|
|
- Faktiska analytics-engine med data → `:3211` = **ej proxad**
|
|||
|
|
|
|||
|
|
**Rekommendation:** Uppdatera upstream till `127.0.0.1:3211` (kräver root/SSM).
|
|||
|
|
Eller registrera `:3211` som ny upstream `rust_analytics_engine` och uppdatera location-blocket.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Sammanfattning
|
|||
|
|
|
|||
|
|
- **Schema:** Komplett. 12 tabeller i `aamos`-databasen.
|
|||
|
|
- **Data:** analytics_mrr (36 rader) och analytics_cohort (126 rader) är seedade med realistisk data.
|
|||
|
|
- **Analytics-engine (:3211):** Fullt fungerande. DAU, MRR, Cohort-endpoints svarar korrekt.
|
|||
|
|
- **Test-event:** Verifierat via direkt ClickHouse-insert. DAU-endpoint plockar upp det.
|
|||
|
|
- **Saknar:** POST-endpoint för event-ingest i analytics-engine (events måste skrivas direkt till ClickHouse eller via separat ingest-service).
|
|||
|
|
- **Nginx:** Upstream pekar på stub (:3281) istället för analytics-engine (:3211) — åtgärdas separat med root-access.
|