Status page
Being rolled out. The interface described here is the one of the next release: it may still change, and may not be enabled on your tenant yet.
Monitoring is being rolled out; custom domains and maintenance windows are not available yet.
A status page publicly shows the state of your services, their availability over 24 h,
30 and 90 days, and a day-by-day history. It is served by the platform at
https://status.<tenant>.dev.stackngo.app/, based on your monitors.
Prerequisites
- A tenant session (
sng tenant use acme) and thedeploy:writeright. - At least one monitor.
1. Publish the page
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default # "default": served at the root of status.<tenant>…
spec:
title: État des services Acme
groups: # public sections, in display order
- name: API
monitors: [api] # one line per monitor, under its displayName
- name: Site web
components: # named lines (see "Group and name lines")
- name: Site web
monitors: [www, www-assets]
sng apply infra/StatusPage/default.yml
There is no dedicated sng command: start from the template
sng template gen StatusPage default > status.yml, then sng apply.
The page is online a few moments later:
https://status.acme.dev.stackngo.app/
2. What the page displays
-
A global state: "Tous les services sont opérationnels", "Incident en cours sur certains services" or "Certains services ne remontent pas de mesures".
-
Per section, one line per monitor in
monitors(under itsdisplayName, or its name) and one line per entry incomponents(under itsname), with its state (opérationnel, panne, inconnu, suspendu) and its availability over 24 h, 30 d and 90 d. -
A daily history over
historyDaysdays (30 or 90, default 90). -
The p95 latency over 24 h if
showLatency: true. -
In the footer, the "Powered by stackngo" mention.
The page never displays the targets (URLs, hosts, ports): only the labels. Choose
presentable displayName values ("API publique", not api-prod-gra), or name the lines
with components.
3. Group and name lines
An entry in components is a public line under its own name.
Name a line: with a single monitor, the line shows name instead of the monitor's
displayName. The monitor keeps its displayName for your alerts.
Combine several monitors into one line: with several monitors (10 at most), the line
combines their states according to combine:
combine | The line is operational… | Use |
|---|---|---|
All (default) | if all monitors are: a single one down puts the line in outage | A service that depends on several points (public API and its database) |
Any | if at least one monitor is | Redundant points (two regions, two front ends) |
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default
spec:
title: État des services Acme
groups:
- name: API
components:
- name: API publique # a single line for two probes
monitors: [api-public, api-ready]
combine: All
- name: Site web
components:
- name: Site web
monitors: [www-gra, www-sbg]
combine: Any
- name: Base de données # renames the db-prod monitor
monitors: [db-prod]
For a combined line, the availability over 24 h, 30 d, 90 d and the history are computed on the combined state, minute by minute (hour by hour beyond 24 h), not as an average of the monitors. The p95 latency shown is that of the slowest monitor.
Within a section, the lines from monitors are displayed before those from components. A
monitor can appear only once per page.
Badges stay per monitor: /badge/api-ready.svg works for a monitor shown within a combined
line.
4. Several pages
A page named other than default is served under a path:
metadata.name | Address |
|---|---|
default | https://status.acme.dev.stackngo.app/ |
interne | https://status.acme.dev.stackngo.app/interne |
The number of pages depends on the tier: 1 in 3XS and 2XS, 2 in XS and S, 3 in M… See
Tiers and quotas.
All pages are accessible without authentication. Only list on a page what you are willing to show.
5. JSON summary and badges
Each page exposes its content as JSON, to embed it elsewhere:
curl -s https://status.acme.dev.stackngo.app/api/v1/summary.json # default page
curl -s https://status.acme.dev.stackngo.app/summary.json # same document, at the root
curl -s https://status.acme.dev.stackngo.app/api/v1/pages/interne/summary.json
{
"title": "État des services Acme",
"overall": "operational",
"message": "Tous les services sont opérationnels",
"groups": [
{
"name": "API",
"state": "operational",
"components": [
{ "name": "API publique", "state": "operational", "uptime24h": 1, "uptime30d": 0.9995, "uptime90d": 0.9991, "days": [ { "date": "2026-10-07", "uptime": 1 } ] }
]
}
],
"historyDays": 90,
"updatedAt": "2026-10-07T10:12:00Z"
}
Uptime values range from 0 to 1. Possible states: operational, outage, unknown,
paused. The response allows calls from any site (CORS).
One SVG badge per monitor displayed on a page:

The badge reads "statut | opérationnel", "panne", "suspendu" or "inconnu". A monitor that appears on no published page has no badge (404).
Verification
curl -s -o /dev/null -w '%{http_code}\n' https://status.acme.dev.stackngo.app/
200
A 404 ("page introuvable") means that the page does not exist or was refused by the
platform (see "Common errors").
Maintenance windows
In preparation. This page describes the target interface to gather your feedback; nothing is usable yet.
The MaintenanceWindow manifest
is accepted by sng apply to freeze the format, but it has no effect in this
version: alerts are not silenced, the "maintenance" state does not appear on the
page and the window is not excluded from the uptime calculation. To avoid alerts during an
intervention, suspend the monitors concerned (paused: true): they then appear as
"suspendu" on the page.
Going further
- Delays: a monitor's state is reread at each display, but the page may stay in the browser cache for 30 seconds; uptimes are recalculated every 30 seconds, the history every 10 minutes.
- Rate: 5 requests per second per IP address (bursts tolerated); beyond that,
429. - Custom domain:
customDomainsexists in the format, but a page that declares one is refused (NotSupported) in this version. Remove the field. - Deleted monitor: it disappears from the page; a page that still lists it is refused
(
MonitorNotFound) on the next pass. Update the page in the samesng apply. - Page address: the name
statusis reserved under your tenant's zone; an App or a site cannot use it. - Page name: avoid
healthz, which corresponds to a technical route of the platform (the page would not be served).
Common errors
| Symptom | Cause | Fix |
|---|---|---|
404 page introuvable at the address | Page refused: listed monitor not found (MonitorNotFound), monitor shown twice (Invalid), customDomains set (NotSupported), or the tier's number of pages exceeded (QuotaExceeded) | Fix the list of monitors, remove customDomains, delete a page |
| The address does not resolve or the certificate is invalid | The certificate for status.<tenant> is issued at the first accepted page (a few minutes); DNS publication of this address is not guaranteed on all tenants in this version | Retry later; if it persists, contact support |
503 statut momentanément indisponible | The measurement storage does not respond | Retry |
| A component stays "inconnu" | Monitor refused (interval, target, quota) or without a recent measurement | See Monitors |
sng apply refuses: spec.groups: … should have at least 1 items | Page without a section | At least one section |
sng apply refuses: monitors ou components requis | Empty section | List monitors in monitors or components |
sng apply refuses: combine … Unsupported value | Unknown combine value | All or Any |
See also
- Uptime monitors
- Notification channels
- Reference:
StatusPage,MaintenanceWindowandMonitor