otel-instrumentation

Par dash0hq · agent-skills

Configure les spans de trace, définit des métriques personnalisées, paramètre les exporteurs de logs et optimise les stratégies d'échantillonnage pour l'instrumentation OpenTelemetry. À utiliser lors de l'instrumentation d'applications avec des traces, des métriques ou des logs. Se déclenche sur les demandes relatives à l'observabilité, la télémétrie, le tracing, la collecte de métriques, l'intégration de logging ou la configuration OTel.

npx skills add https://github.com/dash0hq/agent-skills --skill otel-instrumentation

Guide d'instrumentation OpenTelemetry

Conseils d'experts pour mettre en œuvre une télémétrie OpenTelemetry de haute qualité et économe.

Règles et référence rapide

Cas d'usage / Règle Description
telemetry Point d'entrée — types de signaux, corrélation et navigation
resolve-values Résolution des valeurs de configuration à partir de la base de code
resources Attributs de ressource — identité du service et environnement
k8s Déploiement Kubernetes — API de descente, spécification de pod
spans Spans — nommage, type, statut et hygiène
logs Logs — journalisation structurée, sévérité, corrélation de trace
metrics Métriques — types d'instruments, nommage, unités, cardinalité
sensitive-data Données sensibles — prévention des PII, nettoyage, redaction
validation Validation de la télémétrie — liste de contrôle de vérification post-déploiement
nodejs Configuration d'instrumentation Node.js
go Configuration d'instrumentation Go
python Configuration d'instrumentation Python
java Configuration d'instrumentation Java
scala Configuration d'instrumentation Scala
dotnet Configuration d'instrumentation .NET
ruby Configuration d'instrumentation Ruby
php Configuration d'instrumentation PHP
browser Configuration d'instrumentation navigateur
nextjs Instrumentation full-stack Next.js (App Router)

Documentation officielle

Démarrage

Suivez ces étapes pour instrumenter une application à partir de zéro :

  1. Choisissez votre règle SDK — sélectionnez la règle spécifique au langage dans le tableau ci-dessus (p. ex. nodejs, python).
  2. Configurez les attributs de ressource — définissez l'identité du service et l'environnement selon resources.
  3. Ajoutez des spans, métriques et logs — instrumentez votre code en suivant spans, metrics et logs.
  4. Protégez les données sensibles — nettoyez les PII avant export selon sensitive-data.
  5. Validez — confirmez que la télémétrie atteint le backend en utilisant la liste de contrôle dans validation.

L'extrait ci-dessous montre un span complet avec attributs et statut pour Node.js — consultez nodejs pour la configuration complète incluant l'initialisation du SDK, la configuration de l'exportateur et l'instrumentation automatique :

const { trace, SpanStatusCode } = require('@opentelemetry/api');
const tracer = trace.getTracer('my-service', '1.0.0');

tracer.startActiveSpan('operation-name', async (span) => {
  try {
    span.setAttribute('user.id', userId);
    span.setAttribute('order.id', orderId);

    const result = await processOrder(orderId);

    span.setAttribute('order.status', result.status);
    span.setStatus({ code: SpanStatusCode.OK });
    return result;
  } catch (err) {
    span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
    span.recordException(err);
    throw err;
  } finally {
    span.end();
  }
});

Principes clés

Densité de signal plutôt que volume

Chaque élément de télémétrie doit remplir l'un de ces trois objectifs :

  • Détecter — aider à identifier qu'il y a un problème
  • Localiser — aider à préciser où se situe le problème
  • Expliquer — aider à comprendre pourquoi c'est arrivé

Si ce n'est pas le cas, ne l'émettez pas.

Échantillonner dans le pipeline, pas dans le SDK

Utilisez le sampler AlwaysOn (le paramètre par défaut) dans chaque SDK. Ne configurez pas les samplers côté SDK — ils prennent des décisions irréversibles avant que le résultat d'une requête soit connu. Déférez tout échantillonnage au Collector, où les politiques peuvent être modifiées de manière centralisée sans redéployer les applications.

SDK (AlwaysOn)  →  Collector (sampling)  →  Backend (retention)
     ↓                    ↓                       ↓
  Tous les spans    Échantillonnage      Politiques de
  exportés          tête ou queue         stockage

Skills similaires