NotificationChannel
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 ; le type Email n'est pas encore disponible.
apiVersion | monitoring.stackngo.io/v1alpha1 |
kind | NotificationChannel |
| Appliqué par | sng apply |
| Commandes liées | sng template gen NotificationChannel, sng apply, sng kind list NotificationChannel, sng kind delete NotificationChannel NAME ; sng monitor create --channel NAME pour y relier un moniteur |
À quoi ça sert
Un NotificationChannel est une destination d'alertes : un webhook HTTPS, un canal Slack,
Discord ou Microsoft Teams, ou des adresses e-mail. Les Monitor le
référencent par son nom dans notificationChannelRefs. Quand l'un d'eux tombe, revient, ou
que son certificat TLS approche de l'expiration, le canal reçoit une notification, puis un
rappel toutes les repeatInterval tant que l'incident dure.
Exemple minimal
apiVersion: monitoring.stackngo.io/v1alpha1
kind: NotificationChannel
metadata:
name: ops
spec:
type: Webhook
webhook:
url: https://hooks.example.com/uptime
sng apply ops.yml
sng monitor create api --http https://api.example.com/health --interval 5m --channel ops
Exemple complet commenté
apiVersion: monitoring.stackngo.io/v1alpha1
kind: NotificationChannel
metadata:
name: slack # nom référencé par les moniteurs (label DNS)
spec:
type: Slack # Webhook, Slack, Discord, MSTeams ou Email
slack:
webhookSecretRef: # l'URL Slack est un secret : jamais en clair
name: slack-webhook # secret du tenant
key: value # clé qui contient l'URL https://hooks.slack.com/…
channel: "#ops" # optionnel : canal ou @utilisateur
sendResolved: true # notifie aussi le retour à la normale (défaut true)
repeatInterval: 4h # rappel tant que l'alerte dure : <entier>m ou <entier>h (défaut 4h)
Autres destinations :
spec:
type: Discord # MSTeams : même forme, bloc "msteams"
discord:
url: https://discord.com/api/webhooks/123/abc # ou urlSecretRef: {name, key}
---
spec:
type: Webhook
webhook:
urlSecretRef: { name: ops-webhook, key: value }
---
spec:
type: Email # pas encore disponible (NotSupported)
email:
to: [ops@example.com, astreinte@example.com] # 1 à 10 adresses
Champs
Règles de validation croisées
Le schéma refuse, dès sng apply :
- un bloc de destination qui ne correspond pas au
type:webhookest requis pourWebhooket interdit sinon ; de mêmeslack,discord,msteamsetemail; - pour
webhook,discordetmsteams: niurlniurlSecretRef, ou les deux ; - une
urlqui ne commence pas parhttps://(2048 caractères au plus) ; slack.channelhors de la forme#nom,@nomounom(minuscules, chiffres,-_., 80 caractères au plus) ;email.tovide, de plus de 10 adresses, ou une adresse sans@ni domaine ;repeatIntervalqui n'est pas un entier suivi demouh.
La plateforme refuse en plus, après application (Accepted=False) :
- un canal
Emailtant qu'aucun relais e-mail n'est configuré (NotSupported) ; - un canal au-delà du nombre autorisé par le tier : les plus récents sont refusés (
QuotaExceeded) ; - un canal dont le secret référencé est introuvable ou n'a pas de valeur sous la clé indiquée
(
SecretNotFound), ou dont la valeur n'est pas une URLhttps://(Invalid). Seul ce canal est écarté : les autres canaux du tenant continuent d'envoyer leurs alertes.
NotificationChannel
NotificationChannel déclare une destination pour les alertes de vos monitors.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
apiVersion string | monitoring.stackngo.io/v1alpha1 | ||
kind string | NotificationChannel | ||
metadata ObjectMeta | Seul metadata.name est à renseigner (nom de la ressource dans votre tenant). | ||
spec NotificationChannelSpec | |||
status NotificationChannelStatus |
NotificationChannelSpec
NotificationChannelSpec décrit où envoyer les alertes de vos monitors. Renseignez le bloc qui correspond à type, et lui seul.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
type ChannelType | Type de destination. | Enum: [Webhook Slack Discord MSTeams Email] | |
webhook URLDestination | URL appelée en POST à chaque alerte (type Webhook). | Optional: {} | |
slack SlackDestination | Webhook entrant Slack (type Slack). | Optional: {} | |
discord URLDestination | Webhook Discord (type Discord). | Optional: {} | |
msteams URLDestination | Webhook Microsoft Teams (type MSTeams). | Optional: {} | |
email EmailDestination | Destinataires e-mail (type Email). | Optional: {} | |
sendResolved boolean | Notifie aussi le retour à la normale. | true | |
repeatInterval string | Rappel tant que l'alerte reste active. | 4h | Pattern: ^([1-9][0-9]*)(m|h)$ |
NotificationChannelStatus
NotificationChannelStatus : acceptation du canal par la plateforme.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
observedGeneration integer | Dernière version du manifeste prise en compte. | Optional: {} | |
conditions Condition array | Conditions : Accepted (canal valide et utilisable). | Optional: {} |
ChannelType
Type sous-jacent : string
ChannelType : destination des notifications : Webhook, Slack, Discord, MSTeams ou Email.
Règles de validation :
Enum: [Webhook Slack Discord MSTeams Email]
| Valeur | Description |
|---|---|
Webhook | Appel HTTP vers l'adresse de votre choix. |
Slack | Message dans un canal Slack. |
Discord | Message dans un canal Discord. |
MSTeams | Message dans un canal Microsoft Teams. |
Email | Courriel envoyé aux adresses indiquées. |
URLDestination
URLDestination : URL https, en clair ou lue dans un secret de votre tenant (exactement l'un des deux).
| Champ | Description | Défaut | Validation |
|---|---|---|---|
url string | URL https en clair. | MaxLength: 2048 Optional: {} | |
urlSecretRef SecretKeySelector | Clé d'un secret de votre tenant qui contient l'URL (recommandé quand l'URL vaut un jeton). | Optional: {} |
SlackDestination
SlackDestination : webhook entrant Slack. Son URL est secrète : elle est toujours lue dans un secret.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
webhookSecretRef SecretKeySelector | Clé d'un secret de votre tenant qui contient l'URL du webhook. | ||
channel string | Canal Slack (#canal ou @utilisateur). Vide : canal du webhook. | Pattern: ^[#@]?[-_a-z0-9.]\{1,80\}$ Optional: {} |
EmailDestination
EmailDestination : alertes envoyées par e-mail par la plateforme.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
to string array | Adresses des destinataires (1 à 10). | MaxItems: 10 MinItems: 1 items:Pattern: ^[^@\s]+@[^@\s]+\.[^@\s]+$ |
SecretKeySelector
SecretKeySelector désigne une clé d'un secret de votre tenant.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
name string | Name est le nom du secret. | Pattern: ^[a-z0-9]([-.a-z0-9]\{0,251\}[a-z0-9])?$ | |
key string | Key est la clé du secret qui contient la valeur. | Pattern: ^[-._a-zA-Z0-9]\{1,253\}$ |
Statut et conditions
| Condition | True quand | False quand |
|---|---|---|
Accepted | le canal est admis (raison Accepted) | refus de la plateforme (raisons ci-dessous) ; les moniteurs qui le référencent restent sondés et attendent ce canal pour leurs alertes (WaitingForChannel) |
reason | Explication | Action |
|---|---|---|
Accepted | Canal admis | — |
QuotaExceeded | Nombre de canaux du tier atteint (2 en 3XS, 5 en 2XS, 10 en XS/S/M, 20 en L/XL, 50 au-delà) | Supprimer un canal, ou changer de tier |
NotSupported | type: Email sans relais e-mail sur la plateforme | Utiliser un webhook |
SecretNotFound | Le secret de urlSecretRef / webhookSecretRef est introuvable, ou n'a pas de valeur sous la clé indiquée. Ce canal n'envoie rien ; les autres ne sont pas affectés | Créer le secret ou corriger name / key ; le canal reprend tout seul |
Invalid | La valeur du secret n'est pas une URL https:// | Corriger la valeur du secret |
Exemple de message pour SecretNotFound : secret "slack-webhook" introuvable ou sans valeur pour la clé "value" : aucune notification n'est envoyée par ce canal, les autres canaux ne sont pas affectés ; le canal reprendra automatiquement une fois le secret créé.
Accepted=True ne garantit pas la livraison : la destination elle-même peut refuser le
message. Dans cette version, sng kind get NotificationChannel ops affiche le manifeste
enregistré sans l'état du canal (# status: not observed yet).
Ce qui se passe à l'application
Création. Le canal est admis puis ajouté à la configuration d'alerte du tenant, dès
qu'au moins un moniteur admis le référence ; un canal sans moniteur n'envoie rien. Les URL
de urlSecretRef / webhookSecretRef sont lues dans les secrets du tenant à ce moment.
Si le secret d'un canal est absent, n'a pas la clé indiquée ou ne contient pas une URL
https://, seul ce canal est écarté (Accepted=False, SecretNotFound ou Invalid) :
les autres canaux et vos autres changements s'appliquent normalement. Le canal reprend tout
seul dès que le secret est corrigé.
Le secret désigné par urlSecretRef ou webhookSecretRef doit être déclaré par un
SSMSecret avec materialize: true : c'est ce qui le rend
utilisable par un canal de notification. Sans ce champ, un secret n'est mis à disposition que
des Apps qui le référencent, et le canal reste écarté (SecretNotFound).
Mise à jour. Un nouveau sng apply remplace la destination ; la configuration d'alerte
est réécrite. Un secret modifié est relu au plus tard dix minutes après.
Ce qui se passe quand vous supprimez
sng kind delete NotificationChannel ops : le canal n'envoie plus rien ; les moniteurs qui le référencent encore restent sondés mais n'alertent plus
(WaitingForChannel). Retirez la référence des moniteurs dans le même sng apply.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
sng apply refuse : webhook : requis pour le type Webhook, interdit sinon | Bloc absent ou d'un autre type | Un seul bloc, celui du type |
sng apply refuse : url ou urlSecretRef : exactement un des deux | Les deux, ou aucun | En garder un |
sng apply refuse : url : https:// requis | http:// | Passer en HTTPS |
Moniteurs en WaitingForChannel après l'ajout d'un canal | Canal refusé (QuotaExceeded, NotSupported) ou nom mal orthographié | Corriger le canal ou le nom |
Canal Accepted=False, SecretNotFound | Secret introuvable, clé absente ou vide, ou secret déclaré sans materialize: true | Déclarer le secret avec materialize: true, corriger name / key ; voir l'encadré ci-dessus |
Canal Accepted=False, Invalid | La valeur du secret n'est pas une URL https:// | Corriger la valeur |
Aucune notification reçue, canal Accepted=True | Aucun moniteur admis ne référence le canal, ou destination qui refuse le message | Vérifier notificationChannelRefs ; tester l'URL avec curl |
| Pas de notification de retour | sendResolved: false, ou moniteur supprimé ou suspendu pendant la panne | sendResolved: true ; laisser le moniteur revenir Up |
Voir aussi
- Guides : Canaux de notification, Moniteurs d'uptime, Créer et lire un secret
- CLI :
sng monitor create --channel,sng template - Autres kinds :
Monitor,StatusPage