Aller au contenu

Services : HTTP, TCP, DNS, ping, TLS, NTP, UDP, SSH, SMTP, IMAP, POP3, SQL, MQTT, WebSocket

Quinze types de surveillance couvrent des services plutôt que du matériel, à la façon d’Uptime Kuma : une page web, un port, un nom DNS, un hôte, un certificat, un serveur de temps, un relais mail ou une boîte aux lettres, une base de données, un courtier MQTT, un point de terminaison WebSocket, un port UDP, un serveur SSH. Chaque service obtient une barre d’historique, un temps de réponse et un pourcentage de disponibilité sur sa page de surveillance.

Les cinq derniers vont plus loin que l’ouverture d’une connexion : ils démarrent une vraie session dans le propre protocole du service. C’est la différence entre « le port 5432 est ouvert » et « la base de données accepte toujours mon compte et répond à une requête ». NTP se trouve entre les deux : une seule requête et réponse, dans le propre protocole de NTP, assez pour lire l’horloge du serveur sans session.

Surveillances > ⋯ > Importer depuis Uptime Kuma, aussi sur Surveillances > Ajouter une surveillance > Import (administrateurs), lit la base d’Uptime Kuma 1.x ou 2.x, ou la sauvegarde JSON de la 1.x. Rien n’est créé avant que vous ayez vu l’aperçu : ce qui sera créé, et ce qui est ignoré avec la raison. Cochez les surveillances voulues, puis importez-les en un clic.

Uptime Kuma 2.x n’a plus d’export de sauvegarde : exportez donc sa base. Arrêtez le conteneur (pour que le fichier soit complet), copiez kuma.db hors du dossier de données, puis choisissez-le dans la fenêtre.

Fenêtre de terminal
docker stop uptime-kuma
docker cp uptime-kuma:/app/data/kuma.db .
docker start uptime-kuma
  • Le fichier est envoyé, lu une seule fois en lecture seule depuis une copie temporaire qui n’est jamais rattachée à la base de DumbMonit, puis supprimé aussitôt. Il peut peser jusqu’à 512 Mo (il contient tout l’historique des mesures) ; seuls les moniteurs, groupes, étiquettes, intervalles et le nombre de notifications en sont lus.
  • Uptime Kuma 2 installé sur MariaDB n’est pas pris en charge : seul le fichier SQLite kuma.db peut être importé.
  • La sauvegarde JSON de la 1.x (Réglages > Sauvegarde > Exporter, 4 Mo au plus) fonctionne toujours, avec le même aperçu.
Uptime KumaDumbMonit
HTTP(s), HTTP(s) - Mot-clé, HTTP(s) - Requête JSONHTTP : codes acceptés, méthode, mot-clé (et son inverse), chemin JSON et valeur attendue, redirections, délai, erreurs TLS ignorées
PingPing
Port TCPTCP, sous la forme hôte:port
DNSDNS : type d’enregistrement et résolveur
PushBattement de cœur, période attendue = l’intervalle de la surveillance. Il reçoit une nouvelle URL : mettez à jour la tâche qui l’appelle
GroupeUn dossier (les groupes imbriqués donnent Groupe/Sous-groupe)
ÉtiquettesÉtiquettes de la surveillance : nom=valeur, ou nom=true pour une étiquette sans valeur
En pauseCréé désactivé

Le nom et l’intervalle sont conservés (10 s au minimum). Tout le reste est ignoré et listé : Docker et les autres types sans équivalent, et les surveillances en mode inversé. Une surveillance déjà suivie (même type, même adresse) est ignorée aussi : on peut donc importer deux fois le même fichier sans risque.

Non importés : les notifications (configurez vos canaux dans Notifications ; l’aperçu indique combien le fichier en contenait), ainsi que les identifiants, en-têtes personnalisés et corps de requête, qui ne sont jamais lus par DumbMonit. Si un site surveillé demande une connexion ou un en-tête, ajoutez-le ensuite sur la surveillance.

Un service peut répondre et être en panne quand même : un 500, un mot- clé manquant, un certificat expiré. Ces surveillances écrivent donc un point à chaque vérification, probe_success étant 1 ou 0, plutôt que de devenir silencieux comme un appareil matériel. C’est ce qui rend un pourcentage de disponibilité possible : avg_over_time(dumbmonit_probe_success[30d]).

SituationCe qui se passe
Option ou adresse invalide, sockets ICMP non autorisées (voir Ping)Erreur de configuration : rien n’est écrit, la page de la surveillance montre l’erreur, aucune alerte « en panne ».
Connexion refusée, délai dépassé, TLS refusé, 500, mot-clé absent, perte totale de paquets, mot de passe refusé, requête échouéeprobe_success = 0 : la panne est enregistrée, datée et comptée.
Tout va bienprobe_success = 1.

Chaque surveillance a son propre délai (timeout_seconds, 5 s par défaut, 60 s au plus), plus court que le DUMBMONIT_PROBE_TIMEOUT_SECS du serveur : interrompu par le planificateur, il ne pourrait pas écrire son zéro.

Règles intégrées qui s’appliquent aux quinze : Service en panne (3 minutes), Service instable (plus de six changements d’état en trente minutes), Service lent (plus de 3 s pendant dix minutes). Pour chaque vérification qui lit un certificat — http, tls, smtp, imap, pop3, mqtt, websocket : Certificat arrivant à expiration (14 jours) et Certificat expiré.

Un mot de passe refusé n’est jamais une panne du service : il est enregistré comme reason="auth", l’alerte dit donc quoi corriger.

Toutes des jauges, toutes préfixées dumbmonit_, toutes étiquetées probe="http|tcp|dns|ping|tls|smtp|postgres|mysql|mqtt|websocket|ntp|udp|ssh|imap|pop3|snmp_oid|radius|grpc" en plus de target, host et tag_*.

MétriqueSurveillancesSignification
probe_successtous1 si le service répond correctement, 0 sinon.
probe_duration_secondstousDurée totale de la vérification.
probe_failure_infotousPrésence (1) avec un label reason : dns, connect, timeout, tls, cert_expired, status, keyword, json, body, packet_loss, record, auth, protocol, query, payload, unsynchronized, clock_offset, host_key, threshold, not_found, bad_secret, unhealthy.
probe_http_status_codehttp, websocketCode de statut obtenu.
probe_http_first_byte_secondshttpTemps jusqu’aux en-têtes de réponse.
probe_http_phase_seconds{phase}httpTemps de la requête mesurée réparti en dns, connect, tls, processing et transfer ; les cinq somment toujours au temps de la requête (voir Décomposition du temps de réponse).
probe_http_content_byteshttpTaille du corps.
probe_http_security_header{header}http0/1 par étiquette header (https seulement) : HSTS, nosniff, CSP, X-Frame-Options, frame-ancestors.
probe_connect_secondstous sauf dns, ping, ntp et udpÉtablissement de connexion (connexion incluse pour les bases de données).
probe_tls_handshake_secondstls, http, smtp, imap, pop3, mqtt, websocketNégociation TLS seule.
probe_tls_version_infotls, http, smtp, imap, pop3, mqtt, websocketPrésence ; label version.
probe_ssl_cert_expiry_daystls, http, smtp, imap, pop3, mqtt, websocketJours avant expiration, négatif si expiré.
probe_ssl_cert_validtls, http, smtp, imap, pop3, mqtt, websocket1 si la chaîne mène à une autorité connue.
probe_ssl_cert_issuer_infotls, http, smtp, imap, pop3, mqtt, websocketPrésence ; label issuer.
probe_dns_lookup_secondsdnsTemps de résolution.
probe_dns_answer_recordsdnsEnregistrements du type demandé.
probe_dns_answer_fingerprintdnsAvec « Alerter quand la réponse change » : une empreinte 32 bits de la réponse triée. Sa valeur ne signifie rien ; seuls ses changements comptent.
probe_icmp_rtt_seconds, _min_seconds, _max_secondspingAller-retour moyen, le plus court et le plus long.
probe_icmp_packet_loss_ratiopingPerte entre 0 et 1.
probe_icmp_packets_sent, probe_icmp_packets_receivedpingÉchos envoyés et reçus.
probe_smtp_greeting_secondssmtpTemps jusqu’à la bannière 220.
probe_smtp_ehlo_secondssmtpAller-retour de la commande EHLO.
probe_smtp_capabilitiessmtpExtensions annoncées.
probe_smtp_authenticatedsmtp1 quand AUTH a réussi.
probe_sql_query_secondspostgres, mysqlExécution de la requête seule.
probe_sql_rowspostgres, mysqlLignes renvoyées.
probe_sql_valuepostgres, mysqlPremière colonne de la première ligne, quand c’est un nombre.
probe_mqtt_connack_secondsmqttTemps jusqu’au CONNACK.
probe_mqtt_suback_secondsmqttTemps jusqu’au SUBACK.
probe_mqtt_message_bytesmqttTaille du message retenu.
probe_mqtt_message_valuemqttSon contenu, quand c’est un nombre.
probe_ws_handshake_secondswebsocketPoignée de main d’ouverture.
probe_udp_response_seconds, probe_udp_response_bytesudpTemps de réponse et taille de la réponse (seulement quand une réponse arrive).
probe_ssh_banner_secondssshTemps jusqu’à la bannière SSH-2.0-....
probe_ssh_protocol_info{version}sshPrésence ; version du protocole dans le label version.
probe_ssh_software_info{software}sshPrésence ; logiciel du serveur dans le label software (OpenSSH_9.6p1).
probe_ssh_kex_secondssshDurée du début de l’échange de clés (seulement quand la clé d’hôte est lue).
probe_ssh_host_key_fingerprintsshAvec une clé d’hôte attendue ou « Alerter quand la clé d’hôte change » : une empreinte 32 bits de la clé d’hôte. Sa valeur ne signifie rien ; seuls ses changements comptent.
probe_ssh_host_key_info{fingerprint}sshPrésence ; l’empreinte SHA256:..., telle que l’affiche ssh-keygen -lf.
probe_ssh_host_key_matchssh1 si la clé d’hôte est celle attendue, 0 sinon. Seulement avec une clé d’hôte attendue.
probe_imap_greeting_seconds, probe_imap_login_secondsimapTemps jusqu’à la bannière * OK, et aller-retour de LOGIN.
probe_imap_authenticatedimap1 quand LOGIN a réussi.
probe_pop3_greeting_seconds, probe_pop3_login_secondspop3Temps jusqu’à la bannière +OK, et durée de USER + PASS.
probe_pop3_authenticatedpop31 quand l’identification a réussi.
probe_ws_message_byteswebsocketTaille de la trame reçue.
probe_snmp_query_secondssnmp_oidAller-retour de la lecture.
probe_snmp_valuesnmp_oidValeur de l’objet, si elle est numérique.
probe_radius_response_secondsradiusAller-retour de l’Access-Request.
probe_radius_response_coderadiusCode de la réponse : 2 accepté, 3 refusé, 11 défi.
probe_grpc_check_secondsgrpcDurée de l’appel Health/Check.
probe_grpc_serving_statusgrpcServingStatus renvoyé : 1 SERVING, 2 NOT_SERVING, 3 SERVICE_UNKNOWN.
probe_grpc_status_codegrpcCode grpc-status de la réponse (0 : OK).

