All checks were successful
Release / Test backend (push) Successful in 40s
Release / Check ui (push) Successful in 1m5s
Release / Docker / caddy (push) Successful in 1m9s
Release / Docker / backend (push) Successful in 3m14s
Release / Docker / runner (push) Successful in 4m7s
Release / Upload source maps (push) Successful in 2m11s
Release / Docker / ui (push) Successful in 2m23s
Release / Gitea Release (push) Successful in 40s
- Add @grafana/faro-web-sdk to UI; wire initializeFaro in hooks.client.ts gated on PUBLIC_FARO_COLLECTOR_URL (no-op in dev) - Add Grafana Alloy service (faro.receiver) to homelab compose; Faro endpoint → alloy:12347 (faro.libnovel.cc via cloudflared) - Add PUBLIC_FARO_COLLECTOR_URL env var to docker-compose.yml UI service - Add Web Vitals dashboard (web-vitals.json): LCP/INP/CLS/TTFB/FCP p75 stats + LCP/TTFB time-series + Faro exception logs from Loki - Fix runner.json: strip libnovel_ prefix from all metric names - Fix backend.json: replace 5 dead http_client_* panels with spanmetrics-based equivalents (Request Rate by Span Name + Latency by Span Name p95) - Fix OTel collector: add service.telemetry.metrics.address: 0.0.0.0:8888 so Prometheus can scrape collector self-metrics - Add Grafana link to admin nav external tools; add admin_nav_grafana message key to all 5 locale files; recompile paraglide
44 lines
1.1 KiB
Plaintext
44 lines
1.1 KiB
Plaintext
// Grafana Alloy — Faro RUM receiver
|
|
//
|
|
// Receives browser telemetry (Web Vitals, traces, logs, exceptions) from the
|
|
// LibNovel SvelteKit frontend via the @grafana/faro-web-sdk.
|
|
//
|
|
// Pipeline:
|
|
// faro.receiver → receives HTTP POST /collect from browsers
|
|
// otelcol.exporter.otlphttp → forwards traces to OTel Collector → Tempo
|
|
// loki.write → forwards logs/exceptions to Loki
|
|
//
|
|
// The Faro endpoint is exposed publicly at faro.libnovel.cc via cloudflared.
|
|
// CORS is configured to allow requests from libnovel.cc.
|
|
|
|
faro.receiver "faro" {
|
|
server {
|
|
listen_address = "0.0.0.0"
|
|
listen_port = 12347
|
|
|
|
cors_allowed_origins = ["https://libnovel.cc", "https://www.libnovel.cc"]
|
|
}
|
|
|
|
output {
|
|
logs = [loki.write.faro.receiver]
|
|
traces = [otelcol.exporter.otlphttp.faro.input]
|
|
}
|
|
}
|
|
|
|
// Forward Faro traces to the OTel Collector (which routes to Tempo)
|
|
otelcol.exporter.otlphttp "faro" {
|
|
client {
|
|
endpoint = "http://otel-collector:4318"
|
|
tls {
|
|
insecure = true
|
|
}
|
|
}
|
|
}
|
|
|
|
// Forward Faro logs/exceptions directly to Loki
|
|
loki.write "faro" {
|
|
endpoint {
|
|
url = "http://loki:3100/loki/api/v1/push"
|
|
}
|
|
}
|