Aller au contenu principal

StatusPage

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 ne sont pas encore disponibles.

apiVersionmonitoring.stackngo.io/v1alpha1
kindStatusPage
Appliqué parsng apply
Commandes liéessng template gen StatusPage, sng apply, sng kind list StatusPage, sng kind delete StatusPage NAME

À quoi ça sert​

Une StatusPage publie, sans authentification, l'état de vos Monitor regroupés en composants : état courant, disponibilité sur 24 h, 30 et 90 jours, historique jour par jour et, en option, latence. L'adresse découle du tenant : https://status.<tenant>.dev.stackngo.app/ pour la page default, et https://status.<tenant>.dev.stackngo.app/<nom> pour les autres. La page n'affiche jamais les cibles sondées, seulement les libellés.

Exemple minimal​

default.yml
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/

Exemple complet commenté​

default.yml
apiVersion: monitoring.stackngo.io/v1alpha1
kind: StatusPage
metadata:
name: default # "default" : racine de status.<tenant>… ; sinon /<nom>
spec:
title: État des services Acme # titre de la page, 1 à 120 caractères
logoURL: https://www.example.com/logo.png # logo d'en-tête, https uniquement
groups: # sections, dans l'ordre d'affichage (1 à 50)
- name: API # nom public de la section (80 car. max), unique dans la page
monitors: [api-docs] # une ligne par Monitor, sous son displayName (1 à 50)
components: # lignes nommées, après monitors (1 à 20)
- name: API publique # nom public de la ligne (80 car. max), unique dans la section
monitors: [api, api-auth] # 1 à 10 Monitors réunis en une ligne
combine: All # All (défaut) : tous opérationnels ; Any : au moins un
- name: Site web
components:
- name: Site vitrine # un seul Monitor : renomme la ligne
monitors: [www]
showLatency: true # affiche la latence p95 sur 24 h (défaut false)
historyDays: 90 # profondeur de l'historique : 30 ou 90 (défaut 90)
# customDomains: [status.example.com] # pas encore disponible : la page serait refusée

Champs​

Règles de validation croisées​

Le schéma refuse, dès sng apply :

  • title vide ou de plus de 120 caractères ; logoURL qui ne commence pas par https:// ;
  • groups vide ou de plus de 50 groupes, un groupe sans monitors ni components (« monitors ou components requis »), plus de 50 moniteurs dans monitors, plus de 20 components ou plus de 10 moniteurs par composant, un nom de moniteur qui n'est pas un label DNS, un combine autre que All ou Any ; les noms de groupes doivent en outre être uniques dans la page, et ceux des composants dans leur groupe ;
  • historyDays autre que 30 ou 90 ; plus de 5 customDomains.

Un moniteur listé qui n'existe pas (encore) dans le tenant ne fait pas refuser la page : elle est servie avec les moniteurs présents et passe Ready=False (WaitingForMonitor) jusqu'à la création du moniteur, sans action de votre part.

La plateforme refuse en plus, après application (Accepted=False, page non servie) :

  • un moniteur affiché deux fois sur la page, dans monitors ou components (Invalid) ;
  • un customDomains renseigné (NotSupported) ;
  • une page au-delà du nombre autorisé par le tier : les plus récentes sont refusées (QuotaExceeded).

Un moniteur qui existe mais est refusé reste listé : il s'affiche « inconnu ».

StatusPage​

StatusPage publie une page de statut qui affiche l'état et l'historique de vos monitors.

ChampDescriptionDéfautValidation
apiVersion stringmonitoring.stackngo.io/v1alpha1
kind stringStatusPage
metadata ObjectMetaSeul 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.

ChampDescriptionDéfautValidation
title stringTitre affiché en tête de page.MaxLength: 120
MinLength: 1
logoURL stringLogo affiché en en-tête (https).MaxLength: 2048
Pattern: ^https://
Optional: {}
groups StatusPageGroup arrayComposants affichés, dans l'ordre.MaxItems: 50
MinItems: 1
showLatency booleanAffiche la latence p95 sur 24 h.Optional: {}
historyDays integerProfondeur de l'historique en jours.90Enum: [30 90]
customDomains string arrayVos 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.

ChampDescriptionDéfautValidation
url stringAdresse publique de la page.Optional: {}
observedGeneration integerDernière version du manifeste prise en compte.Optional: {}
conditions Condition arrayConditions : 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.

