StatusPage
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 are not available yet.
apiVersion | monitoring.stackngo.io/v1alpha1 |
kind | StatusPage |
| Applied by | sng apply |
| Related commands | sng template gen StatusPage, sng apply, sng kind list StatusPage, sng kind delete StatusPage NAME |
What it is for
A StatusPage publishes, without authentication, the state of your Monitors
grouped into components: current state, availability over 24 h, 30 and 90 days, day-by-day
history, and, optionally, latency. The address derives from the tenant:
https://status.<tenant>.dev.stackngo.app/ for the default page, and
https://status.<tenant>.dev.stackngo.app/<nom> for the others. The page never shows the
probed targets, only the labels.
Minimal example
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default
spec:
title: État des services
groups:
- name: API
monitors: [api]
sng apply default.yml # https://status.<tenant>.dev.stackngo.app/
Complete annotated example
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default # "default": root of status.<tenant>…; otherwise /<nom>
spec:
title: État des services Acme # page title, 1 to 120 characters
logoURL: https://www.example.com/logo.png # header logo, https only
groups: # sections, in display order (1 to 50)
- name: API # public section name (80 chars max), unique within the page
monitors: [api-docs] # one line per Monitor, under its displayName (1 to 50)
components: # named lines, after monitors (1 to 20)
- name: API publique # public line name (80 chars max), unique within the section
monitors: [api, api-auth] # 1 to 10 Monitors combined into one line
combine: All # All (default): all operational; Any: at least one
- name: Site web
components:
- name: Site vitrine # a single Monitor: renames the line
monitors: [www]
showLatency: true # displays the p95 latency over 24 h (default false)
historyDays: 90 # history depth: 30 or 90 (default 90)
# customDomains: [status.example.com] # not available yet: the page would be rejected
Fields
Cross-field validation rules
The schema rejects, as early as sng apply:
- an empty
titleor one longer than 120 characters; alogoURLthat does not start withhttps://; - an empty
groupsor more than 50 groups, a group with neithermonitorsnorcomponents("monitors ou components requis"), more than 50 monitors inmonitors, more than 20componentsor more than 10 monitors per component, a monitor name that is not a DNS label, acombineother thanAllorAny; group names must also be unique within the page, and component names within their group; - a
historyDaysother than30or90; more than 5customDomains.
The platform also rejects, after application (Accepted=False, page not served):
- a listed monitor that does not exist in the tenant (
MonitorNotFound); - a monitor shown twice on the page, in
monitorsorcomponents(Invalid); - a non-empty
customDomains(NotSupported); - a page beyond the number allowed by the tier: the most recent ones are refused (
QuotaExceeded).
A monitor that exists but is rejected stays listed: it is shown as "unknown".
StatusPage
StatusPage publie une page de statut qui affiche l'état et l'historique de vos monitors.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
apiVersion string | monitoring.stackngo.io/v1alpha1 | ||
kind string | StatusPage | ||
metadata ObjectMeta | Seul metadata.name est à renseigner (nom de la ressource dans votre tenant). | ||
spec StatusPageSpec | |||
status StatusPageStatus |
StatusPageSpec
StatusPageSpec décrit une page de statut publique. Son adresse n'est pas dans le manifeste : elle est attribuée par la plateforme à partir de votre tenant et affichée dans status.url.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
title string | Titre affiché en tête de page. | MaxLength: 120 MinLength: 1 | |
logoURL string | Logo affiché en en-tête (https). | MaxLength: 2048 Pattern: ^https:// Optional: {} | |
groups StatusPageGroup array | Composants affichés, dans l'ordre. | MaxItems: 50 MinItems: 1 | |
showLatency boolean | Affiche la latence p95 sur 24 h. | Optional: {} | |
historyDays integer | Profondeur de l'historique en jours. | 90 | Enum: [30 90] |
customDomains string array | Vos propres domaines pour la page (pas encore disponible : un manifeste qui en contient n'est pas accepté). | MaxItems: 5 Optional: {} |
StatusPageStatus
StatusPageStatus : adresse publique et acceptation de la page.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
url string | Adresse publique de la page. | Optional: {} | |
observedGeneration integer | Dernière version du manifeste prise en compte. | Optional: {} | |
conditions Condition array | Conditions : Accepted (page valide et publiée). | Optional: {} |
StatusPageGroup
StatusPageGroup : section publique. Chaque Monitor de monitors y est une ligne, sous son displayName ; chaque entrée de components est une ligne sous son propre nom, qui peut réunir plusieurs Monitors.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
name string | Nom public de la section. | MaxLength: 80 MinLength: 1 | |
monitors string array | Noms des Monitor de votre tenant, une ligne chacun. | MaxItems: 50 MinItems: 1 items:Pattern: ^[a-z0-9]([-a-z0-9]\{0,61\}[a-z0-9])?$ Optional: {} | |
components StatusPageComponent array | Lignes nommées, affichées après monitors. | MaxItems: 20 MinItems: 1 Optional: {} |
StatusPageComponent
StatusPageComponent : ligne publique sous son propre nom. Avec un seul Monitor, elle le renomme ; avec plusieurs, elle les combine selon combine.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
name string | Nom public de la ligne. | MaxLength: 80 MinLength: 1 | |
monitors string array | Noms des Monitor de votre tenant. | MaxItems: 10 MinItems: 1 items:Pattern: ^[a-z0-9]([-a-z0-9]\{0,61\}[a-z0-9])?$ | |
combine CombineMode | All (défaut) : et ; Any : ou. | All | Enum: [All Any] Optional: {} |
CombineMode
Type sous-jacent : string
CombineMode : état d'une ligne qui réunit plusieurs Monitors.
Règles de validation :
Enum: [All Any]
| Valeur | Description |
|---|---|
All | CombineAll : opérationnelle seulement si tous les Monitors le sont (et). |
Any | CombineAny : opérationnelle dès qu'un Monitor l'est (ou). |
Status and conditions
status.url gives the public address of the accepted page, for example
https://status.acme.dev.stackngo.app/ or https://status.acme.dev.stackngo.app/interne;
it is empty as long as the page is not accepted.
| Condition | True when | False when |
|---|---|---|
Accepted | the page is admitted and served (reason Accepted) | rejection by the platform; the page responds 404 |
reason | Explanation | Action |
|---|---|---|
Accepted | Page served | — |
MonitorNotFound | A monitor in groups does not exist (the message cites the group and the monitor) | Fix the name, or create the monitor |
Invalid | A monitor appears twice on the page (the message cites both groups) | Keep it on a single line |
NotSupported | customDomains is not available yet | Remove customDomains |
QuotaExceeded | The tier's number of pages is reached (1 on 3XS/2XS, 2 on XS/S, 3 on M, 5 on L, 10 on XL, 20 on 2XL, 50 on 3XL) | Delete a page, or change tier |
In this version, sng kind get StatusPage default shows the saved manifest without the page's
state (# status: not observed yet); check the page by opening it, or with curl.
What happens when you apply
Creation. With the tenant's first accepted page, the platform publishes the address
status.<tenant>.dev.stackngo.app with an HTTPS certificate; allow a few minutes before the
first HTTPS display. In this version, DNS publication of this address is not guaranteed on
all tenants. Subsequent pages share the same address.
Content served.
| Path | Content |
|---|---|
/ and /<nom> | HTML page (no JavaScript), 30 s browser cache |
/api/v1/summary.json, /api/v1/pages/<nom>/summary.json | same content in JSON, callable from any site |
/badge/<moniteur>.svg | state badge of a monitor listed by an accepted page |
A component's state comes from the monitor; uptimes are recalculated every 30 seconds, the
history every 10 minutes. Each IP address is limited to 5 requests per second (429
response beyond that).
Update. A new sng apply changes the page; the display follows in less than a minute.
What happens when you delete
sng kind delete StatusPage default: the page responds 404. When the tenant no longer has any
accepted page, the status.<tenant>… address is removed. The monitors' measurements are not
affected.
Common errors
| Symptom | Cause | Fix |
|---|---|---|
404 page introuvable | Page rejected (MonitorNotFound, NotSupported, QuotaExceeded), wrong page name in the URL, or page named healthz | Fix the page; check /<nom> |
sng apply rejects: spec.logoURL … should match '^https://' | Logo over http:// | https:// URL |
sng apply rejects on historyDays | Value other than 30 or 90 | 30 or 90 |
| Component shown as "unknown" | Monitor rejected or without a recent measurement | See Monitor |
The page becomes 404 after a monitor is deleted | A listed monitor no longer exists (MonitorNotFound) | Remove the monitor from the page in the same sng apply |
503 statut momentanément indisponible | The measurement storage is not responding | Try again |
See also
- Guides: Status page, Uptime monitors
- CLI:
sng template,sng apply - Other kinds:
Monitor,NotificationChannel,MaintenanceWindow