Better Stack — Status & Uptime for cockpitOS
Monitor the public availability of Dashboard, Center API, MCP, Center Websites, and ancillary apps via Better Stack Uptime and optionally communicate through status.cockpit-os.de.
1. Correct API Token
Not every token under "API tokens" works for Uptime:
- Better Stack → Settings → API tokens → Team-based tokens
- Select your team
- Generate or copy a token under Uptime API tokens
Alternatively: Global API Token (Global API tokens) — then include team_name in API calls if necessary.
Never commit the token to Git. Only store it locally as an environment variable:
export BETTERSTACK_UPTIME_TOKEN='…'
Token leaked in chat/Slack? Immediately revoke and regenerate.
2. Monitors via Script (recommended)
At the repo root:
export BETTERSTACK_UPTIME_TOKEN='…'
chmod +x scripts/betterstack-setup-monitors.sh
./scripts/betterstack-setup-monitors.sh
Dry run:
BETTERSTACK_DRY_RUN=1 ./scripts/betterstack-setup-monitors.sh
The script will create (if not already present) checks for:
| Component | URL |
|---|---|
| Dashboard | https://dashboard.cockpit-os.de |
| Public Center API | …/api/centers/by-slug/gutenberg-center-mainz |
| MCP Remote | https://mallos-mcp-cockpit.onrender.com/health |
| Center Website (example) | https://gutenberg-center-mainz.cockpit-os.de |
| Center Manager | https://manager.cockpit-os.de |
| Digital Signage | https://signage.cockpit-os.de |
Region: EU (regions: ["eu"]), interval default is 60 s.
Add more center domains if needed in the Better Stack UI or in the script.
3. Status Page in UI
- Better Stack → Status pages → Create
- Company name: cockpitOS (or SMG Mall OS)
- Subdomain: e.g.
cockpitos→ temporarilycockpitos.betteruptime.com - Design: v2, theme according to CI
- Assign Monitors from step 2 as components (groups like “Platform”, “Center Websites”, “Integrations”)
- Enable Subscribe (Email/RSS), so Center IT can subscribe to updates
4. Custom Domain status.cockpit-os.de
- In the Status Page: Custom domain =
status.cockpit-os.de - At the DNS provider (cockpit-os.de): CNAME as shown by Better Stack (typically pointing towards
statuspage.betteruptime.com/status.betteruptime.com— use the exact value from the dashboard) - SSL is issued by Better Stack (Propagation may take some time)
Important: *.cockpit-os.de points to the Center Website (Render). The specific entry status.cockpit-os.de → CNAME statuspage.betteruptime.com must additionally exist at the DNS provider and takes precedence over the wildcard. Without this entry, status will resolve as a center slug on the Mall website ("Center not found").
Check (after propagation, TTL about 1 hour):
dig @8.8.8.8 status.cockpit-os.de CNAME +short
# → statuspage.betteruptime.com.
curl -sI https://status.cockpit-os.de/ | head -3
# Link header with /assets/public_status_pages… = Better Stack (not Next.js/_next/static)
5. Alerts
- Email: enabled by default for monitors (script)
- Slack/Teams: Better Stack → Integrations → Notification channel → link to monitors or escalation policy
- PagerDuty: only if you have on-call duty
Render itself does not have logo integration in onboarding — this is normal; Render services are checked via HTTPS URLs (Custom Domain or *.onrender.com).
6. What We Intentionally Do Not Measure Automatically
- PostgreSQL / Redis on Render — no public URL; internal alerts via Render Dashboard or later OTel (e.g., Dash0)
- Individual Center Custom Domains — add manually as needed (Kurpfalz, Rathaus Galerie, …)
See also
- Public Center Website API — Contract
- Render Blueprint:
render.yaml(Service names & domains)
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/developer-guide/better-stack-status-setup