Aller au contenu principal

Page de statut

Bêta

Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.

La supervision est en cours de déploiement ; les domaines personnalisés et les fenêtres de maintenance ne sont pas encore disponibles.

Une page de statut montre publiquement l'état de vos services, leur disponibilité sur 24 h, 30 et 90 jours, et un historique jour par jour. Elle est servie par la plateforme à l'adresse https://status.<tenant>.dev.stackngo.app/, à partir de vos moniteurs.

Prérequis​

  • Une session de tenant (sng tenant use acme) et le droit deploy:write.
  • Au moins un moniteur.

1. Publier la page​

infra/StatusPage/default.yml
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default # "default" : servie à la racine de status.<tenant>…
spec:
title: État des services Acme
groups: # sections publiques, dans l'ordre d'affichage
- name: API
monitors: [api] # une ligne par moniteur, sous son displayName
- name: Site web
components: # lignes nommées (voir « Regrouper et nommer les lignes »)
- name: Site web
monitors: [www, www-assets]
sng apply infra/StatusPage/default.yml

Il n'y a pas de commande sng dédiée : partez du gabarit sng template gen StatusPage default > status.yml, puis sng apply.

La page est en ligne quelques instants plus tard :

https://status.acme.dev.stackngo.app/

2. Ce que la page affiche​

  • Un état global : « Tous les services sont opérationnels », « Incident en cours sur certains services » ou « Certains services ne remontent pas de mesures ».

  • Par section, une ligne par moniteur de monitors (sous son displayName, ou son nom) et une ligne par entrée de components (sous son name), avec son état (opérationnel, panne, inconnu, suspendu) et sa disponibilité sur 24 h, 30 j et 90 j.

  • Un historique par jour sur historyDays jours (30 ou 90, défaut 90).

  • La latence p95 sur 24 h si showLatency: true.

  • En pied de page, la mention « Powered by stackngo ».

La page n'affiche jamais les cibles (URL, hôtes, ports) : seulement les libellés. Choisissez des displayName présentables (« API publique », pas api-prod-gra), ou nommez les lignes avec components.

3. Regrouper et nommer les lignes​

Une entrée de components est une ligne publique sous son propre name.

Nommer une ligne : avec un seul moniteur, la ligne affiche name au lieu du displayName du moniteur. Le moniteur garde son displayName pour vos alertes.

Réunir plusieurs moniteurs en une ligne : avec plusieurs moniteurs (10 au plus), la ligne combine leurs états selon combine :

combineLa ligne est opérationnelle…Usage
All (défaut)si tous les moniteurs le sont : un seul en panne suffit à passer la ligne en panneUn service qui dépend de plusieurs points (API publique et sa base)
Anysi au moins un moniteur l'estDes points redondants (deux régions, deux frontaux)
infra/StatusPage/default.yml
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default
spec:
title: État des services Acme
groups:
- name: API
components:
- name: API publique # une seule ligne pour deux sondes
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 # renomme le moniteur db-prod
monitors: [db-prod]

Pour une ligne combinée, la disponibilité sur 24 h, 30 j, 90 j et l'historique sont calculés sur l'état combiné, minute par minute (heure par heure au-delà de 24 h), et non comme une moyenne des moniteurs. La latence p95 affichée est celle du moniteur le plus lent.

Dans une section, les lignes de monitors s'affichent avant celles de components. Un moniteur ne peut figurer qu'une seule fois par page.

Les badges restent par moniteur : /badge/api-ready.svg fonctionne pour un moniteur affiché au sein d'une ligne combinée.

4. Plusieurs pages​

Une page nommée autrement que default est servie sous un chemin :

metadata.nameAdresse
defaulthttps://status.acme.dev.stackngo.app/
internehttps://status.acme.dev.stackngo.app/interne

Le nombre de pages dépend du tier : 1 en 3XS et 2XS, 2 en XS et S, 3 en M… Voir Tiers et quotas.

