Tutorials

Observabilité des pipelines CAPTCHA avec OpenTelemetry (2026)

Périmètre sûr : ce guide vise vos propres applications — QA, préproduction, production — ou des systèmes pour lesquels vous détenez une autorisation écrite. Il ne couvre pas l'automatisation de sites tiers.

Un pipeline CAPTCHA mal instrumenté ne tombe pas en panne : il ralentit, et personne ne sait depuis quand. Trois signaux rendent le problème visible : le temps de résolution du token, le code retour de l'API et le statut de la requête qui suit. Voici comment les tracer avec OpenTelemetry.

Réussite du solveur et réussite du workflow : deux taux distincts

Indicateur Ce qu'il mesure Ce qu'un écart révèle
Réussite du solveur Le token revient de l'API Paramètres envoyés ou type de CAPTCHA erronés
Acceptation en aval Votre backend valide le token Session, cookies ou token expiré

Étape 1 : isoler l'environnement et sécuriser la clé

Séparez la QA de la production et stockez la clé CaptchaAI dans un coffre ou un secret CI, jamais dans le dépôt. Ajoutez l'attribut deployment.environment à votre ressource OpenTelemetry : sans lui, vos tableaux de bord mélangeront les environnements au premier incident.

Étape 2 : encapsuler l'appel dans une fonction tracée

Enveloppez l'appel dans une fonction unique qui reçoit le sitekey et l'URL de votre page, ouvre un span dédié et retourne le token. Le span porte la durée, le code retour et l'identifiant de tâche. Changer de type — reCAPTCHA v2, Turnstile, GeeTest v3 — ne touche plus à l'instrumentation.

Étape 3 : valider le token côté backend

  • Vérifiez le token côté serveur avant toute opération métier.
  • Restez dans la session qui a déclenché le défi CAPTCHA.
  • Ouvrez un span enfant dédié : les tokens appliqués dans la mauvaise session s'y repèrent immédiatement.

Exemple : créer une tâche Turnstile en Node.js

L'appel de création de tâche Turnstile, à envelopper dans le span de l'étape 2 :

import fetch from 'node-fetch';

const API_KEY = process.env.CAPTCHAAI_KEY;

export async function createTurnstileTask(siteKey, pageUrl) {
  const res = await fetch('https://api.captchaai.com/createTask', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      clientKey: API_KEY,
      task: {
        type: 'TurnstileTaskProxyless',
        websiteURL: pageUrl,
        websiteKey: siteKey,
      },
    }),
  });
  const data = await res.json();
  return data.taskId;
}

Attributs OpenTelemetry à renseigner

Attribut Ce qu'il permet Valeur type
captcha.type Latence par famille turnstile, userrecaptcha
captcha.task_id Rejeu d'un incident identifiant renvoyé par l'API
captcha.duration_ms Médiane et P95 de résolution 4200
captcha.outcome Réussite, timeout ou erreur ok, timeout, error

Ces valeurs varient selon l'environnement : mesurez les vôtres avant de fixer un seuil.

Scénario : un pipeline CAPTCHA tracé chez OVHcloud

Une équipe QA lyonnaise teste chaque nuit son propre portail client, protégé par Turnstile, depuis un worker OVHcloud. Un filtre sur captcha.outcome = timeout montre que les échecs se concentrent sur une tranche horaire : c'est le parallélisme qu'il faut ajuster, pas le code. Sur le plan STANDARD ($30/mois, 15 threads), facturé au thread avec des résolutions illimitées, monter les threads la nuit ne change pas la facture.

Corréler logs et traces CAPTCHA par environnement

Propagez le trace_id dans chaque ligne de log autour de l'appel CAPTCHA et séparez les journaux par environnement : un identifiant suffit alors à rejouer un scénario complet. Côté RGPD, tracez des identifiants techniques, jamais les données saisies dans le formulaire.

Contrôles avant mise en production

  • Périmètre limité à vos applications ou à des sources autorisées.
  • Clé CaptchaAI en coffre ou en secret CI, jamais dans le code source.
  • Un span par appel : durée, code retour, identifiant de tâche.
  • Retry idempotent plafonné et campagnes rejouables depuis votre CI.
  • Acceptation en aval suivie séparément de la réussite du solveur.

FAQ

Quels attributs faut-il ajouter en priorité aux spans CAPTCHA ?

Quatre suffisent : type de CAPTCHA, identifiant de tâche, durée en millisecondes et issue (ok, timeout, error). Ils suffisent à sortir une médiane, un P95 et un taux de réussite par famille.

Comment distinguer un échec de résolution d'un rejet côté applicatif ?

Par deux spans. Si la résolution finit en ok mais que le span de vérification renvoie une erreur, la cause est côté applicatif : session différente, cookies perdus ou token expiré. L'inverse pointe vers les paramètres envoyés au solveur.

Combien de threads prévoir pour un pipeline instrumenté ?

Un thread correspond à une résolution simultanée, pas à un volume mensuel. Une campagne CI séquentielle tient sur BASIC ($15/mois, 5 threads) ; un parc de workers parallèles justifie ADVANCE ($90/mois, 50 threads). Vos spans donnent le pic de résolutions concurrentes.

Le traçage des appels CAPTCHA pose-t-il un problème RGPD ?

Pas si vous vous en tenez aux métadonnées techniques : les attributs recommandés ici ne contiennent aucune donnée personnelle. N'enregistrez ni les valeurs de formulaire, ni les adresses IP, ni le token complet.

Guides connexes

Instrumentez d'abord, réglez ensuite. – Obtenez votre clé CaptchaAI.

Les commentaires sont désactivés pour cet article.