Aller au contenu principal

Moniteurs d'uptime

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 : tant qu'elle n'est pas activée sur votre tenant, sng apply refuse les manifestes Monitor.

Un moniteur vérifie à intervalle régulier qu'une cible publique répond : une URL HTTP(S), un port TCP ou un serveur DNS. Son état (Up, Down…) alimente vos notifications et votre page de statut.

Prérequis​

  • La CLI sng authentifiée et une session de tenant : sng tenant use acme.
  • Le droit d'appliquer des manifestes (deploy:write, inclus dans readwrite).
  • Une cible joignable depuis Internet : les adresses privées et les noms internes sont refusés.

1. Créer un moniteur HTTP​

sng monitor create api --http https://api.example.com/health --expect 200 --interval 5m
monitor "api" declared in tenant acme, first checks within a few minutes

Le même moniteur en manifeste :

infra/Monitor/api.yml
apiVersion: monitoring.stackngo.io/v1alpha1
kind: Monitor
metadata:
name: api
spec:
type: HTTP
target: https://api.example.com/health
interval: 5m
http:
expectedStatusCodes: [200]
tls: {} # alerte avant l'expiration du certificat (14 et 3 jours)
sng apply infra/Monitor/api.yml

Pour une URL https://, sng monitor create ajoute tls: {} : vous êtes aussi prévenu avant l'expiration du certificat.

Intervalle et tier

L'intervalle minimal dépend du tier du tenant : 5 minutes en 3XS, 2 minutes en 2XS, 1 minute à partir de XS, 30 secondes à partir de M. sng monitor create utilise 5m par défaut, valide sur tous les tiers ; un intervalle plus court que le minimum du tier est refusé (IntervalBelowTier). Voir Tiers et quotas.

2. Les autres types de check​

# Port TCP
sng monitor create db --tcp db.example.com:5432 --interval 5m

# Serveur DNS : interroge ns1.example.com pour l'enregistrement A de example.com
sng monitor create resolver --dns ns1.example.com --query example.com --interval 5m
TypetargetRéussi quand
HTTPURL http:// ou https://réponse 2xx (ou un code de expectedStatusCodes), corps conforme à bodyMustContain / bodyMustNotContain
TCPhost:portla connexion s'établit (et la négociation TLS si tcp.tls: true)
DNSserveur DNS interrogéle serveur répond à dns.queryName (type dns.queryType, A par défaut) avec le code attendu (NOERROR par défaut)
ICMPhôteping — pas encore disponible : refusé avec NotSupported

Les options propres à chaque type (méthode HTTP, en-têtes, redirections, IPv6…) sont dans la référence des manifestes (Monitor, voir la référence).

3. Régler la sensibilité​

RéglageFlagDéfautEffet
interval--interval5m avec sng monitor create, 1m dans un manifeste30s, 1m, 2m, 5m ou 10m
timeout--timeout10sdurée maximale d'un check, de 1s à 30s, inférieure à interval
failureThreshold--threshold3nombre d'échecs consécutifs (1 à 5) avant de déclarer la cible en panne

Avec interval: 5m et failureThreshold: 3, une panne est détectée après environ 15 à 20 minutes. Baissez le seuil pour réagir plus vite, au prix de fausses alertes sur un incident réseau ponctuel.

4. Lire l'état d'un moniteur​

ÉtatSignification
Pendingmoniteur admis, en attente des premières mesures
Uples checks réussissent
Downla cible échoue depuis failureThreshold checks
Unknownaucune mesure récente, ou moniteur refusé par la plateforme
Pausedmoniteur suspendu (paused: true)

L'état est visible sur votre page de statut (« opérationnel », « panne », « inconnu », « suspendu ») et déclenche les notifications.

État dans la CLI

Dans cette version, sng monitor list et sng kind get Monitor api affichent les moniteurs déclarés, pas encore leur état ni la raison d'un refus (sng kind get indique # status: not observed yet). Pour suivre l'état, publiez une page de statut et reliez un canal de notification.

5. Suspendre, modifier, supprimer​

spec:
paused: true # suspend les checks sans supprimer l'historique

Modifiez le manifeste puis sng apply, ou relancez sng monitor create avec les nouveaux flags (le manifeste est remplacé). Pour supprimer :

sng monitor delete api
⚠ Suppression définitive du Monitor "api".
Tapez « oui » pour confirmer : oui
deleted: api

Vérification​

sng monitor list

La liste affiche chaque moniteur déclaré (NAME) et la date de sa dernière modification (UPDATED). Puis, quelques minutes plus tard, la page de statut montre le moniteur « opérationnel ».

Pour aller plus loin​

  • Cibles refusées : adresses privées, de bouclage, lien-local, CGNAT (100.64.0.0/10), noms sans point, et noms internes (.local, .internal…). Pour surveiller une App du tenant, utilisez son URL publique (https://<service>-<app>.acme.dev.stackngo.app/).
  • Nombre de moniteurs : borné par le tier (10 en 3XS, 25 en 2XS, 50 en XS…). Au-delà, les moniteurs les plus récents sont refusés (QuotaExceeded) ; les plus anciens continuent.
  • Origine des checks : les vérifications partent de la région gra. Le champ quorum est prévu pour des vérifications depuis plusieurs régions ; il est sans effet aujourd'hui.
  • En-têtes HTTP : Host, Authorization, Cookie et quelques autres sont refusés, et les valeurs d'en-têtes sont en clair : n'y mettez jamais de secret. Surveillez plutôt une route publique de santé.
  • Historique : il est conservé hors du manifeste ; suspendre un moniteur ne l'efface pas.
  • Changement d'état : le moniteur passe Down quand ses failureThreshold derniers checks ont tous échoué, et revient Up dès que les checks réussissent de nouveau.

Erreurs fréquentes​

SymptômeCauseCorrection
sng apply refuse : type HTTP : target doit être une URL http(s)://URL sans schémahttps://…
sng apply refuse : seul le type HTTP accepte une URL : TCP host:port, ICMP/DNS hostURL donnée à un check TCP ou DNShost:port pour TCP, nom d'hôte pour DNS
sng apply refuse : timeout doit être inférieur à intervaltimeout: 30s avec interval: 30sBaisser timeout
sng monitor create : exactly one of --http, --tcp or --dns is requiredAucune cible, ou plusieursUne seule cible par moniteur
Moniteur « inconnu » sur la page de statut bien au-delà de quelques minutesRefusé par la plateforme : intervalle sous le minimum du tier, cible interne, ICMP, quota atteint, canal inconnuVérifier ces points ; la raison du refus n'est pas encore affichée par la CLI
Moniteur Down alors que le service répond dans le navigateurCode de retour hors expectedStatusCodes (une redirection 301 suivie aboutit ailleurs), texte bodyMustContain absent, IPv4 indisponibleVérifier la réponse avec curl -i ; ajuster expectedStatusCodes ou ipFamily

Voir aussi​