Un moniteur peut être sondé depuis plusieurs endroits à la fois, pour qu’un problème sur un seul réseau ne passe pas pour une panne. Dans le formulaire du moniteur, sous « Plus d’options », activez Sonder depuis plusieurs emplacements et cochez les emplacements : Ce serveur et les agents relais de votre choix. Il en faut au moins deux. Cela fonctionne pour les moniteurs HTTP, TCP, DNS, ping, TLS, SMTP, PostgreSQL, MySQL, MQTT, WebSocket et NTP, et ne se combine pas avec « Joint via » (un moniteur est sondé soit par un relais, soit par plusieurs emplacements).

Chaque emplacement exécute la sonde à l’intervalle habituel. Le résultat est une décision :

  • En panne quand au moins N des M emplacements comptés échouent. N est le quorum : par défaut la majorité des emplacements (3 emplacements : 2 ; 2 emplacements : les deux), ou tout nombre de 1 au nombre d’emplacements.
  • Dégradé quand certains emplacements échouent, mais moins que le quorum. La page du moniteur affiche « Dégradé à un emplacement » et l’endroit en échec, mais aucune alerte service_down n’est levée et les pages de statut restent au vert.
  • En ligne quand aucun emplacement compté n’échoue.

Confirmation. Quand un moniteur passe de « en ligne » à dégradé ou en panne, le serveur resonde aussitôt depuis tous les emplacements et ne publie que la décision de ce tour de confirmation. Un raté vu une seule fois n’alerte jamais.

Les emplacements silencieux sont écartés. Un emplacement qui ne répond pas à temps (relais hors ligne), dont l’agent n’a pas activé le mode relais, qui a trop de sondes en attente, ou qui ne peut pas exécuter cette sonde, est exclu du décompte et affiché comme « Non compté » avec la raison ; le quorum s’adapte aux emplacements restants (il ne dépasse jamais leur nombre). Un agent relais garde au plus 32 sondes multi-emplacements à la fois ; au-delà, l’emplacement est exclu comme occupé. Un agent relais trop ancien pour connaître un type de moniteur répond par une erreur : l’emplacement est exclu et signalé, sans qu’il soit nécessaire de mettre l’agent à jour.

La page du moniteur affiche une carte Emplacements de sondage : la décision, le nombre d’emplacements en échec face au quorum, et pour chacun son état, son temps de réponse, sa dernière vérification et la raison de son exclusion. Les emplacements placés sur la carte du monde apparaissent aussi sur une petite carte.

Par emplacement : dumbmonit_probe_location_success{location} et dumbmonit_probe_location_duration_seconds{location}, où location vaut server ou agent-<id>. La métrique habituelle dumbmonit_probe_success porte la décision de quorum : alertes, disponibilité et pages de statut la suivent. De plus, dumbmonit_probe_degraded vaut 1 tant qu’une minorité seulement d’emplacements échoue, et dumbmonit_probe_locations_failing et dumbmonit_probe_locations_counted donnent les chiffres derrière la décision. Voir Métriques.

Un moniteur dégradé ne lève jamais service_down. Pour en être tout de même informé, créez une règle d’alerte personnalisée (Alertes, Nouvelle règle) de sévérité info, avec la requête dumbmonit_probe_degraded == bool 1, l’opérateur > et le seuil 0, pendant 5 minutes.

Site web ou API web (HTTP) — vérifie qu’une page ou une API répond, avec le bon code de statut, le bon contenu, et un certificat valide. Exemples : un site web, une page de santé d’application, une API REST, une interface de service auto-hébergé.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
443TCPPage web ou API en HTTPS (port par défaut)
80TCPSeulement avec une adresse http:// (port par défaut)
  1. Dans l’adresse, collez l’URL complète de la page à surveiller.

  2. Préférez une page légère comme « /health » ou « /status » plutôt que la page d’accueil.

  3. Si la page demande une connexion, choisissez un identifiant : nom d’utilisateur et mot de passe (basique) ou jeton (Bearer).

  4. Au besoin, exigez un mot-clé dans la page ou une valeur dans une réponse JSON, dans les options.

Droits requis

  • Accès en lecture à l’URL surveillée : Seulement si la page demande une connexion

Sans « http:// » ni « https:// », HTTPS est supposé. Par défaut, tout code de statut entre 200 et 299 convient. En HTTPS, le certificat est lu automatiquement : vous serez averti avant son expiration. Un mot de passe ou un jeton écrit dans les options est copié en texte clair à chaque mesure.

Identifiants : aucun, nom d’utilisateur / mot de passe (authentification basique) ou jeton d’API (Authorization: Bearer).

CléLibelléDéfautAide
methodMéthode HTTPGETGET convient à presque chaque cas. HEAD évite de télécharger la page quand seul le code de statut compte. Choix : GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.
accepted_statusCodes de statut acceptés200-299Codes ou plages considérés normaux, séparés par des virgules. Tout autre code compte comme en panne. Exemple : 200-299,301,404.
keywordMot-clé attendu(vide)Texte qui doit apparaître dans la page. S’il manque, le service est rapporté en panne même si la page répond.
keyword_absentLe mot-clé doit être absentfalseInverse la vérification : la présence du mot-clé signale un échec. Utile pour une page d’erreur qui répond 200.
keyword_case_sensitiveRespecter la casse du mot-cléfalsePar défaut, majuscules et minuscules sont traitées pareil.
json_pathChemin JSON à vérifier(vide)Pour une réponse JSON : chemin de la valeur à vérifier. Remplissez-le avec la valeur attendue, jamais l’un sans l’autre. Exemple : $.status.
json_expectValeur JSON attendue(vide)Valeur que le chemin JSON ci-dessus doit avoir, par exemple « ok » ou « true ».
headersEn-têtes supplémentaires(vide)Un ou plusieurs en-têtes « Nom: valeur », séparés par « | ». Ne mettez pas de secrets ici : les options sont visibles dans les graphiques.
bodyCorps de requête(vide)Contenu envoyé avec la requête, pour les méthodes qui en attendent un (POST, PUT…).
follow_redirectsSuivre les redirectionstrueDésactivez pour surveiller la redirection elle-même, par exemple un 301 vers HTTPS.
max_redirectsRedirections maximum suivies10Entre 1 et 20. Sans effet si les redirections ne sont pas suivies.
insecure_tlsAccepter un certificat non vérifiablefalseLa vérification n’échoue plus sur un certificat autosigné ou émis par une autorité privée.
allow_private_targetsAutoriser les cibles loopback et link-localfalsePar défaut la vérification refuse les adresses que seul l’hôte DumbMonit lui-même peut atteindre (127.0.0.1, ::1, 169.254.x.x). Activez ceci pour surveiller un service tournant sur l’hôte DumbMonit. Les adresses LAN privées (10.x, 192.168.x) sont toujours autorisées.
check_certificateLire le certificattrueEn HTTPS, enregistre aussi la date d’expiration du certificat pour que vous soyez averti avant qu’il expire.
max_body_bytesOctets maximum lus524288Au-delà, le reste de la page n’est pas téléchargé. Le mot-clé et le chemin JSON ne sont recherchés que dans cette partie.
user_agentIdentité annoncée (User-Agent)DumbMonit/<version>Nom que la vérification donne au serveur. Changez-le si le serveur filtre les robots.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.

