- Logs — your app’s Logs tab in the portal, or
grounds logs deployment <name>. These stream straight from your pod, scoped to your project. - Metrics — the deployment detail page in the portal shows CPU/memory and base-image metrics for your app.
grafana.platform.grnds.io is reachable for ad-hoc exploration if your Grounds Account has a
dev or admin role — sign in with Keycloak. It is not project-isolated today, so treat it as an operator/debug surface rather than your primary, scoped view; lead with the portal and CLI above.Logs
There are two distinct streams.Build logs
The build pipeline (Kaniko + push to in-cluster registry). Useful for diagnosingbuild_failed.
{namespace="grounds-forge", app="kaniko"} |= "<pushId>".
Deployment logs
The actual stdout/stderr of your running pod. Useful for everything else.preview-<id>.
Metrics
Standard JVM + base-image metrics are exposed automatically:- JVM heap / GC / thread pool (via
-javaagentin the base image). - HTTP request rates and latencies for
service-type workloads with our standard middleware. - Paper-specific tick rates for
plugin-paper.
Custom metrics
If your plugin or service exposes a/metrics endpoint (Prometheus format), add a ServiceMonitor to scrape it. We don’t auto-discover arbitrary endpoints — explicit ServiceMonitors keep the cardinality budget under control.
Examples and the gnds_* metric naming convention live in tools/observability (coming soon).
Traces
If your code emits OTLP traces, they’re forwarded to Tempo via an Alloy collector that runs as a sidecar inservice-type pods. Traces are tied back to logs via the standard trace_id field — Grafana auto-links between them.
Tracing for plugin-paper / gamemode workloads is opt-in (we don’t auto-instrument the Bukkit / Minestom event bus by default). Reach out in #grounds-platform if you want this for your plugin.
Alerts
Alert routing is platform-managed:- Platform-level alerts (cluster, ingress, base-image health) page the platform team.
- Project-level alerts can be defined per-project in Grafana. The default is none — you opt in by writing rules.
Common queries
| What | Where |
|---|---|
| ”Why did my push fail?” | grounds logs <pushId> |
| ”Why is my pod crashlooping?” | grounds logs deployment <name> |
| ”Is the platform itself broken?“ | status.grounds.gg |
| ”What’s the platform-level latency right now?” | Grafana → Platform → Latency dashboard |
| ”Did anyone push to this project today?” | Portal → project → Pushes |
Dashboards as code
Project-specific Grafana dashboards can be checked in alongside your code:my-app-dashboard.yaml
