4.6 KiB
Prometheus and Grafana
Open MineGeo's Moderation page while signed in as an Admin, then find Prometheus & Grafana. Regular Moderators cannot view or change this setup. No new Vercel environment variables or Supabase keys are needed.
Connect Prometheus
- Click Generate metrics token. Copy the generated configuration immediately. Only a token hash is stored; the raw token cannot be recovered after leaving the page or hiding it.
- Paste the configuration into your Prometheus server's
prometheus.yml. If that file already hasscrape_configs:, add only the- job_name: minegeoentry under that existing section. Do not create twoscrape_configskeys. - Validate the configuration with
promtool check config prometheus.yml, then reload or restart your Prometheus service using its normal deployment process. - In Prometheus, open Status → Targets and check that
minegeois UP. A successful scrape also appears in MineGeo's Last successful scrape field; use Refresh status to update it.
Prometheus must be able to reach MineGeo's public HTTPS address. The endpoint is
https://minegeo.site/api/metrics, protected by an Authorization bearer
header. Browser login cookies, plugin credentials, and URL query tokens do not
grant access. The generated job scrapes once a minute with a 20-second timeout
and does not forward credentials through redirects. Keep the configuration
private; do not paste it into public Git repositories or forum posts.
Rotate metrics token revokes the previous token immediately. Copy the new configuration and update Prometheus afterward. Disable metrics access revokes the current token. Deleting the issuing Admin account or removing its Admin role also invalidates that token. Issuing another token requires a current Admin.
Import the Grafana dashboard
- In MineGeo, click Download Grafana dashboard.
- In Grafana, add a Prometheus data source pointing to your Prometheus server (for example, its internal service address). Grafana queries Prometheus; it does not use the MineGeo metrics URL as its data source.
- Open Dashboards → New → Import, upload the downloaded JSON, and choose the Prometheus data source when prompted.
- Select the MineGeo instance. Allow one or two scrapes for the first values.
The dashboard has 15 panels covering scrape health, registered accounts, maps, panoramas, solo games, multiplayer rooms, uploads, bug reports, content reports, Discord delivery, exporter read time, and snapshot age. It requires only the built-in Prometheus source and Grafana stat/time-series panels.
History begins when your Prometheus instance starts scraping; existing retained records appear in the first snapshot. Prometheus retention controls how long history remains. Set up Prometheus/Grafana on your own server or supported hosted monitoring service; Vercel runs the exporter, not the monitoring servers.
Meaning and privacy of metrics
- All
minegeo_*values are gauges, not monotonic counters. Deleted records, including closed bug reports removed after three days, can lower counts. Do not userate()orincrease()on these retained inventory gauges. - Games/rooms created in the last 24 hours are rolling-window gauges.
- Solo games are complete once
current_round = 5. Incomplete includes abandoned games. Room lifecycle states describe stored rooms, not currently online users. - Aggregates are collected in one database transaction and cached there for
30 seconds to share work across Vercel instances. Failed scrapes return 503,
never a fabricated all-zero dataset. Prometheus's
upseries records failures. - Names, IDs, emails, messages, screenshots, credentials, and map content are excluded. Metric labels use fixed state/difficulty values only.
- Page views, IP addresses, browser sessions, Vercel CPU/memory, and request latency are not collected by this integration. Vercel Web Analytics remains separate.
For another installation, apply
supabase/migrations/20261012085217_prometheus_metrics.sql before deployment.
The new table has RLS and service-role-only permissions; the three RPC functions
use security invoker and explicitly revoke public/anonymous/authenticated access.
Verify SQL authorization locally with node scripts/test-prometheus-sql.mjs using
the same optional PGlite runtime as the existing SQL verification scripts.
References: Prometheus scrape configuration, Grafana dashboard imports.