Sur la page du moniteur, le panneau Décomposition du temps montre où chaque contrôle passe son temps, en aires empilées sur la période choisie, avec une barre proportionnelle et une légende (nom, durée, part) pour le dernier contrôle. Les mêmes valeurs sont dans la métrique probe_http_phase_seconds, une série par étiquette phase :

PhaseCe qu’elle couvre
dnsRésolution du nom d’hôte. Nulle pour une adresse IP.
connectOuverture de la connexion TCP.
tlsNégociation TLS (HTTPS seulement).
processingAttente du serveur : de la requête envoyée aux en-têtes de réponse.
transferLecture du corps de la réponse. Nulle sauf si un mot-clé ou un chemin JSON exige le corps.

Les cinq séries existent toujours et somment au temps écoulé entre l’envoi de la requête et la fin de la lecture du corps, pour la dernière requête du contrôle (le dernier saut quand les redirections sont suivies). Chaque contrôle ouvre une connexion neuve : dns, connect et tls sont donc mesurés à chaque fois, au lieu de rester à zéro sur une connexion réutilisée.

Lire le graphique : une bande dns haute désigne le résolveur, connect le chemin réseau ou un pare-feu, tls la chaîne de certificats ou le coût de la négociation, processing l’application elle-même. La séparation TCP / TLS repose sur la durée de négociation relevée par la lecture du certificat juste avant la requête, plafonnée au temps de connexion observé ; si Lire le certificat est désactivé, la négociation TLS reste comprise dans connect. Un contrôle en échec ne publie pas de phases : le graphique montre alors un trou.

Port réseau (TCP) — vérifie qu’un port accepte les connexions : SSH, base de données, partage de fichiers, serveur de jeu, imprimante réseau.

Le port est celui que vous écrivez dans l’adresse ou dans l’option « Port » ; il n’y a pas de valeur par défaut. Du serveur DumbMonit (ou de son agent relais) vers l’équipement, ouvrez ce port TCP.

  1. Dans l’adresse, écrivez l’hôte et le port séparés par deux-points : « nas.home.lan:22 », ou « [fd00::1]:445 » en IPv6.

  2. Ou laissez le port hors de l’adresse et remplissez l’option « Port ».

Seule l’ouverture de la connexion est testée : aucune donnée n’est envoyée au service, il n’en est donc pas affecté.

CléLibelléDéfautAide
portPort(vide)Port à ouvrir, si l’adresse ne le donne pas déjà comme « hôte:port ». L’un des deux est requis.
allow_private_targetsAutoriser les cibles loopback et link-localfalsePar défaut la vérification refuse les adresses que seul l’hôte DumbMonit lui-même peut atteindre (127.0.0.1, ::1, 169.254.x.x). Activez ceci pour surveiller un service tournant sur l’hôte DumbMonit. Les adresses LAN privées (10.x, 192.168.x) sont toujours autorisées.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.

Nom de domaine (DNS) — vérifie qu’un nom se résout, et qu’il pointe vers la bonne adresse. Exemples : votre nom de domaine, un nom interne servi par votre Pi-hole ou AdGuard, un enregistrement MX.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
53UDPRequête DNS (port par défaut)
53TCPRequête DNS trop grosse pour UDP (port par défaut)
  1. Dans l’adresse, écrivez le nom à résoudre, sans « http:// » : « www.example.com ».

  2. Choisissez un autre type d’enregistrement dans les options si vous ne voulez pas d’adresse IPv4 (enregistrement A).

  3. Pour surveiller votre propre serveur DNS, saisissez son adresse IP dans « Serveur DNS à interroger ».

  4. Pour détecter un détournement, listez dans « Valeurs attendues » les adresses que la réponse doit contenir.

Par défaut, la vérification interroge le résolveur du système. Si le serveur interrogé cesse de répondre, la vérification échoue.

CléLibelléDéfautAide
record_typeType d’enregistrementAA pour une adresse IPv4, AAAA pour IPv6, MX pour le mail, CNAME pour un alias… Choix : A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, PTR, CAA.
resolverServeur DNS à interroger(vide)Adresse IP d’un résolveur, port optionnel. Vide : le résolveur système. Pratique pour vérifier votre propre serveur DNS. Exemple : 1.1.1.1 ou 10.0.0.1:5353.
expectValeurs attendues(vide)Valeurs qui doivent toutes apparaître dans la réponse, séparées par des virgules. Vide : seule la résolution est vérifiée.
expect_modeComparaisoncontainscontains : chaque valeur attendue doit apparaître quelque part dans la réponse. exact : la réponse doit porter ces valeurs et rien d’autre.
forbidValeurs interdites(vide)Valeurs qui ne doivent jamais apparaître dans la réponse, séparées par des virgules. Vérifiées avant les attendues.
alert_on_changeAlerter quand la réponse changefalseEnregistre une empreinte de la réponse triée et alerte chaque fois qu’elle change, sans avoir à écrire les valeurs attendues.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.

expect seul attrape l’enregistrement qui a disparu. Il n’attrape pas celui qui a été ajouté : une zone détournée garde souvent le A légitime et en met un second à côté, et un client atteint alors l’un ou l’autre au hasard.

  • expect_mode = exact refuse toute valeur que l’attente ne couvre pas. L’ordre n’importe pas — DNS n’en garde pas.
  • forbid nomme les valeurs qui ne doivent jamais revenir : l’adresse d’un ancien hôte, un TXT de validation expiré, un serveur mail démantelé. Il est vérifié en premier, il gagne donc sur expect.

Les deux comparent sans tenir compte de la casse, ignorent le point final d’un nom et les guillemets autour d’un TXT, et traitent une valeur attendue comme trouvée quand elle apparaît à l’intérieur d’un enregistrement — un MX correspond donc sur mail.example.com sans que vous ayez à copier sa priorité.

Écrire les valeurs attendues n’est pas toujours pratique : un nom servi par un CDN, des enregistrements que quelqu’un d’autre gère, ou simplement une zone dont vous voulez entendre parler chaque fois qu’elle bouge. Cochez Alerter quand la réponse change : chaque vérification enregistre alors une empreinte de la réponse, et la règle intégrée Réponse DNS changée se déclenche quand elle diffère de la précédente. L’alerte se résout d’elle-même une heure plus tard ; la nouvelle réponse est la référence à partir de là.

L’empreinte couvre les valeurs de la réponse, triées et sans doublons, avec la chaîne CNAME incluse : un round-robin qui renvoie les mêmes adresses dans un autre ordre ne la change pas, ni un TTL. Un nom dont la réponse change à chaque requête (un grand pool comme pool.ntp.org, ou un DNS géographique qui répond différemment d’un résolveur à l’autre) alerterait tout le temps : laissez l’option désactivée pour ceux-là, ou interrogez un résolveur fixe.

Hôte accessible (ping) — envoie quelques échos ICMP et mesure le temps de réponse et la perte de paquets. Exemples : routeur ou passerelle maison, point d’accès Wi-Fi, imprimante, machine sans agent ni SNMP, hôte distant.

Le ping utilise l’écho ICMP, qui n’a pas de port : autorisez la requête et la réponse d’écho ICMP entre le serveur DumbMonit (ou son agent relais) et l’équipement.

  1. Dans l’adresse, écrivez le nom d’hôte ou l’adresse IP : « 192.168.1.1 » ou « router.home.lan ».

  2. Baissez « Perte tolérée » dans les options pour être averti avant que la perte soit totale.

À chaque interrogation, la vérification envoie quatre échos et mesure le temps de réponse et la part de paquets perdus. Par défaut, seule une perte totale compte comme panne ; la perte partielle reste visible dans les graphiques. Certains équipements ignorent les pings à dessein.

services:
dumbmonit:
sysctls:
net.ipv4.ping_group_range: "0 2147483647"

Hors Docker, sysctl -w net.ipv4.ping_group_range="0 2147483647" sur l’hôte fait la même chose, et une socket brute (NET_RAW, root) fonctionne aussi.

