Monitoring
Sprintsail provides built-in observability through Grafana dashboards, structured log streaming, Prometheus metrics, and configurable alerting.
Grafana dashboards
Every organization gets a Grafana instance at https://grafana.{org}.sprintsail.com. Dashboards are pre-configured for:
- App Overview --- request rate, error rate, latency (p50/p95/p99), active instances
- Resource Usage --- CPU utilization, memory consumption, network I/O per instance
- Service Health --- PostgreSQL connections, query latency, Redis hit rate, cache size
- Deployment History --- deploy timeline, revision comparison, rollback events
Access Grafana with your Sprintsail credentials (SSO via Dex).
Logs
Stream logs in real time
ss logs my-app
2026-04-05T10:30:01Z [instance-1] INFO Server started on port 8080
2026-04-05T10:30:02Z [instance-2] INFO Server started on port 8080
2026-04-05T10:30:05Z [instance-1] INFO GET / 200 12ms
2026-04-05T10:30:06Z [instance-1] WARN Slow query: 450ms
Filter logs
By instance:
ss logs my-app --instance instance-1
By time range:
ss logs my-app --since 1h
ss logs my-app --since 2026-04-05T10:00:00Z --until 2026-04-05T11:00:00Z
By log level:
ss logs my-app --level error
Search within logs:
ss logs my-app --grep "database connection"
Structured logging
Sprintsail parses JSON-formatted log lines automatically. If your app outputs structured JSON logs, fields are indexed and searchable in Grafana/Loki:
{"level":"info","msg":"request handled","method":"GET","path":"/api/users","status":200,"duration_ms":12}
Build logs
View logs from the most recent build:
ss logs my-app --build
Metrics
Sprintsail collects metrics via Prometheus and exposes them in Grafana. Default metrics collected for every app:
| Metric | Description |
|---|---|
http_requests_total | Total HTTP requests by method, path, status |
http_request_duration_seconds | Request latency histogram |
container_cpu_usage | CPU usage per instance |
container_memory_usage_bytes | Memory usage per instance |
container_restarts_total | Container restart count |
Custom metrics
If your app exposes a Prometheus /metrics endpoint, Sprintsail scrapes it automatically:
ss app update my-app --metrics-path /metrics --metrics-port 9090
Custom metrics appear in Grafana alongside platform metrics.
Alerting
Configure alerts based on metrics thresholds.
Create an alert
ss alerts create my-app \
--metric error_rate \
--threshold 5 \
--window 5m \
--channel slack:#alerts
Built-in alert types
| Alert | Trigger |
|---|---|
error_rate | Error percentage exceeds threshold |
latency_p95 | 95th percentile latency exceeds threshold (ms) |
cpu_usage | Average CPU utilization exceeds threshold (%) |
memory_usage | Average memory utilization exceeds threshold (%) |
instance_down | An instance is unreachable |
deploy_failed | A deployment fails health checks |
Notification channels
Alerts can be sent to:
# Slack
ss alerts channel add slack --webhook-url https://hooks.slack.com/services/T.../B.../xxx
# Email
ss alerts channel add email --address ops@example.com
# PagerDuty
ss alerts channel add pagerduty --integration-key abc123
# Generic webhook
ss alerts channel add webhook --url https://example.com/alerts
List and manage alerts
ss alerts list my-app
ss alerts delete my-app --alert alert-id
Default alerts
Every app is created with these default alerts (configurable):
- Instance down --- triggers after 1 minute, notifies org admins via email
- Deploy failed --- triggers immediately, notifies the deploying user
Health checks
Sprintsail performs health checks to determine instance readiness:
ss app update my-app --health-check-path /health --health-check-interval 10s
Failed health checks trigger automatic instance restarts and alert notifications.
Log retention
| Plan | Log retention | Metric retention |
|---|---|---|
| Starter | 24 hours | 7 days |
| Growth | 30 days | 90 days |
| Enterprise | 1 year | 1 year |
Next steps
- Observability concepts --- OpenTelemetry, Prometheus, Loki stack details
- Scaling --- autoscaling reacts to the same metrics
- Deploying --- health checks and deploy monitoring