Dependencies
PostgreSQL connectivity, pool exhaustion, Redis connectivity, Redis latency, and Redis key-prefix collisions.
Production observability should verify more than process liveness:
Main service readiness:
curl -fsS http://localhost:8080/health/readyRecommendations:
Enable metrics:
metrics: enabled: true host: "0.0.0.0" port: 9090 auth: mode: "bearer_token" bearer_token_file: "/run/secrets/metrics_token"Scrape test:
curl -fsS \ -H "Authorization: Bearer $METRICS_TOKEN" \ http://localhost:9090/metricsProduction requirements:
Use JSON logs in production:
logging: level: "info" format: "json"For troubleshooting:
logging: level: "debug" filter: "synctv=debug,tower_http=info"Notes:
trace can produce very large logs and should not stay enabled.Dependencies
PostgreSQL connectivity, pool exhaustion, Redis connectivity, Redis latency, and Redis key-prefix collisions.
Authentication
Login failures, MFA failures, email send failures, OAuth2 state errors, and brute-force lockouts.
Realtime
WebSocket connections, per-user/per-room limits, message rate limiting, and reconnect spikes.
Media
Provider error rate, upstream timeouts, proxy bypass, slice-cache hit rate, Range anomalies, and livestream retries.
| Alert | Possible cause | First checks |
|---|---|---|
| Readiness keeps failing | DB/Redis unavailable, migration issue, config error | synctv db status, service logs |
| Login failures spike | Brute force, OAuth2 callback error, wrong JWT rotation | Rate-limit logs, OAuth2 config, secret changes |
| Email sending fails | SMTP credentials, TLS, provider rate limit | synctv settings test-email, SMTP logs |
| WebSocket disconnect spike | Ingress timeout, rolling update, low connection limits | Ingress timeout, shutdown drain, connection limits |
| Provider errors spike | Upstream unavailable, header mismatch, expired credential | Provider config, proxy headers, upstream response |
| Redis errors | Redis restart, network issue, Sentinel misconfiguration | Redis logs, redis.deployment_mode, connection URL |
Collect shareable information first. Do not paste secrets.
synctv config show --output yaml./health/ready and /metrics availability results.synctv db status output.kubectl describe pod, kubectl get ingress,svc,pod, and rollout status.kubectl -n synctv get pod -o widekubectl -n synctv describe pod <pod>kubectl -n synctv logs <pod> --tail=200kubectl -n synctv get svc,ingresskubectl -n synctv describe ingress synctvkubectl -n synctv describe ingress synctv-grpckubectl -n synctv rollout status deploy/synctvkubectl -n synctv rollout history deploy/synctv