Night Watch
Maintenez vos sites en ligne malgré les inondations de scrapers : une surveillance de disponibilité, un bouclier Cloudflare Free-plan et un garde-fou anti-bots.
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

Ce qu'il fait
Night Watch ouvre chaque site que vous hébergez comme le ferait un visiteur, toutes les cinq minutes, et vous signale dès qu'un cesse de s'ouvrir et dès qu'il est de nouveau disponible. Quand un site tombe parce qu'un scraper le sature, le chien de garde active une règle Cloudflare qui bloque le flux à la périphérie, et votre application continue de servir les utilisateurs tant que cela dure.
- Chaque site, toutes les cinq minutes. Chaque zone de votre compte Cloudflare, ainsi que toute page que vous ajoutez, éventuellement avec un texte que la page doit contenir. Un message quand un site tombe, un quand il revient avec la durée de l'indisponibilité, un rappel tant qu'il reste en panne. Par e-mail, par webhook de chat, ou les deux.
- Un bouclier sur l'offre gratuite. Trois règles WAF personnalisées : un user agent Chrome sans les en-têtes que tout vrai Chrome envoie reçoit un défi, les requêtes de pages provenant de nuages de scrapers reçoivent un défi, et une règle d'urgence lance un défi aux inconnus sans cookie ni lien de provenance pendant une saturation.
- Activé tout seul. Quand un site tombe en panne à cause d'une surcharge, le chien de garde active la règle d'urgence et le précise dans l'alerte ; plusieurs heures après le retour du site, il la désactive. Un bouclier que vous avez activé vous-même reste activé.
- Un portique dans votre application. Un fichier sans dépendances, pour FastAPI, Starlette, Django, Flask ou toute application ASGI ou WSGI. Il refuse les faux navigateurs avant l'exécution de votre code et maintient les inconnus dans les limites de ce que chaque worker peut servir. Les utilisateurs disposant d'un cookie ou arrivant via un lien ne le remarquent jamais.
- Voyez ce qui vous frappe. Ce que le pare-feu de Cloudflare a soumis à un défi dans les dernières minutes, par règle, réseau, pays, user agent et chemin, lu à partir des événements bruts autorisés par l'offre gratuite.
- Annulation intégrée. Chaque modification de règle sauvegarde d'abord les règles de la zone, vos propres règles restent en place avant les nôtres, et une commande restaure le jeu sauvegardé.
Testé sur nos propres sites
- Une vraie saturation, une heure : sur l'un de nos sites, la règle des faux navigateurs a soumis à un défi plus de 10 000 requêtes. Les 10 000 que Cloudflare nous laisse lire provenaient de 9 627 adresses de haut débit résidentiel, aucune n'envoyant plus de 4 requêtes : une limite de débit par adresse n'aurait jamais déclenché.
- Chaque règle, testée en direct sur l'offre gratuite : un inconnu a été soumis à un défi quand la règle d'urgence était activée et laissé passer avec un cookie ou un lien ; un user agent Chrome sans en-têtes de navigateur a été soumis à un défi ; Googlebot est passé. Les règles précédentes de la zone ont ensuite été restaurées à l'identique.
- La porte sous 1 747 requêtes par seconde sur uvicorn : chaque scraper sans en-têtes de navigateur est refusé, les inconnus restent limités à ce que l'application peut servir, et chaque visiteur habituel, visiteur via un lien et requête Googlebot est servi en 0,20 seconde médiane, le temps propre de la page.
Ce qui est inclus
La surveillance
Sites depuis votre compte Cloudflare et une liste, vérifications qui imitent un visiteur, messages par e-mail ou webhook, et un test qui distingue « tout est en panne » de « cette machine est hors ligne ».
Le bouclier
Installation, statut, activation, désactivation, désinstallation et restauration pour une zone ou toutes, avec sauvegarde préalable de chaque modification.
La porte
Middleware ASGI et WSGI, une page « un instant » de 2 secondes qui remet un cookie, et une ligne de journal par minute.
Le guide d'intervention
Que faire quand un site est lent ou en panne, comment interpréter un afflux, et ce qu'il ne faut pas activer dans le tableau de bord Cloudflare.
Prérequis
- Linux avec systemd et Python 3.10 ou plus récent ; rien à installer via pip.
- Pour le bouclier et la vue des événements, des sites sur Cloudflare (tout plan, y compris le plan Gratuit) et un jeton API.
- Une machine autre que celle qui sert vos sites, afin qu'elle puisse vous signaler quand celle-ci est en panne.
À savoir
- La règle d'urgence interroge aussi une personne qui saisit votre adresse dans un navigateur neuf, c'est pourquoi elle est désactivée sauf en cas d'afflux.
- Les bots vérifiés et les robots qui se nomment ne sont jamais interrogés, et les moteurs de recherche ne sont jamais rejetés par la porte.
- Le bouclier utilise trois des cinq règles personnalisées autorisées par zone sur le plan Gratuit.
Questions
Ai-je besoin d'un plan Cloudflare payant ?
Non. Tout ce que fait Night Watch fonctionne sur le plan Gratuit : les trois règles, la vue des événements et le basculement automatique. Un plan payant ne vous donne que plus d'emplacements de règles à côté des nôtres.
Va-t-il bloquer Google ou les robots d'exploration des moteurs de recherche IA ?
Non. Les bots vérifiés de Cloudflare et tous les robots qui se nomment dans leur user agent passent le bouclier, et la porte ne rejette jamais un moteur de recherche ni un aperçu de lien. Si vous souhaitez bloquer les robots d'exploration IA, c'est un choix distinct dans le tableau de bord Cloudflare.
Mon site n'est pas sur Cloudflare. Est-ce encore utile ?
La surveillance et la porte fonctionnent partout : la surveillance ouvre n'importe quelle URL, et la porte protège n'importe quelle application web Python. Le bouclier et la vue des événements nécessitent Cloudflare.
Quelle est la différence avec un moniteur de disponibilité ?
Un moniteur de disponibilité vous indique qu'un site est hors ligne. Night Watch vous le dit aussi, puis agit sur la cause la plus courante que nous observons : il active le bouclier à la périphérie de Cloudflare, et le sas continue de servir les personnes souhaitées par votre application pendant la durée de l'afflux.
Mis à jour: