Moniteurs d'uptime
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
sngauthentifiée et une session de tenant :sng tenant use acme. - Le droit d'appliquer des manifestes (
deploy:write, inclus dansreadwrite). - 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 :
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.
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
| Type | target | Réussi quand |
|---|---|---|
HTTP | URL http:// ou https:// | réponse 2xx (ou un code de expectedStatusCodes), corps conforme à bodyMustContain / bodyMustNotContain |
TCP | host:port | la connexion s'établit (et la négociation TLS si tcp.tls: true) |
DNS | serveur DNS interrogé | le serveur répond à dns.queryName (type dns.queryType, A par défaut) avec le code attendu (NOERROR par défaut) |
ICMP | hôte | ping — 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églage | Flag | Défaut | Effet |
|---|---|---|---|
interval | --interval | 5m avec sng monitor create, 1m dans un manifeste | 30s, 1m, 2m, 5m ou 10m |
timeout | --timeout | 10s | durée maximale d'un check, de 1s à 30s, inférieure à interval |
failureThreshold | --threshold | 3 | nombre 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
| État | Signification |
|---|---|
Pending | moniteur admis, en attente des premières mesures |
Up | les checks réussissent |
Down | la cible échoue depuis failureThreshold checks |
Unknown | aucune mesure récente, ou moniteur refusé par la plateforme |
Paused | moniteur suspendu (paused: true) |
L'état est visible sur votre page de statut (« opérationnel », « panne », « inconnu », « suspendu ») et déclenche les notifications.
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 en2XS, 50 enXS…). 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 champquorumest prévu pour des vérifications depuis plusieurs régions ; il est sans effet aujourd'hui. - En-têtes HTTP :
Host,Authorization,Cookieet 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
Downquand sesfailureThresholdderniers checks ont tous échoué, et revientUpdès que les checks réussissent de nouveau.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
sng apply refuse : type HTTP : target doit être une URL http(s):// | URL sans schéma | https://… |
sng apply refuse : seul le type HTTP accepte une URL : TCP host:port, ICMP/DNS host | URL donnée à un check TCP ou DNS | host:port pour TCP, nom d'hôte pour DNS |
sng apply refuse : timeout doit être inférieur à interval | timeout: 30s avec interval: 30s | Baisser timeout |
sng monitor create : exactly one of --http, --tcp or --dns is required | Aucune cible, ou plusieurs | Une seule cible par moniteur |
| Moniteur « inconnu » sur la page de statut bien au-delà de quelques minutes | Refusé par la plateforme : intervalle sous le minimum du tier, cible interne, ICMP, quota atteint, canal inconnu | Vé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 navigateur | Code de retour hors expectedStatusCodes (une redirection 301 suivie aboutit ailleurs), texte bodyMustContain absent, IPv4 indisponible | Vérifier la réponse avec curl -i ; ajuster expectedStatusCodes ou ipFamily |