CléLibelléDéfautAide
countNombre d’échos4Paquets envoyés à chaque sonde, de 1 à 20.
packet_timeout_msAttente par paquet (ms)1000Temps accordé à chaque réponse, de 50 à 10 000 ms.
interval_msÉcart entre deux échos (ms)100Pause entre deux échos, de 0 à 5 000 ms.
payload_bytesTaille de charge utile (octets)56Données portées par chaque écho, de 0 à 1 400 octets.
ip_versionVersion IPauto« auto » prend la première adresse résolue ; forcez 4 ou 6 si l’hôte a les deux et que l’une ne répond pas. Choix : auto, 4, 6.
loss_threshold_percentPerte tolérée (%)100Au-delà de ce pourcentage de paquets perdus, l’hôte est rapporté en panne. 100 : seule une perte totale compte, la perte partielle reste visible dans les graphiques.
timeout_secondsDélai (secondes)5Budget total pour la sonde, de 1 à 60. Refusé s’il ne couvre pas « nombre d’échos × attente par paquet ».

Certificat TLS — vérifie qu’un certificat est valide et avertit avant son expiration, sur n’importe quel port chiffré. Exemples : serveur mail (IMAPS, SMTPS), reverse proxy, annuaire LDAPS, courtier MQTT, interface d’administration.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
443TCPPoignée de main TLS (port par défaut, celui de l’adresse)
  1. Dans l’adresse, écrivez l’hôte et le port du service chiffré : « mail.example.com:993 » (443 si omis).

  2. Si vous joignez le service par son adresse IP, saisissez le nom du certificat dans « Nom de serveur (SNI) ».

  3. Pour un certificat de votre propre autorité, cochez « Accepter un certificat non vérifiable ».

La vérification ouvre une connexion chiffrée, lit le certificat présenté et la referme aussitôt : aucune donnée n’est échangée avec l’application. Elle enregistre le nombre de jours avant l’expiration, l’émetteur et la version de TLS. Les règles d’alerte fournies avertissent à quatorze jours, puis à l’expiration.

La poignée de main se termine même quand le certificat est refusé : c’est ce qui permet de lire la date d’expiration d’un certificat déjà expiré. Le verdict de la vérification est dans probe_ssl_cert_valid.

CléLibelléDéfautAide
server_nameNom de serveur (SNI)(vide)Nom de domaine annoncé au serveur et vérifié dans le certificat. Réglez-le quand l’adresse est une IP derrière un reverse proxy.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalsePar défaut la vérification refuse les adresses que seul l’hôte DumbMonit lui-même peut atteindre (127.0.0.1, ::1, 169.254.x.x). Activez ceci pour surveiller un service tournant sur l’hôte DumbMonit. Les adresses LAN privées (10.x, 192.168.x) sont toujours autorisées.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
587TCPSoumission avec STARTTLS (par défaut)
465TCPSeulement avec le chiffrement TLS (SMTPS)
25TCPSeulement sans chiffrement (relais sur le port 25)

Relais mail (SMTP) — ouvre une vraie session sur un serveur mail : salutation, EHLO, STARTTLS, et la connexion si vous en donnez une. Exemples : le relais SMTP de votre fournisseur, un Postfix ou msmtp local, Proxmox Mail Gateway, le port de soumission d’un serveur mail.

  1. Dans DumbMonit, saisissez le serveur de messagerie, par exemple smtp.example.com:2525 (le port habituel du chiffrement par défaut).

  2. Choisissez le chiffrement : STARTTLS pour le port 587, TLS pour le port 465, Aucun pour un relais de votre réseau sur le port 25.

  3. Facultatif : renseignez un compte, pour vérifier que le relais l’accepte toujours (un mot de passe refusé n’est pas signalé comme une panne).

  4. Facultatif : nommez une Extension attendue, comme STARTTLS, pour être averti quand le relais cesse de l’annoncer.

  • A mail account that may log in (AUTH) : Seulement si vous renseignez un identifiant

Rien n’est jamais envoyé : la vérification s’arrête après le message d’accueil, les extensions et la connexion facultative, puis raccroche. Aucun message n’entre dans la file. Un relais qui cesse d’annoncer STARTTLS enverrait votre courrier en clair. Un relais qui accepte tout et le garde indéfiniment en file répond parfaitement ici.

Identifiants : aucun, ou un nom d’utilisateur et mot de passe envoyés avec AUTH PLAIN (ou AUTH LOGIN quand le serveur n’offre que ça). Ils sont envoyés après que la connexion soit chiffrée et après que le certificat ait été jugé : un relais dont la chaîne ne peut pas être vérifiée ne les reçoit jamais.

En TLS ou STARTTLS, le certificat est lu comme la vérification TLS le lit — expiration, émetteur, version de protocole — un relais mail est donc aussi un certificat sur lequel vous êtes averti.

Que le mail part vraiment. Un relais qui accepte chaque session et diffère ensuite tout répond parfaitement ici ; surveillez ses files à la place (voir la page Proxmox Mail Gateway). Il n’envoie non plus jamais de message, donc il ne dit rien du filtrage de destinataire, SPF ou DKIM.

CléLibelléDéfautAide
securityChiffrementstarttlsSTARTTLS démarre en texte clair et monte en niveau (port 587), TLS chiffre dès le premier octet (port 465), Aucun ne chiffre jamais (port 25) et ne convient qu’à un relais sur votre propre réseau.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 587 avec STARTTLS, 465 avec TLS, 25 sans chiffrement.
helo_nameNom annoncé (EHLO)dumbmonitNom que la vérification donne en se présentant. Un relais strict refuse un nom qu’il ne peut pas résoudre.
expect_capabilityExtension attendue(vide)Extension que le serveur doit annoncer dans sa réponse EHLO, par exemple STARTTLS ou AUTH. Vide : aucune attente.
server_nameNom de serveur (SNI)(l’hôte)Nom de domaine annoncé au serveur et vérifié dans le certificat. Réglez-le quand l’adresse est une IP.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé ou le relais est inaccessible.
protocolQuelque chose a répondu, mais pas SMTP — ou il a refusé la connexion, EHLO, ou le STARTTLS qu’il avait annoncé.
authLe compte a été refusé (535, 530, 534). Le relais va bien ; l’identifiant non.
payloadL’extension nommée dans « Extension attendue » n’est pas annoncée.
tls, cert_expiredMême signification que pour la vérification TLS.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
5432TCPPostgreSQL (port par défaut)

Base de données PostgreSQL — se connecte, s’authentifie et lance une requête : le signal d’une base de données qui tourne mais ne répond plus. Exemples : la base derrière Nextcloud ou Immich, un recorder Home Assistant, une base d’application, une instance TimescaleDB.

  1. Dans psql, créez un rôle qui ne peut que se connecter.

    CREATE ROLE dumbmonit LOGIN PASSWORD 'a-long-password';
  2. Autorisez-le à se connecter depuis l’hôte DumbMonit avec cette ligne dans pg_hba.conf (adaptez l’adresse), puis rechargez PostgreSQL.

    host all dumbmonit 10.0.0.5/32 scram-sha-256
  3. Dans DumbMonit, saisissez le serveur, par exemple db.home.lan:5433 (port 5432 par défaut), puis l’utilisateur et le mot de passe du rôle.

  4. Facultatif : remplacez la requête par défaut SELECT 1 par une requête qui renvoie un seul nombre, pour le tracer.

  • LOGIN (role attribute) : Se connecter seulement, aucun autre privilège

La requête par défaut est SELECT 1, qui ne lit aucune table : rien d’autre n’est à accorder. Le temps de connexion et le temps de requête sont enregistrés séparément. Une requête de votre cru qui lit une table demande SELECT sur cette table.

Identifiants : un nom d’utilisateur et mot de passe, requis. Une base de données n’est jamais surveillée anonymement, le formulaire n’offre donc rien d’autre.

Un retard de réplication, un verrou qui s’étire, une table qui ne cesse de grandir. Tout ça vit dans les propres vues d’administration du moteur — écrivez la requête vous-même, et le nombre qu’elle renvoie devient probe_sql_value, un graphique sur lequel vous pouvez alerter.

CléLibelléDéfautAide
portPort5432Utilisé si l’adresse n’en donne pas.
databaseBase de donnéespostgresBase ouverte à la connexion. Le compte de surveillance doit être autorisé à s’y connecter.
queryRequêteSELECT 1Lancée à chaque vérification. La requête par défaut ne lit aucune table, le compte n’a donc besoin d’aucun privilège au-delà de se connecter. Une requête renvoyant un nombre en fait un graphique.
expectValeur attendue(vide)Valeur que la première colonne de la première ligne doit avoir. Vide : seul le succès de la requête est vérifié.
sslmodeChiffrementpreferprefer chiffre quand le serveur le propose, require refuse de se connecter sans ça, verify-full vérifie aussi le certificat et le nom, disable ne chiffre jamais.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
3306TCPMySQL ou MariaDB (port par défaut)

Base de données MySQL ou MariaDB — se connecte, s’authentifie et lance une requête : le signal d’une base de données qui tourne mais ne répond plus. Exemples : la base derrière un WordPress, un Nextcloud ou un Kimai, une base d’application, un MariaDB en Docker.

  1. Dans le client mysql, créez un compte sans aucun privilège (adaptez la partie hôte à la machine DumbMonit).

    CREATE USER 'dumbmonit'@'%' IDENTIFIED BY 'a-long-password';
  2. Dans DumbMonit, saisissez le serveur, par exemple db.home.lan:3307 (port 3306 par défaut), puis l’utilisateur et le mot de passe du compte.

  3. Facultatif : remplacez la requête par défaut SELECT 1 par une requête qui renvoie un seul nombre, pour le tracer.

  • USAGE (no privilege) : Se connecter et lancer SELECT 1, rien de plus

La requête par défaut est SELECT 1, qui ne lit aucune table : rien d’autre n’est à accorder. Le temps de connexion et le temps de requête sont enregistrés séparément. Un motif d’hôte localhost n’accepterait que les connexions faites sur le serveur lui-même. Une requête de votre cru qui lit une table demande SELECT sur cette table.

CléLibelléDéfautAide
portPort3306Utilisé si l’adresse n’en donne pas.
databaseBase de données(vide)Base ouverte à la connexion. Vide : aucune, ce qui suffit pour la requête par défaut.
queryRequêteSELECT 1Lancée à chaque vérification. La requête par défaut ne lit aucune table, le compte n’a donc besoin d’aucun privilège au-delà de se connecter. Une requête renvoyant un nombre en fait un graphique.
expectValeur attendue(vide)Valeur que la première colonne de la première ligne doit avoir. Vide : seul le succès de la requête est vérifié.
sslmodeChiffrementpreferprefer chiffre quand le serveur le propose, require refuse de se connecter sans ça, verify-full vérifie aussi le certificat et le nom, disable ne chiffre jamais.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé, le serveur est inaccessible, ou il a refusé la connexion pour une raison autre que le compte (démarrage, trop de connexions).
authLe compte a été refusé : mauvais mot de passe, aucune ligne pg_hba.conf, motif d’hôte qui ne couvre pas la machine DumbMonit.
queryConnecté et authentifié, mais la requête a échoué : table manquante, base en lecture seule, erreur de syntaxe.
payloadLa requête a fonctionné mais a renvoyé autre chose que la valeur attendue.
timeoutLa connexion ou la requête n’a pas fini à temps — le cas « actif mais lent ».

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
1883TCPMQTT (port par défaut)
8883TCPSeulement avec l’option Connexion chiffrée (MQTT sur TLS, par défaut)

Courtier MQTT — se connecte au courtier, s’abonne à un topic, et peut attendre un message retenu. Exemples : Mosquitto, le courtier derrière Home Assistant, Zigbee2MQTT, les capteurs ESPHome.

  1. Dans DumbMonit, saisissez le courtier, par exemple broker.home.lan:1884 (port 1883 par défaut).

  2. Cochez Connexion chiffrée pour un courtier qui écoute sur 8883.

  3. Si le courtier exige un compte, renseignez son utilisateur et son mot de passe.

  4. Facultatif : nommez un topic, pour vérifier que le compte peut toujours s’y abonner.

  5. Facultatif : cochez Attendre un message retenu seulement pour un topic qui en porte un, typiquement un topic de disponibilité.

  • Subscribe (read) on the topic you name : Seulement si vous nommez un topic

Se connecter vaut déjà la peine d’être surveillé : un courtier qui refuse votre compte, ou qui ne répond plus, est la raison pour laquelle toute la maison s’est tue. Quand vous nommez un topic, un courtier qui refuse l’abonnement vous dit que le compte a perdu ses droits d’accès. Un topic sur lequel on publie de temps en temps paraît silencieux à un client qui vient de se connecter : n’attendez un message retenu que pour un topic qui en porte un. Une valeur figée il y a trois semaines compte toujours comme présente.

Qu’un capteur donné a arrêté d’émettre. Le message retenu que la vérification lit est ce que le courtier a gardé, peut-être vieux de trois semaines — MQTT ne l’horodate pas. Pour la fraîcheur, surveillez l’automatisation qui le consomme, ou utilisez un battement de cœur.

CléLibelléDéfautAide
tlsConnexion chiffréefalseChiffre la session dès le premier octet, comme les courtiers le font sur le port 8883.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 1883 en texte clair, 8883 chiffré.
topicTopic(vide)Topic auquel la vérification s’abonne. Vide : elle se connecte seulement, ce qui vous dit déjà que le courtier est vivant et accepte votre compte.
expect_messageAttendre un message retenufalseUn message doit arriver sur ce topic avant le délai. Seuls les messages retenus arrivent tout de suite : un topic juste publié de temps en temps paraîtra silencieux.
expectContenu attendu(vide)Texte que ce message doit contenir. Le remplir implique d’attendre un message.
client_idIdentifiant client(dérivé)Nom annoncé au courtier. Le défaut dérive de la surveillance, deux vérifications ne se déconnectent donc jamais l’une l’autre.
server_nameNom de serveur (SNI)(l’hôte)Nom de domaine annoncé au courtier et vérifié dans le certificat. Réglez-le quand l’adresse est une IP.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé ou le courtier est inaccessible.
authLe CONNACK a refusé le compte, ou le courtier a refusé l’abonnement — une liste de contrôle d’accès ne couvre plus ce topic.
protocolQuelque chose a répondu mais ne parle pas MQTT 3.1.1, ou le courtier a rejeté l’identifiant client.
payloadAucun message retenu n’est arrivé sur le topic, ou son contenu ne contient pas le texte attendu.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
443TCPWSS (par défaut)
80TCPSeulement avec une adresse ws://

Point de terminaison WebSocket — lance la poignée de main de mise à niveau, et peut envoyer une trame et en attendre une : une panne différente d’une simple page HTTP. Exemples : l’API Home Assistant, un tableau de bord en direct, un flux de logs, un point de terminaison derrière un reverse proxy.

  1. Dans DumbMonit, collez le point de terminaison complet, par exemple wss://home.example.com/api/websocket (wss est supposé sans schéma).

  2. Facultatif : renseignez Contenu attendu avec un fragment de la première trame que le serveur envoie de lui-même.

  3. Facultatif : si le point de terminaison ne dit rien tant qu’on ne lui parle pas, mettez un message dans Trame à envoyer, et ce que la réponse doit contenir dans Contenu attendu.

La vérification déroule toute la poignée de main d’ouverture et vérifie la réponse que le serveur calcule à partir de la clé reçue : un reverse proxy qui a perdu l’en-tête Upgrade est repéré ici, là où une vérification HTTP verrait encore un 200 sain. Un statut autre que 101 est rapporté avec son code, donc un 401 dû à un jeton expiré n’est pas pris pour une panne. Pour la première trame, pensez au message d’accueil de l’API Home Assistant.

Identifiants : aucun, un nom d’utilisateur et mot de passe (envoyés en authentification HTTP basique dans la requête d’ouverture) ou un jeton (envoyé comme Authorization: Bearer).

CléLibelléDéfautAide
pathChemin(depuis l’adresse)Chemin de la requête d’ouverture. Pris depuis l’adresse quand elle en porte un.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 443 pour wss, 80 pour ws.
sendTrame à envoyer(vide)Trame texte envoyée une fois la connexion ouverte. Vide : rien n’est envoyé.
expectContenu attendu(vide)Texte qu’une trame reçue doit contenir. Vide et sans rien à envoyer, seule la poignée de main d’ouverture est vérifiée.
subprotocolSous-protocole(vide)Valeur de Sec-WebSocket-Protocol. La vérification échoue si le serveur en choisit un autre.
originOrigine(vide)Valeur de l’en-tête Origin, que certains serveurs exigent avant la mise à niveau.
server_nameNom de serveur (SNI)(l’hôte)Nom de domaine annoncé au serveur et vérifié dans le certificat. Réglez-le quand l’adresse est une IP.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé ou l’hôte est inaccessible.
statusLe point de terminaison a répondu autre chose que 101 ; probe_http_status_code porte le code.
protocolIl a répondu 101 mais son Sec-WebSocket-Accept ne correspond pas à la clé envoyée, il a choisi un autre sous-protocole, ou il a fermé la connexion tout de suite.
payloadAucune trame n’est arrivée, ou elle ne contient pas le texte attendu.