Une page « interne » reste publique

Toutes les pages sont accessibles sans authentification. Ne listez sur une page que ce que vous acceptez de montrer.

5. Résumé JSON et badges​

Chaque page expose son contenu en JSON, pour l'intégrer ailleurs :

curl -s https://status.acme.dev.stackngo.app/api/v1/summary.json # page default
curl -s https://status.acme.dev.stackngo.app/summary.json # même document, à la racine
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"
}

Les valeurs d'uptime vont de 0 à 1. États possibles : operational, outage, unknown, paused. La réponse autorise les appels depuis n'importe quel site (CORS).

Un badge SVG par moniteur affiché sur une page :

![statut API](https://status.acme.dev.stackngo.app/badge/api.svg)

Le badge porte « statut | opérationnel », « panne », « suspendu » ou « inconnu ». Un moniteur qui ne figure sur aucune page publiée n'a pas de badge (404).

Vérification​

curl -s -o /dev/null -w '%{http_code}\n' https://status.acme.dev.stackngo.app/
200

Un 404 (« page introuvable ») signifie que la page n'existe pas ou a été refusée par la plateforme (voir « Erreurs fréquentes »).

Fenêtres de maintenance​

À venir

Fonctionnalité en préparation. Cette page décrit l'interface cible pour recueillir vos retours ; rien n'est encore utilisable.

Le manifeste MaintenanceWindow est accepté par sng apply pour figer le format, mais il n'a aucun effet dans cette version : les alertes ne sont pas silencées, l'état « maintenance » n'apparaît pas sur la page et la fenêtre n'est pas exclue du calcul d'uptime. Pour éviter les alertes pendant une intervention, suspendez les moniteurs concernés (paused: true) : ils apparaissent alors « suspendu » sur la page.

Pour aller plus loin​

  • Délais : l'état d'un moniteur est relu à chaque affichage, mais la page peut rester en cache 30 secondes dans le navigateur ; les uptimes sont recalculés toutes les 30 secondes, l'historique toutes les 10 minutes.
  • Débit : 5 requêtes par seconde et par adresse IP (rafales tolérées) ; au-delà, 429.
  • Domaine personnalisé : customDomains existe dans le format, mais une page qui en déclare est refusée (NotSupported) dans cette version. Retirez le champ.
  • Moniteur supprimé : il disparaît de la page ; une page qui le liste encore reste servie sans lui (WaitingForMonitor). Mettez la page à jour dans le même sng apply.
  • Adresse de la page : le nom status est réservé sous la zone de votre tenant ; une App ou un site ne peut pas l'utiliser.
  • Nom de page : évitez healthz, qui correspond à une route technique de la plateforme (la page ne serait pas servie).

Erreurs fréquentes​

SymptômeCauseCorrection
404 page introuvable sur l'adressePage refusée : moniteur affiché deux fois (Invalid), customDomains renseigné (NotSupported), ou nombre de pages du tier dépassé (QuotaExceeded)Corriger la liste des moniteurs, retirer customDomains, supprimer une page
L'adresse ne résout pas ou le certificat est invalideLe certificat de status.<tenant> est émis à la première page acceptée (quelques minutes) ; la publication DNS de cette adresse n'est pas garantie sur tous les tenants dans cette versionRéessayer plus tard ; si cela dure, contacter le support
503 statut momentanément indisponibleLes mesures sont momentanément indisponiblesRéessayer quelques instants plus tard
Un composant reste « inconnu »Moniteur refusé (intervalle, cible, quota) ou sans mesure récenteVoir Moniteurs
sng apply refuse : spec.groups: … should have at least 1 itemsPage sans sectionAu moins une section
sng apply refuse : monitors ou components requisSection videLister des moniteurs dans monitors ou components
sng apply refuse : combine … Unsupported valueValeur de combine inconnueAll ou Any

Voir aussi​