ChampDescriptionDéfautValidation
name stringNom public de la section.MaxLength: 80
MinLength: 1
monitors string arrayNoms 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 arrayLignes 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.

ChampDescriptionDéfautValidation
name stringNom public de la ligne.MaxLength: 80
MinLength: 1
monitors string arrayNoms des Monitor de votre tenant.MaxItems: 10
MinItems: 1
items:Pattern: ^[a-z0-9]([-a-z0-9]\{0,61\}[a-z0-9])?$
combine CombineModeAll (défaut) : et ; Any : ou.AllEnum: [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]
ValeurDescription
AllCombineAll : opérationnelle seulement si tous les Monitors le sont (et).
AnyCombineAny : opérationnelle dès qu'un Monitor l'est (ou).

Statut et conditions​

status.url donne l'adresse publique de la page acceptée, par exemple https://status.acme.dev.stackngo.app/ ou https://status.acme.dev.stackngo.app/interne ; il est vide tant que la page n'est pas acceptée.

ConditionTrue quandFalse quand
Acceptedla page est admise et servie (raison Accepted)refus de la plateforme ; la page répond 404
Readyla page est complèteun moniteur listé n'existe pas encore (WaitingForMonitor) : la page est servie sans lui
reasonExplicationAction
AcceptedPage servie—
WaitingForMonitorUn moniteur de groups n'existe pas (le message cite le groupe et le moniteur) ; la page affiche les moniteurs présentsCorriger le nom, ou créer le moniteur : la page se complète seule
InvalidUn moniteur figure deux fois sur la page (le message cite les deux groupes)Ne le garder que sur une ligne
NotSupportedcustomDomains n'est pas encore disponibleRetirer customDomains
QuotaExceededNombre de pages du tier atteint (1 en 3XS/2XS, 2 en XS/S, 3 en M, 5 en L, 10 en XL, 20 en 2XL, 50 en 3XL)Supprimer une page, ou changer de tier

Dans cette version, sng kind get StatusPage default affiche le manifeste enregistré sans l'état de la page (# status: not observed yet) ; vérifiez la page en l'ouvrant, ou avec curl.

Ce qui se passe à l'application​

Création. À la première page acceptée du tenant, la plateforme publie l'adresse status.<tenant>.dev.stackngo.app avec un certificat HTTPS ; comptez quelques minutes avant le premier affichage en HTTPS. Dans cette version, la publication DNS de cette adresse n'est pas garantie sur tous les tenants. Les pages suivantes partagent la même adresse.

Contenu servi.

CheminContenu
/ et /<nom>page HTML (sans JavaScript), cache navigateur 30 s
/api/v1/summary.json, /api/v1/pages/<nom>/summary.jsonmême contenu en JSON, appelable depuis n'importe quel site
/badge/<moniteur>.svgbadge d'état d'un moniteur listé par une page acceptée

L'état d'un composant vient du moniteur ; les uptimes sont recalculés toutes les 30 secondes, l'historique toutes les 10 minutes. Chaque adresse IP est limitée à 5 requêtes par seconde (réponse 429 au-delà).

Mise à jour. Un nouveau sng apply modifie la page ; l'affichage suit en moins d'une minute.

Ce qui se passe quand vous supprimez​

sng kind delete StatusPage default : la page répond 404. Quand le tenant n'a plus aucune page acceptée, l'adresse status.<tenant>… est retirée. Les mesures des moniteurs ne sont pas touchées.

Erreurs fréquentes​

SymptômeCauseCorrection
404 page introuvablePage refusée (NotSupported, QuotaExceeded), nom de page faux dans l'URL, ou page nommée healthzCorriger la page ; vérifier /<nom>
sng apply refuse : spec.logoURL … should match '^https://'Logo en http://URL https://
sng apply refuse sur historyDaysValeur autre que 30 ou 9030 ou 90
Composant « inconnu »Moniteur refusé ou sans mesure récenteVoir Monitor
Un composant manque après la suppression d'un moniteurUn moniteur listé n'existe plus (WaitingForMonitor) ; la page reste servie sans luiRetirer le moniteur de la page dans le même sng apply
503 statut momentanément indisponibleLe stockage des mesures ne répond pasRéessayer

Voir aussi​