Serveur de temps NTP — envoie une seule requête SNTP et lit la réponse : décalage, délai d’aller-retour, stratum et indicateur de saut. Exemples : un routeur ou NAS servant de serveur de temps local, un serveur NTP interne (chrony, ntpd), un serveur de pool public utilisé comme référence.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
123UDPRequête NTP (port par défaut)
  1. Dans l’adresse, écrivez le nom ou l’adresse IP du serveur : « pool.ntp.org » ou « 192.168.1.1 ».

  2. Baissez « Décalage toléré » dans les options pour être averti avant 100 ms.

Le port UDP 123 est utilisé sauf indication contraire de l’option « Port ». La vérification envoie une seule requête SNTP et enregistre le décalage, le délai aller-retour, la strate et l’indicateur de saut de seconde. Un serveur en strate 16, ou dont l’indicateur de saut de seconde indique « non synchronisé », est signalé en panne quel que soit le décalage.

Identifiants : aucun.

CléLibelléDéfautAide
portPort123Port UDP du serveur NTP.
offset_threshold_msDécalage toléré (ms)100Au-delà de ce décalage d’horloge, le serveur est rapporté en panne. Un serveur non synchronisé (stratum 16) échoue toujours, quelle que soit cette valeur.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLa socket UDP n’a pas pu être ouverte, ou la réponse venait d’une adresse inattendue.
timeoutAucune réponse n’est arrivée dans le délai.
protocolLa réponse n’était pas un paquet NTP valide, ou ne venait pas d’un serveur (mauvais mode).
unsynchronizedLe serveur a répondu stratum 16 ou 0 (un « kiss-o’-death », qui nomme aussi la raison dans le journal), ou son indicateur de saut lit « non synchronisé ».
clock_offsetLe décalage mesuré dépasse « Décalage toléré ».

Service UDP — envoie un datagramme à un port UDP et vérifie la réponse, ou que personne ne le refuse. Exemples : un serveur de jeu ou de VoIP, un récepteur syslog ou SNMP, un point d’accès WireGuard, un service maison qui répond à un message de ping.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
161UDPLe port UDP du service, tel qu’écrit dans l’adresse (161 n’est qu’un exemple)
  1. Dans l’adresse, écrivez l’hôte et le port UDP : « 192.168.1.20:5060 ». Le port est obligatoire.

  2. Pour vérifier que le service répond vraiment, renseignez « Datagramme à envoyer » et « Réponse attendue ».

  3. Sans réponse attendue, la vérification n’échoue que si l’hôte répond que le port est fermé.

Il n’y a pas de port par défaut. Avec une réponse attendue, la vérification attend un datagramme en retour pendant tout le délai et y cherche le texte ; sans, elle attend environ une seconde et demie que l’hôte réponde par un ICMP « port unreachable » (rapporté comme connect). Les datagrammes en texte et en hexadécimal sont pris en charge ; en texte, \n, \r, \t, \0, \\ et \xNN sont lus comme des échappements. La réponse est cherchée comme du texte brut : il n’y a pas de forme en expression régulière.

Identifiants : aucun.

CléLibelléDéfautAide
portPort(vide)Utilisé si l’adresse n’en donne pas. Il n’y a pas de défaut : UDP n’a pas de port standard.
payloadDatagramme à envoyer(vide)Envoyé en un seul datagramme, 1400 octets au plus. En texte, \n \r \t \0 \ et \xNN sont lus comme des échappements. Vide : un datagramme vide.
payload_encodingCodage du datagrammetextText envoie les caractères tels quels, Hex lit des paires de chiffres hexadécimaux (espaces permis).
expect_responseRéponse attendue(vide)Texte que la réponse doit contenir. Vide : la vérification réussit sauf si l’hôte répond que le port est fermé, et le silence compte comme un succès.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
dnsLe nom ne se résout pas.
connectL’hôte a répondu que le port est fermé (ICMP), ou la socket n’a pas pu être ouverte.
timeoutUne réponse attendue n’est pas arrivée dans le délai.
payloadUne réponse est arrivée mais ne contient pas le texte attendu.

Serveur SSH — lit la bannière SSH et, si vous le demandez, vérifie que la clé d’hôte est toujours celle que vous connaissez. Exemples : un serveur Linux ou un Raspberry Pi, un NAS ou un hyperviseur avec SSH activé, un bastion, un serveur Git en SSH.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
22TCPSSH (port par défaut, celui de l’adresse)
  1. Dans l’adresse, écrivez le nom d’hôte ou l’adresse IP, avec le port s’il n’est pas 22 : « server.home.lan:2222 ».

  2. Pour être averti quand l’identité du serveur change, lisez son empreinte avec ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub.

  3. Collez cette empreinte (SHA256:…) dans « Clé d’hôte attendue », ou cochez « Alerter quand la clé d’hôte change » pour l’enregistrer sans en choisir une.

La vérification lit toujours la bannière (SSH-2.0-OpenSSH_9.6p1 ...) : la version du protocole et le logiciel du serveur sont enregistrés en labels. Quand une clé d’hôte attendue est renseignée, ou que « Alerter quand la clé d’hôte change » est cochée, elle démarre aussi l’échange de clés (curve25519-sha256) assez loin pour que le serveur montre sa clé publique d’hôte, en calcule l’empreinte SHA-256 et raccroche. Aucun identifiant n’est jamais envoyé.

Un serveur qui détient plusieurs clés d’hôte montre la première qu’il possède parmi ssh-ed25519, ecdsa-sha2-nistp256, rsa-sha2-512 et rsa-sha2-256. L’empreinte attendue doit être celle de cette clé : utilisez « Type de clé d’hôte » pour choisir la famille quand vous la lisez dans un autre fichier que celui d’ed25519.

Identifiants : aucun.

Une clé d’hôte qui change sans que vous ayez réinstallé la machine mérite un coup d’œil : un serveur reconstruit puis restauré sans ses clés, ou quelque chose qui répond à sa place. Avec une clé d’hôte attendue, la vérification échoue avec reason="host_key" et la règle Service en panne se déclenche après trois minutes. Sans, cochez « Alerter quand la clé d’hôte change » et créez une règle sur l’empreinte, dans Alertes > Règles :

changes_prometheus(dumbmonit_probe_ssh_host_key_fingerprint[1h]) > 0

Elle se déclenche quand l’empreinte diffère de la précédente et se résout d’elle-même une heure plus tard, comme la règle intégrée de changement de réponse DNS. L’empreinte lisible est dans probe_ssh_host_key_info.

CléLibelléDéfautAide
portPort22Utilisé si l’adresse n’en donne pas.
expected_host_keyClé d’hôte attendue(vide)Empreinte SHA256 de la clé d’hôte du serveur, telle qu’affichée par ssh-keygen -lf. Si la clé diffère, le serveur est rapporté en panne avec la raison host_key. Vide : la clé n’est pas vérifiée.
alert_on_changeAlerter quand la clé d’hôte changefalseEnregistre une empreinte de la clé d’hôte à chaque vérification, pour qu’une règle puisse se déclencher quand elle change. Implicite avec une clé d’hôte attendue.
host_key_typeType de clé d’hôteautoUn serveur peut détenir plusieurs clés d’hôte. Auto lit la première qu’il propose dans cet ordre : ed25519, ecdsa, rsa. Choisissez la famille de l’empreinte attendue.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
dns, connect, timeoutLe nom ne se résout pas, le port est fermé, ou le serveur n’a pas répondu à temps.
protocolQuelque chose a répondu, mais pas du SSH 2.0 — ou le serveur ne propose pas curve25519-sha256 ni aucun des types de clé d’hôte demandés, ou il s’est déconnecté pendant l’échange de clés.
host_keyLa clé d’hôte ne correspond pas à « Clé d’hôte attendue ». Le journal nomme le type de clé et les deux empreintes.

Boîte aux lettres (IMAP) — un serveur IMAP salue, propose TLS et accepte une connexion, comme un vrai client de messagerie. Exemples : Dovecot, le serveur IMAP de votre fournisseur, une boîte derrière Mailcow ou Mailu, l’hôte mail de Proxmox Mail Gateway.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
993TCPIMAP sur TLS (par défaut)
143TCPSeulement avec STARTTLS ou sans chiffrement
  1. Dans DumbMonit, saisissez le serveur de messagerie, par exemple imap.example.com:1993 (port 993 avec le chiffrement par défaut).

  2. Choisissez le chiffrement : TLS pour le port 993, STARTTLS pour le port 143, Aucun pour un serveur de votre propre réseau.

  3. Facultatif : renseignez un compte de boîte aux lettres, pour vérifier que le serveur accepte toujours les connexions (un mot de passe refusé n’est pas rapporté comme une panne).

  • Un compte de boîte aux lettres autorisé à se connecter : seulement si vous renseignez un identifiant

La vérification lit la bannière * OK, chiffre la connexion si demandé (STARTTLS), envoie LOGIN si la cible a un identifiant, puis LOGOUT. Elle ne sélectionne jamais de boîte et ne lit aucun message.

