Skip to main content

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:

  1. Better Stack → Settings → API tokens → Team-based tokens
  2. Select your team
  3. 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.

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:

ComponentURL
Dashboardhttps://dashboard.cockpit-os.de
Public Center API…/api/centers/by-slug/gutenberg-center-mainz
MCP Remotehttps://mallos-mcp-cockpit.onrender.com/health
Center Website (example)https://gutenberg-center-mainz.cockpit-os.de
Center Managerhttps://manager.cockpit-os.de
Digital Signagehttps://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

  1. Better Stack → Status pages → Create
  2. Company name: cockpitOS (or SMG Mall OS)
  3. Subdomain: e.g. cockpitos → temporarily cockpitos.betteruptime.com
  4. Design: v2, theme according to CI
  5. Assign Monitors from step 2 as components (groups like “Platform”, “Center Websites”, “Integrations”)
  6. Enable Subscribe (Email/RSS), so Center IT can subscribe to updates

4. Custom Domain status.cockpit-os.de

  1. In the Status Page: Custom domain = status.cockpit-os.de
  2. 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)
  3. 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

Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/developer-guide/better-stack-status-setup