freedzhost.cloud

n8n : une horloge agentique qui remarque ce qui s'est arrêté

Niveau AvancéTemps estimé 1 hÀ lire avant Homelab 14 : automatiser sans abonnement Zapier, avec n8n et une cascade de décisionUn mot inconnu ? Lexique

Les automatisations échouent en silence. Une sauvegarde qui ne tourne plus, un tri de mails qui a planté, une file d'agents figée : rien ne casse bruyamment, la tâche s'arrête, c'est tout. Un réseau d'agents a besoin d'une horloge qui sait ce qui aurait dû se passer, et le dit quand ce n'est pas arrivé. La nôtre tient en trois petites pièces.

Registretâche, période, marge, gravitéVos workflowsleurs signes de vieTickchaque minuteTable des événementsinfo · warning · criticalAlertescritical → téléphoneChien de gardeautre machine, toutes les 2 minâge du dernier tick
Chaque tâche déclare sa cadence dans un registre. Une fois par minute, le tick compare le dernier signe de vie de chaque tâche à sa période plus sa marge, et écrit un événement. Un chien de garde sur une autre machine vérifie que le tick lui-même est vivant.

1. Un registre : ce qui doit arriver, et à quelle fréquence

Une table PostgreSQL liste chaque tâche avec sa période attendue, une marge, et la gravité d'un raté, par exemple :

create table clock_registry (
  job       text primary key,
  kind      text,      -- 'cadence' ou 'on_demand'
  period_s  int,       -- intervalle attendu entre deux signes de vie
  slack_s   int,       -- tolérance avant de compter comme en retard
  severity  text,      -- 'warning' ou 'critical'
  note      text
);

Mettre une tâche sous surveillance, c'est une ligne, pas un nouveau workflow.

2. Le tick : une fois par minute, comparer

Un workflow déclenché chaque minute lit le registre et le dernier signe de vie de chaque tâche (les statistiques de workflow de n8n lui-même, ou le dernier événement de la tâche), et calcule un état : ok, en retard, bloqué. Il écrit un événement par tâche dans une table d'événements, avec la gravité du registre. Un autre workflow transforme les événements critical en notification sur le téléphone (Homelab 10).

Deux comptes de base, pas un : le tick lit avec un compte en lecture seule et écrit avec un compte qui ne sait qu'insérer des événements. Un bug dans un nœud Code ne peut pas vider une table qu'il ne peut pas toucher.

3. Le chien de garde : hors de n8n

Si n8n s'arrête, le tick s'arrête avec lui, et rien à l'intérieur de n8n ne peut le signaler. Alors un minuscule script sur une autre machine demande toutes les deux minutes l'âge du dernier tick (un webhook qui le renvoie), et envoie lui-même une alerte quand il est trop vieux. Qui surveille le surveillant : quelque chose qui ne dépend pas de lui.

Pièges que nous avons payés

Une tâche qui ne parle que quand quelque chose ne va pas (un contrôle de certificat qui se tait tant que tout va bien) doit être déclarée on_demand, pas sur une cadence. Sinon son silence ressemble à une mort et votre téléphone sonne pour rien.

« Tourne depuis longtemps » n'est pas « bloqué ». Les workflows qui ne gardent pas leurs exécutions réussies peuvent laisser des lignes marquées en cours. N'appelez une tâche bloquée que si elle a aussi cessé de réussir dans deux fois sa période.

Lisez les statistiques de workflow de n8n pour les signes de vie, pas la table complète des exécutions : plusieurs workflows ne gardent aucune exécution réussie, et vous concluriez qu'ils ne tournent jamais.

Redémarrer n8n a fait lever deux fausses alarmes critiques à notre horloge. Prévenez qui lit les alertes avant de le redémarrer.

Utile ? Dites-nous ce qu'il faut mesurer ensuite.