Identifiants : aucun, ou un nom d’utilisateur et un mot de passe envoyés avec LOGIN. Ils sont envoyés après le chiffrement de la connexion et le jugement du certificat : un serveur dont la chaîne ne peut pas être vérifiée ne les reçoit jamais. Seule exception, le chiffrement « Aucun », que vous devez choisir explicitement et qui les envoie en clair.

En TLS ou STARTTLS, le certificat est lu comme le fait la vérification TLS : une boîte aux lettres est donc aussi un certificat dont vous êtes averti.

CléLibelléDéfautAide
securityChiffrementtlsTLS chiffre dès le premier octet (port 993), STARTTLS démarre en clair puis passe en chiffré (port 143), Aucun ne chiffre jamais (port 143) et envoie le mot de passe en clair : seulement pour votre propre réseau.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 993 avec TLS, 143 avec STARTTLS ou sans chiffrement.
server_nameNom de serveur (SNI)(l’hôte)Nom de domaine annoncé au serveur et vérifié dans le certificat. Réglez-le quand l’adresse est une IP.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé ou le serveur est injoignable.
protocolQuelque chose a répondu, mais pas de l’IMAP — ou le serveur a raccroché, ou a répondu BAD ou [UNAVAILABLE] à la connexion.
authLe compte a été refusé (NO). Le serveur va bien ; l’identifiant, non.
tls, cert_expiredMême sens que pour la vérification TLS. Un STARTTLS refusé est rapporté comme tls.

Boîte aux lettres (POP3) — un serveur POP3 salue, propose TLS et accepte une connexion, comme un vrai client de messagerie. Exemples : Dovecot, le serveur POP3 de votre fournisseur, un vieux serveur de messagerie qui ne parle que POP3.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
995TCPPOP3 sur TLS (par défaut)
110TCPSeulement avec STARTTLS ou sans chiffrement
  1. Dans DumbMonit, saisissez le serveur de messagerie, par exemple pop.example.com:1995 (port 995 avec le chiffrement par défaut).

  2. Choisissez le chiffrement : TLS pour le port 995, STARTTLS pour le port 110 (commande STLS), Aucun pour un serveur de votre propre réseau.

  3. Facultatif : renseignez un compte de boîte aux lettres, pour vérifier que le serveur accepte toujours les connexions (un mot de passe refusé n’est pas rapporté comme une panne).

  • Un compte de boîte aux lettres autorisé à se connecter : seulement si vous renseignez un identifiant

La vérification lit la bannière +OK, chiffre la connexion si demandé (STLS), envoie USER et PASS si la cible a un identifiant, puis QUIT. Ni STAT ni RETR ne sont jamais envoyés, et rien n’est supprimé.

Identifiants : aucun, ou un nom d’utilisateur et un mot de passe. Même règle qu’en IMAP : ils sont envoyés après le chiffrement de la connexion et le jugement du certificat, sauf si vous avez explicitement choisi le chiffrement « Aucun ».

CléLibelléDéfautAide
securityChiffrementtlsTLS chiffre dès le premier octet (port 995), STARTTLS démarre en clair puis passe en chiffré avec STLS (port 110), Aucun ne chiffre jamais (port 110) et envoie le mot de passe en clair : seulement pour votre propre réseau.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 995 avec TLS, 110 avec STARTTLS ou sans chiffrement.
server_nameNom de serveur (SNI)(l’hôte)Nom de domaine annoncé au serveur et vérifié dans le certificat. Réglez-le quand l’adresse est une IP.
insecure_tlsAccepter un certificat non vérifiablefalseUne chaîne non vérifiable ne compte plus comme un échec : la date d’expiration est quand même enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLe port est fermé ou le serveur est injoignable.
protocolQuelque chose a répondu, mais pas du POP3 — ou la boîte est verrouillée ([IN-USE]) ou le système est en difficulté ([SYS/...]).
authUSER ou PASS a été refusé (-ERR). Le serveur va bien ; l’identifiant, non.
tls, cert_expiredMême sens que pour la vérification TLS. Un STLS refusé est rapporté comme tls.

Valeur SNMP (OID unique) — lit un objet SNMP et compare sa valeur à une plage ou à un texte. Exemples : une sonde de température ou d’humidité, l’état ou la charge d’un onduleur, une chaîne de version ou un indicateur de firmware, un compteur exposé par un script extend de Net-SNMP.

Là où le type d’équipement SNMP décrit toute une machine par un profil, celui-ci pose une question étroite : cet objet contient-il ce que j’attends ?

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
161UDPRequête SNMP (port par défaut)
  1. Sur l’équipement, activez SNMP et vérifiez que la communauté ou l’utilisateur v3 peut lire l’objet (la vue SNMP doit donner accès à sa branche).

  2. Dans DumbMonit, saisissez l’adresse de l’équipement, puis la communauté ou l’utilisateur v3.

  3. Renseignez l’objet (OID) avec son suffixe d’instance, par exemple 1.3.6.1.2.1.1.3.0.

  4. Facultatif : fixez un minimum et un maximum, ou un texte attendu, pour être averti quand la valeur dérive.

  • Accès en lecture à l’objet : Une communauté ou un utilisateur v3 en lecture seule suffit

La vérification réutilise la session SNMP du type d’équipement SNMP : mêmes communautés (v1/v2c) et utilisateurs v3, mêmes renvois. Sans borne ni texte attendu, elle réussit dès que l’objet existe. Une valeur numérique est tracée dans probe_snmp_value (un texte qui contient un nombre, comme 42,5, compte aussi). Les bornes sont incluses ; une valeur qui n’est pas un nombre échoue dès qu’une borne est posée. Le texte attendu est cherché sans tenir compte de la casse dans la valeur lue comme du texte.

CléLibelléDéfautAide
oidObjet (OID)(vide)L’objet SNMP à lire, sous forme numérique. Ajoutez le suffixe d’instance, souvent .0 pour une valeur simple.
portPort161Utilisé si l’adresse n’en donne pas.
minValeur minimale(vide)Une valeur numérique inférieure échoue. Vide : pas de borne basse.
maxValeur maximale(vide)Une valeur numérique supérieure échoue. Vide : pas de borne haute.
expectTexte attendu(vide)Texte que la valeur doit contenir, quelle que soit la casse. Vide : toute valeur est acceptée.
snmp_versionVersion SNMP2cVersion utilisée avec une communauté. Choisissez 1 seulement pour un vieil agent qui ignore la 2c ; les utilisateurs SNMP v3 l’ignorent.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectL’équipement est injoignable.
timeoutL’agent n’a pas répondu à temps : mauvaise adresse, mauvaise communauté (les agents restent muets) ou pare-feu.
authL’agent a refusé la communauté ou les identifiants v3.
protocolL’agent a répondu autre chose qu’une réponse SNMP valide, ou a refusé la requête.
not_foundL’agent ne connaît pas l’objet (noSuchObject, noSuchInstance) : vérifiez l’OID, son suffixe d’instance et la vue SNMP.
thresholdLa valeur numérique est hors de min / max.
payloadLa valeur n’est pas un nombre alors qu’une borne est posée, ou ne contient pas le texte attendu.

Serveur RADIUS — authentifie un compte de test (Access-Request) et attend un Access-Accept : il détecte un serveur allumé qui n’accepte plus les connexions. Exemples : FreeRADIUS, Windows NPS, le RADIUS d’un Wi-Fi WPA-Enterprise, d’un VPN ou d’un switch 802.1X.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
1812UDPRequêtes d’authentification (port par défaut)
  1. Sur le serveur RADIUS, déclarez l’hôte DumbMonit comme client, avec un secret partagé (clients.conf sur FreeRADIUS, RADIUS Clients sur Windows NPS).

  2. Créez un compte de test sans second facteur, et notez son nom et son mot de passe.

  3. Dans DumbMonit, saisissez le serveur (port UDP 1812 par défaut), le secret partagé et le compte de test.

  4. Facultatif : changez l’identifiant NAS si le serveur filtre les requêtes dessus.

  • Un compte de test autorisé à s’authentifier : Aucun accès réseau ni droit d’administration n’est nécessaire

La vérification envoie un Access-Request par passage, avec le nom du compte, son mot de passe masqué par le secret partagé (RFC 2865) et une signature (Message-Authenticator, RFC 3579, placée en premier comme le demande la parade à BlastRADIUS). Elle ne réessaie jamais : un datagramme perdu apparaît comme une panne.

Le secret partagé et le mot de passe sont stockés chiffrés et ne ressortent jamais par l’API. Les laisser vides en modifiant la surveillance conserve ceux qui sont enregistrés ; changer le nom du compte redemande son mot de passe.

