Observability

Observability#

SkyPortal can expose OpenTelemetry request metrics in Prometheus format. It is opt-in and off by default.

Enabling metrics#

In your config.yaml:

observability:
  enabled: True
  service_name: skyportal

This instruments the Tornado app and serves metrics at /api/internal/metrics, which requires a System admin token (scrape with Authorization: token <id>). Each app worker serves its own metrics on its internal port (ports.app_internal + N, default 65000..65003); scrape those directly rather than the nginx/public endpoint, which round-robins workers and returns partial counters.

Prometheus + Grafana#

The observability/ directory ships a ready-to-run stack: a scrape config, Grafana provisioning, and a SkyPortal Overview dashboard. Copy observability/prometheus/skyportal_token.example to skyportal_token, add a System admin token, then start it alongside the app:

docker compose -f docker-compose.yaml \
  -f observability/docker-compose.observability.yaml up

Grafana is then at http://localhost:3000 (admin/admin by default).