Changements de site web
Surveillez le contenu d’une page web, ou d’un site entier, et soyez informé quand il change : une page de tarifs ou de conditions, un site de documentation, l’avis de maintenance d’un fournisseur, une page d’annonce publique, ou votre propre site après un déploiement. Chaque changement est conservé avec le texte avant et après, un diff ligne par ligne et, quand un navigateur est disponible, une capture d’écran de chaque version.
Ce qui est comparé est le texte visible de chaque page, pas son HTML :
scripts, styles, commentaires, blocs noscript, svg et template sont
abandonnés, les espaces sont réduits et chaque bloc (paragraphe, titre,
élément de liste, ligne de tableau) devient une ligne. Une nouvelle
compilation de la même page, un attribut réordonné ou un nouveau nom de
ressource anti-cache ne change rien ; une phrase reformulée si.
Quelle partie de la page
Section intitulée « Quelle partie de la page »La navigation, l’en-tête, le pied de page et les encadrés latéraux du site
sont écartés : ils sont les mêmes sur toutes les pages, et une nouvelle entrée
de menu ferait sinon signaler chaque page comme changée en une seule
vérification. Ils suivent les rôles que leur donne le HTML : chaque nav, un
header ou un footer qui n’est pas dans un article, aside, main, nav
ou section (l’en-tête d’un article est gardé), un aside hors d’un article
et d’un main, et tout élément de rôle navigation, banner, contentinfo ou
search. Leurs liens restent suivis pour trouver les pages d’un site.
Comparer menus, en-tête et pied de page désactive cela.
Zone surveillée restreint la comparaison à certains éléments, par exemple
main ou #content ; une page où aucun n’est trouvé est lue en entier plutôt
que comme vide. Zones exclues écarte d’autres éléments : un bandeau de
cookies, un encadré « derniers articles », un emplacement publicitaire. Les
deux prennent des sélecteurs simples, séparés par des virgules : une balise
(main), un id (#content), des classes (.cookie-banner), des attributs
([role=alert], [data-ad]), ou plusieurs ensemble
(div.notice[role=alert]). Les descendants (main p) et autres combinateurs
ne sont pas pris en charge.
Ports réseau à ouvrir
Section intitulée « Ports réseau à ouvrir »Du serveur DumbMonit (ou de son agent relais) vers l’équipement :
| Port | Protocole | Usage |
|---|---|---|
| 443 | TCP | Lecture de la page en HTTPS (port par défaut) |
| 80 | TCP | Seulement avec une adresse http:// (port par défaut) |
Page ou site
Section intitulée « Page ou site »Page (le défaut) lit l’adresse de la surveillance et rien d’autre. Ça peut aussi être un document texte brut ou JSON, comparé ligne par ligne.
Site part de l’adresse et suit chaque page sous le même dossier
(https://example.com/docs/intro.html couvre tout sous /docs/ ;
Préfixe de chemin choisit un autre dossier). Les pages sont trouvées :
- dans le sitemap du site : celles que
robots.txtannonce (lignesSitemap:), ou/sitemap.xml, index de sitemap inclus (un niveau) ; - à défaut, ou quand le sitemap ne liste rien sous le dossier, en suivant les liens de chaque page, en largeur d’abord.
Seules les pages de la même origine (schéma, hôte et port) sont suivies.
Quand la page de départ redirige vers un autre hôte du même site
(example.com vers www.example.com, http vers https, ou un
sous-domaine comme docs.example.com), le site est tenu pour être là-bas, et
les liens vers le premier hôte sont lus sur le second. Quand elle redirige
vers un tout autre site (une page de connexion comme
login.microsoftonline.com, un domaine tiers), ce site n’est pas parcouru :
seule la page de départ est lue, et aucune page n’est déclarée supprimée. Les
liens vers images, feuilles de style, scripts, PDF, archives et autres
fichiers sont ignorés par leur extension, et toute réponse qui n’est pas
HTML est ignorée. Les fragments (#section), les paramètres de suivi
(utm_…, fbclid, gclid et consorts) et les requêtes vides sont retirés,
une page est donc une adresse ; Ignorer les paramètres d’URL retire toute
la partie ?…. robots.txt est
respecté pour les pages trouvées ainsi : le groupe qui nomme DumbMonit,
ou sinon le groupe *, avec Allow, Disallow, * et $.
Le crawl est poli : deux requêtes à la fois au plus, une demi-seconde
entre deux lots, le User-Agent DumbMonit/<version>, un délai de 15
secondes par requête et 5 Mo lus au plus par page. Il s’arrête à
Pages maximum (25 par défaut, 200 au plus) ou après dix minutes. Quand
Pages maximum l’a arrêté, la page de la surveillance dit combien de pages ont
été trouvées : la partie du site non surveillée n’est jamais une surprise.
User agent remplace DumbMonit/<version> pour un site qui refuse les
robots.
Comment une vérification fonctionne
Section intitulée « Comment une vérification fonctionne »La surveillance est sondée comme n’importe quel autre (chaque minute par défaut), mais les pages ne sont lues que toutes les Vérifier toutes les minutes (60 par défaut, de 5 à 10080). Entre deux, la sonde ne rapporte que l’état de la dernière vérification : le site n’est pas touché chaque minute. Une vérification tourne en arrière-plan ; deux vérifications de la même surveillance ne se chevauchent jamais, et Vérifier maintenant sur la page de la surveillance en démarre une tout de suite.
La première vérification n’enregistre que la référence : chaque page est lue et conservée, rien n’est rapporté. À partir de là, pour chaque page :
| Situation | Ce qui est conservé |
|---|---|
| Même texte que la dernière fois (après Ignorer les lignes) | Rien de nouveau ; la page est marquée vérifiée. |
| Texte différent | Un nouvel instantané et un événement changée, avec le nombre de lignes ajoutées et retirées. |
| Une page jamais vue avant, ou revue après avoir disparu | Un instantané et un événement nouvelle page. |
| La page répond 404 ou 410 | Un événement page supprimée, le dernier instantané comme « avant ». |
| Portée site : un crawl complet n’atteint plus une page connue | Un événement page supprimée aussi (« Plus liée »). Un crawl arrêté par Pages maximum ou par sa limite de temps ne conclut jamais qu’une page a disparu. |
| Toute autre erreur sur une page (délai dépassé, 403, 500 sur une sous-page) | L’erreur est montrée sur la page ; aucun événement. |
Changer l’adresse, la portée, le préfixe de chemin, Pages maximum, les zones ou Ignorer les lignes fait de la prochaine vérification une nouvelle référence plutôt que de rapporter chaque page comme changée (ou, pour un Pages maximum plus élevé, chaque page ajoutée comme nouvelle). Une mise à jour de DumbMonit qui lit les pages autrement fait de même, une fois.
Quand une vérification trouve la même modification sur plusieurs pages (les mêmes lignes retirées et ajoutées, comme un bandeau), la page de la surveillance la montre une seule fois, avec les pages concernées.
Dans le diff, une ligne remplacée montre quels mots ont changé : soulignés côté ajout, barrés côté retrait.
Ignorer les lignes
Section intitulée « Ignorer les lignes »Des lignes qui changent à chaque visite — une horloge, un compteur de
visiteurs, « mis à jour il y a 5 minutes », une citation aléatoire —
seraient rapportées à chaque vérification. Ignorer les lignes contient
des expressions régulières (syntaxe regex de Rust), une par ligne ou
jointes avec | ; tout texte de ligne que l’une d’elles correspond est
laissé de côté avant comparaison. Par exemple :
Updated \d+ minutes ago|Visitors: \d+|© \d{4}Page de départ inaccessible
Section intitulée « Page de départ inaccessible »Quand la page de départ elle-même ne peut pas être lue (pas de réponse, connexion refusée, délai dépassé, HTTP 5xx), la surveillance est inaccessible : la sonde échoue, et la règle « Surveillance inaccessible » se déclenche comme pour toute surveillance. La page de départ est alors retentée à chaque sonde, son retour est donc vu dans la minute. Une page de départ qui refuse l’accès (401, 403) est rapportée comme un problème de configuration, pas comme une panne. Les erreurs sur d’autres pages du site ne sont montrées que sur ces pages.
Les adresses que seul l’hôte DumbMonit lui-même peut atteindre (loopback, link-local, le service de métadonnées cloud) sont refusées sauf si Autoriser les cibles loopback et link-local est activée ; les adresses LAN privées sont toujours autorisées.
La règle intégrée Site web changé (webchange_detected, Info) se
déclenche après une vérification qui a trouvé au moins un changement (page
changée, nouvelle ou supprimée), et la notification nomme les pages :
« /tarifs, /contact and 2 more ». Tant qu’elle est active, chaque nouvelle
vérification qui trouve des changements est notifiée à nouveau, avec ses
propres pages, même si ce sont les mêmes ; l’alerte se résout à la première
vérification qui ne trouve rien de nouveau. Elle reste une seule alerte par
surveillance du début à la fin : l’acquitter ou la mettre en sourdine depuis
l’alerte couvre aussi les vérifications suivantes. Elle lit
dumbmonit_webchange_last_check_changes ; attachez-la à un canal comme
toute autre règle, ou augmentez sa gravité, dans Alertes → Règles. Voir
Règles intégrées.
| Métrique | Quoi |
|---|---|
dumbmonit_webchange_pages | Pages suivies (pages supprimées exclues). |
dumbmonit_webchange_pages_failed | Pages suivies dont la dernière lecture a échoué. |
dumbmonit_webchange_last_check_changes | Changements trouvés par la dernière vérification. |
Les métriques apparaissent une fois la première vérification faite.
Captures d’écran
Section intitulée « Captures d’écran »L’image DumbMonit n’a pas de navigateur : les captures d’écran viennent
d’un Chromium headless optionnel, piloté via le protocole Chrome DevTools.
Ajoutez-en un comme service browser à côté de DumbMonit dans
docker-compose.yml, et pointez le serveur vers lui :
services: dumbmonit: environment: DUMBMONIT_BROWSER_URL: http://browser:9222 browser: image: chromedp/headless-shell:stable shm_size: 256m restart: unless-stoppedLancez ensuite docker compose up -d. Rien ne publie le port du navigateur :
seul le serveur DumbMonit lui parle, via le réseau Compose.
DUMBMONIT_BROWSER_URL pointe DumbMonit vers le navigateur (tout Chromium
démarré avec --remote-debugging-port, par exemple
chromedp/headless-shell ; le serveur lit /json/version et parle à
l’adresse que le nom d’hôte résout).
Une capture n’est prise que quand une page obtient un nouvel instantané (la référence, et chaque changement), jamais sur une vérification sans changement : une fenêtre de 1366 × 900, la page complète jusqu’à 5000 pixels, en JPEG. L’option Captures d’écran les désactive pour une surveillance. Sans navigateur, ou quand il ne répond pas, la comparaison de texte fonctionne pareil et les instantanés n’ont simplement pas d’image ; la page de la surveillance le dit.
Le navigateur charge la page comme le ferait un visiteur, avec ses scripts : ce qu’il montre peut différer du texte que DumbMonit a comparé, qui est le HTML envoyé par le serveur.
Stockage
Section intitulée « Stockage »Le texte de chaque instantané est gardé dans la base de données (1 Mo au
plus par page) ; les captures d’écran sont des fichiers sous
/data/webchange/<id de la surveillance>/. Par surveillance, les 500 derniers
changements sont gardés ; un instantané est gardé tant qu’il est le plus
récent d’une page ou qu’un changement gardé s’y réfère, et tout le reste,
fichiers inclus, est supprimé après chaque vérification. Supprimer
la surveillance retire tout cela.
Surveiller un site web pour des changements
Section intitulée « Surveiller un site web pour des changements »Les étapes ci-dessous sont celles que montre l’avis à côté du formulaire.
-
Dans l’adresse, collez la page à surveiller, avec http:// ou https://.
-
Pour suivre un site entier ou une section, réglez « Portée » sur « site ».
-
Listez les lignes qui changent à chaque visite (une horloge, un compteur) dans « Ignorer les lignes », sous forme d’expressions régulières.
-
Pour une capture d’écran de chaque version, suivez la section « Captures d’écran » de cette page.
Avec la portée « site », toutes les pages sous le même dossier sont suivies, jusqu’à « Pages maximum ». La première vérification enregistre seulement la référence, rien n’est signalé. Ensuite, chaque vérification compare le texte visible page par page et garde une copie avant/après de chaque changement, affichée sur la page de la surveillance ; l’alerte « Website changed » vous prévient.
Identifiants : aucun. Les vérifications tournent toujours sur le serveur DumbMonit : une surveillance de site web ne peut pas passer par un agent relais.
| Option | Défaut | Signification |
|---|---|---|
Portée (scope) | page | page : l’adresse seulement. site : chaque page sous le même dossier. |
Pages maximum (max_pages) | 25 | Portée site : pages lues au plus par vérification, de 1 à 200. |
Préfixe de chemin (path_prefix) | dossier de l’adresse | Portée site : seulement les pages dont le chemin commence par ceci (/docs/). |
Ignorer les lignes (ignore) | — | Expressions régulières ; les lignes de texte correspondantes ne sont pas comparées. |
Zone surveillée (content_selector) | — | Sélecteurs simples ; seul le texte qu’ils contiennent est comparé. |
Zones exclues (exclude_selector) | — | Sélecteurs simples ; leur texte n’est pas comparé. |
Comparer menus, en-tête et pied de page (keep_page_chrome) | false | Comparer aussi la navigation, l’en-tête, le pied de page et les encadrés du site. |
Ignorer les paramètres d’URL (ignore_query) | false | Portée site : les adresses qui ne diffèrent que par leur partie ?… sont une même page. |
User agent (user_agent) | — | Envoyé à la place de DumbMonit/<version>. |
Captures d’écran (screenshots) | true | Garder une capture d’écran de chaque nouvelle version, quand un navigateur est configuré. |
Vérifier toutes les (check_interval_minutes) | 60 | Minutes entre deux vérifications, de 5 à 10080. |
Accepter un certificat non vérifiable (insecure_tls) | false | Pour un site propre derrière un certificat autosigné. |
Autoriser les cibles loopback et link-local (allow_private_targets) | false | Atteindre un site servi par l’hôte DumbMonit lui-même. |