Observability No Data
Grafana panels may show no data for several independent reasons. This runbook walks through systematic checks for each layer: metrics server, Prometheus scrape target, dashboard variable, and artifact availability.
This runbook covers local artifact-backed observability only. It is not live process health monitoring or Alertmanager configuration.
Symptoms
- Grafana panels are blank or show
No datafor the selected$run_id. - Prometheus
/targetspage shows the metrics target asDOWNor absent. tc metrics exportproduces output but Grafana still shows nothing.- The
$run_iddropdown in Grafana is empty. - Some panels have data while others (evidence, drill, reconciliation) do not.
Checks
1. Verify tc metrics serve is running:
curl -s http://localhost:8000/metrics | head -5
If that fails, start the server:
tc metrics serve \
--artifacts-root artifacts/runs \
--evidence-root artifacts/evidence \
--host 0.0.0.0 \
--port 8000
2. Check Prometheus scrape target:
Open http://localhost:${TC_PROMETHEUS_PORT:-9090}/targets
Target tradingchassis_ops_lab_metrics should show UP. If DOWN: confirm tc metrics serve
is running and wait one scrape interval (~15 s).
3. Verify the Docker Compose stack is running:
docker compose -f deploy/observability/docker-compose.yml ps
If not running:
docker compose -f deploy/observability/docker-compose.yml up
4. Check the $run_id dashboard variable:
Open the Grafana dashboard. In the top-left run_id dropdown, select a run ID that corresponds to
existing artifacts under artifacts/runs/<run_id>/. If the dropdown is empty, no
tradingchassis_ops_lab_run_info metric has been scraped yet — verify steps 1–3 first.
5. Verify metrics.json exists for the selected run:
ls artifacts/runs/<run_id>/metrics.json
A run initialized with tc run init only (without a subsequent backtest or paper lifecycle) does
not produce metrics.json. Re-run the backtest or paper lifecycle.
6. For evidence panels — verify evidence artifacts and --evidence-root:
ls artifacts/evidence/
If empty: run tc evidence compare --backtest-run-id <id> --paper-run-id <id> first. Also confirm
tc metrics serve is started with --evidence-root artifacts/evidence.
7. For drill and reconciliation panels — verify drill artifacts exist:
ls artifacts/runs/<run_id>/drills/
ls artifacts/runs/<run_id>/reconciliation_result.json 2>/dev/null || echo "absent"
If absent: run a drill first, for example:
tc drill stale-market-data --run-id <run_id>
8. Distinguish tc metrics serve from tc metrics export:
tc metrics export writes Prometheus text to stdout or a file for one-shot inspection. It does not
feed Grafana. Use tc metrics serve to expose the /metrics endpoint that Prometheus scrapes.
Recovery
| Problem | Recovery |
|---|---|
tc metrics serve not running |
Start it (see Check 1 above) |
Prometheus target DOWN |
Restart tc metrics serve; wait one scrape interval |
| Docker Compose not running | docker compose -f deploy/observability/docker-compose.yml up |
$run_id dropdown empty |
Re-run a lifecycle to produce metrics.json; wait for Prometheus scrape |
metrics.json missing for run |
Re-run tc run backtest or tc run paper |
| Evidence panels empty | Run tc evidence compare; restart tc metrics serve with --evidence-root |
| Drill / reconciliation panels empty | Run a drill command; confirm drill artifacts exist |
| Reconciliation panel empty | Run tc reconcile check or a drill that writes reconciliation_result.json |
Boundaries
- Local artifact-backed observability only.
- Not live process health monitoring.
- Not Alertmanager configuration.
tc metrics exportis a debug/inspection tool — it does not feed Grafana.- Evidence panels require
--evidence-root artifacts/evidencewhen startingtc metrics serve. - Drill and reconciliation panels require corresponding artifacts to exist under the selected
run_id.