Self-hosted, horizontally scalable HTTP monitoring with a modern web interface. Multi-user support with secure authentication, real-time dashboards, and comprehensive monitoring management. Built with Go backend and Next.js frontend.
graph TB
Users[👥 Users]
WebUI[🌐 Web UI<br/>Next.js :3000]
ControlPlane[🎯 Control Plane<br/>Go :8080]
Database[(🗄️ TimescaleDB<br/>PostgreSQL)]
subgraph "Workers - Distributed"
WorkerUS[⚡ Worker US-East<br/>Go - us-east-1]
WorkerEU[⚡ Worker EU-West<br/>Go - eu-west-1]
WorkerAP[⚡ Worker AP-South<br/>Go - ap-south-1]
end
Users --> WebUI
WebUI -.->|Session Auth<br/>Connect RPC| ControlPlane
WorkerUS -->|Token Auth<br/>HTTP Polling| ControlPlane
WorkerEU -->|Token Auth<br/>HTTP Polling| ControlPlane
WorkerAP -->|Token Auth<br/>HTTP Polling| ControlPlane
ControlPlane --> Database
subgraph "Database Schemas"
AppSchema[📋 app schema<br/>monitors, jobs, workers, worker_capabilities]
TSSchema[📊 ts schema<br/>results_raw, results_agg_*]
AuthSchema[🔐 auth tables<br/>user, session, account, ...]
end
Database --- AppSchema
Database --- TSSchema
Database --- AuthSchema
OpenSeer consists of four main components:
- Web Frontend (Next.js) - Modern dashboard with real-time metrics visualization, multi-user support with secure session-based authentication
- Control Plane (Go) - Service managing workers and job scheduling via HTTP APIs
- Workers (Go) - Distributed agents executing HTTP checks across geographic regions, using HTTP polling with token-based authentication
- Database (PostgreSQL + TimescaleDB) - Time-series storage with automatic aggregation (1-minute, 1-hour, and 1-day intervals), P50/P95/P99 latency tracking, and uptime statistics
Workers communicate with the Control Plane using a simple HTTP polling model:
- Enrollment: Workers register using a cluster token and receive an API token (
ostk_...) - Job Polling: Workers poll
GetJobsendpoint to fetch available jobs for their region - Result Submission: After executing checks, workers submit results via
SubmitResult - Lease Renewal: For long-running checks, workers can extend job leases via
RenewLease
This polling-based architecture provides:
- Simplicity: No persistent connections to maintain
- Scalability: Stateless control plane, easy horizontal scaling
- Resilience: Workers automatically reconnect on network issues
For detailed architecture documentation, see:
For a fresh environment:
task migrate
task uptask migrate runs backend and web auth migrations. task up starts the app profile (TimescaleDB, control plane, worker, and web).
Then access:
- Web UI: http://localhost:3000
- API: http://localhost:8080
To stop services:
task downTo stop services and remove volumes:
task cleantask up # Start all app services
task down # Stop app services
task clean # Stop app services and remove volumes
task migrate # Run backend + web migrations
task --list # Show all available tasksContributions are welcome! Please see the detailed architecture documentation in the cmd/ directories for implementation details.
MIT