La réponse est vérifiée avec le secret partagé. Un serveur dont la signature ne correspond pas est signalé bad_secret plutôt que comme une panne, pour que l’alerte dise quoi corriger. Un serveur qui ne connaît pas le secret ne répond en général pas du tout : voir les raisons d’échec.

CléLibelléDéfautAide
portPort1812Port UDP du service d’authentification.
nas_identifierIdentifiant NASdumbmonitValeur de l’attribut NAS-Identifier envoyé avec la requête. Changez-la si le serveur filtre les requêtes par NAS.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
connectLa socket UDP n’a pas pu être ouverte.
timeoutAucune réponse valide à temps : serveur arrêté, port filtré, secret partagé erroné ou hôte non déclaré comme client (les serveurs ignorent ces requêtes sans rien dire).
authAccess-Reject : le serveur fonctionne et refuse le compte de test (verrouillé, expiré, mot de passe erroné). Son Reply-Message, s’il y en a un, figure dans le journal.
bad_secretLa signature de la réponse ne correspond pas : le secret partagé est probablement faux.
protocolAccess-Challenge (le compte demande une seconde étape), un autre code inattendu, ou une réponse qui n’est pas du RADIUS valide.

Service gRPC — appelle le contrôle de santé gRPC standard (grpc.health.v1.Health/Check) : il détecte un service allumé qui se déclare en mauvais état. Exemples : un microservice gRPC, etcd, un service derrière Envoy ou un maillage de services, tout serveur qui enregistre grpc.health.v1.

Une vérification HTTP ne peut pas le faire : gRPC exige HTTP/2, souvent sans TLS (h2c), et la réponse est un message protobuf accompagné d’un grpc-status dans les trailers.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
50051TCPgRPC sur HTTP/2 (port par défaut)
443TCPSeulement avec l’option Connexion chiffrée (port par défaut)
  1. Vérifiez que le serveur enregistre le service de santé standard (grpc.health.v1.Health) : la plupart des frameworks gRPC offrent une fonction d’une ligne pour cela.

  2. Dans DumbMonit, saisissez le serveur avec son port, par exemple grpc.home.lan:50051.

  3. Cochez Connexion chiffrée (TLS) pour un serveur qui l’exige ; le port vaut alors 443 par défaut.

  4. Facultatif : nommez un Service, pour vérifier sa propre santé plutôt que celle du serveur entier.

Sans TLS, la vérification parle HTTP/2 en clair dès le premier octet (« prior knowledge »), ce qu’attendent les serveurs gRPC d’un réseau interne. Avec TLS, elle propose l’ALPN h2 et échoue en protocol si le serveur ne l’accepte pas, et elle lit le certificat comme les autres vérifications chiffrées (expiration, émetteur, « Accepter un certificat invérifiable »).

La réponse est jugée en deux temps. D’abord le grpc-status, lu dans les trailers ou, pour une réponse « Trailers-Only », dans les en-têtes : tout sauf OK échoue. Ensuite le champ status du message de santé : seul SERVING réussit.

Identifiants : aucun.

CléLibelléDéfautAide
serviceService(vide)Nom du service dont on demande la santé, par exemple my.package.MyService. Vide : la santé du serveur dans son ensemble.
tlsConnexion chiffrée (TLS)falseSe connecter en TLS et HTTP/2 (ALPN h2). Décochée, la vérification parle HTTP/2 en clair (h2c), comme la plupart des services d’un réseau interne.
portPort(vide)Utilisé si l’adresse n’en donne pas. Vide : 50051, ou 443 avec TLS.
server_nameNom du serveur (SNI)(l’hôte)Nom de domaine annoncé au serveur et vérifié dans le certificat. À renseigner quand l’adresse est une IP.
insecure_tlsAccepter un certificat invérifiablefalseUne chaîne invérifiable ne compte plus comme un échec : la date d’expiration reste enregistrée.
allow_private_targetsAutoriser les cibles loopback et link-localfalseVoir « Adresses que les vérifications refusent » ci-dessous.
timeout_secondsDélai (secondes)5Temps après lequel le service est rapporté en panne s’il n’a pas répondu. Entre 1 et 60.
reasonCe qui s’est passé
dns, connect, timeout, tls, cert_expiredComme pour les autres vérifications : nom, port, délai, poignée de main TLS, certificat.
unhealthyLe serveur répond mais déclare NOT_SERVING, UNKNOWN ou SERVICE_UNKNOWN, ou répond UNAVAILABLE. probe_grpc_serving_status porte la valeur.
protocolPas du HTTP/2, pas du gRPC, ou un grpc-status autre que ceux ci-dessous. UNIMPLEMENTED veut dire que le serveur n’expose pas le service de santé standard ; NOT_FOUND, qu’il ne connaît pas le nom donné dans service.
statusLe point de terminaison a répondu un statut HTTP autre que 200 (un proxy, un autre service) ; probe_http_status_code le porte.
authUNAUTHENTICATED ou PERMISSION_DENIED : le serveur, ou un proxy devant lui, veut des identifiants que le protocole de santé n’envoie pas.

Les vérifications qui se connectent à une adresse que vous leur donnez — HTTP, TCP, TLS, NTP, UDP, SSH, SMTP, IMAP, POP3, PostgreSQL, MySQL, MQTT, WebSocket — rapportent ce qu’elles voient — ce qui est aussi, mot pour mot, ce qu’une falsification de requête côté serveur fait. Pour empêcher un administrateur de surveillance de lire des services que seul l’hôte DumbMonit peut atteindre (la base de métriques embarquée sur 127.0.0.1:8428, le service de métadonnées d’un fournisseur cloud sur 169.254.169.254), les vérifications refusent par défaut :

  • les adresses loopback (127.0.0.0/8, ::1) ;
  • les adresses link-local (169.254.0.0/16, fe80::/10), incluant l’adresse de métadonnées cloud, et l’adresse non spécifiée (0.0.0.0, ::).

Les plages LAN privées (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7) sont toujours autorisées : les surveiller est le but d’un homelab.

La règle s’applique à l’adresse que vous avez tapée, à chaque adresse qu’un nom d’hôte résout (vérifiée à nouveau au moment de la connexion, un nom qui change sa réponse ne peut donc pas passer à travers), et à chaque redirection que la vérification HTTP suit. Une adresse refusée se montre comme une erreur de configuration sur la cible — aucune alerte « en panne » n’est envoyée — nommant l’option à activer : allow_private_targets. Activez-la pour une cible qui surveille vraiment un service sur l’hôte DumbMonit lui-même.

Une redirection vers une adresse refusée est rapportée comme une mesure échouée (reason="connect"), parce que c’est le service surveillé qui a changé, pas la configuration.

Les valeurs trouvées à un json_path ne sont jamais répétées au-delà de 32 caractères dans un message d’échec.

SymptômeCause probable
Ping montre une erreur de configurationLe sysctl net.ipv4.ping_group_range manque du fichier Compose. Voir ci-dessus.
HTTP en panne avec reason="keyword"Le mot-clé est cherché seulement dans les premiers max_body_bytes, sans tenir compte de la casse sauf si keyword_case_sensitive est réglé.
HTTP en panne avec reason="tls"Autosigné ou autorité privée : réglez insecure_tls.
Une vérification montre une erreur de configuration nommant allow_private_targetsL’adresse est loopback ou link-local. Voir « Adresses que les vérifications refusent » ci-dessus.
TCP en panne alors que telnet host port fonctionne depuis votre portableLe conteneur DumbMonit ne peut pas atteindre l’hôte (réseau Docker, pare-feu). Testez depuis l’intérieur du réseau du conteneur.
DNS en panne avec reason="record"La réponse ne contient pas chaque valeur listée dans expect.
Ping en panne avec reason="packet_loss"Perte au-dessus de loss_threshold_percent ; certains appareils limitent le débit ICMP.
DNS en panne avec reason="record" bien que expect correspondexpect_mode est exact et la réponse porte une valeur supplémentaire, ou forbid a correspondu.
SMTP en panne avec reason="protocol" sur security = starttlsLe relais n’annonce pas STARTTLS sur ce port. Utilisez tls pour 465, none pour un relais local simple.
Une vérification de base de données en panne avec reason="auth"Le compte existe mais ne peut peut-être pas se connecter depuis la machine DumbMonit : vérifiez pg_hba.conf, ou la partie hôte de l’utilisateur MySQL.
Une vérification de base de données en panne avec reason="query"Connexion et login ont fonctionné. La base de données tourne et refuse de travailler : lecture seule, table manquante, récupération.
MQTT en panne avec reason="payload" sur un topic qui a clairement du traficSeuls les messages retenus atteignent un client qui vient de s’abonner. Publiez ce topic avec le drapeau retain, ou décochez « Attendre un message retenu ».
WebSocket en panne avec reason="protocol" après un 101Quelque chose sur le chemin répond à la mise à niveau sans parler WebSocket — généralement une règle de reverse proxy qui avale l’en-tête Upgrade.