Skip to main content

Instrumentation OpenTelemetry pour le Kit de développement logiciel (SDK) Copilot

Découvrez comment ajouter le suivi OpenTelemetry à vos Kit de développement logiciel (SDK) Copilot applications.

Qui peut utiliser cette fonctionnalité ?

SDK GitHub Copilot est disponible dans tous les forfaits Copilot.

Remarque

          Kit de développement logiciel (SDK) Copilot est actuellement en préversion technique. Les fonctionnalités et la disponibilité sont susceptibles de changer.
          SDK GitHub Copilot prend en charge la configuration d’OpenTelemetry sur le processus CLI et la propagation du contexte de trace W3C entre le Kit de développement logiciel (SDK) et l’interface CLI.

Pour obtenir des exemples dans Python, Go et .NET, consultez le github/copilot-sdkréférentiel.

Prise en charge de la télémétrie intégrée

Pour choisir la télémétrie, fournissez une TelemetryConfig valeur lors de la création du client :

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
  telemetry: {
    otlpEndpoint: "http://localhost:4318",
  },
});

Options de configuration de télémétrie

ChoixNode.JSDescription
Point de terminaison OTLPotlpEndpointURL du point de terminaison HTTP OTLP
Chemins d'accès au fichierfilePathChemin d’accès au fichier pour la sortie de trace de lignes JSON
Type d’exportateurexporterType
          `"otlp-http"` ou `"file"` |

| Nom de la source | sourceName | Nom de la portée d’instrumentation | | Capturer du contenu | captureContent | Indique s’il faut capturer le contenu du message |

Propagation du contexte de trace

Remarque

La plupart des utilisateurs n’ont pas besoin de cela. TelemetryConfig est tout ce qu'il vous faut pour collecter des traces depuis l'interface CLI. La propagation du contexte de trace est une fonctionnalité avancée pour les applications qui créent leurs propres étendues OpenTelemetry et veulent qu’elles apparaissent dans la même trace distribuée que les étendues de l’interface CLI.

Le Kit de développement logiciel (SDK) peut propager le contexte de trace W3C (traceparent/tracestate) sur des charges utiles JSON-RPC afin que les étendues de votre application et les étendues de l’interface CLI soient liées dans une trace distribuée. Cela est utile lorsque, par exemple, vous souhaitez afficher l’appel du SDK en tant que sous-élément de votre plage de traitement des requêtes.

Pour obtenir un diagramme de séquence détaillé du flux de session, consultez le github/copilot-sdkréférentiel.

SDK vers CLI (sortant)

Fournissez une fonction de rappel dans les options du client. Cela n’est nécessaire que si votre application utilise @opentelemetry/api déjà et que vous souhaitez lier vos étendues avec les étendues de l’interface CLI. Le Kit de développement logiciel (SDK) appelle ce callback avant session.create, session.resume et session.send RPC :

TypeScript
import { CopilotClient } from "@github/copilot-sdk";
import { propagation, context } from "@opentelemetry/api";

const client = new CopilotClient({
  telemetry: { otlpEndpoint: "http://localhost:4318" },
  onGetTraceContext: () => {
    const carrier: Record<string, string> = {};
    propagation.inject(context.active(), carrier);
    return carrier; // { traceparent: "00-...", tracestate: "..." }
  },
});

CLI vers SDK (entrant)

Lorsque l’interface CLI appelle un gestionnaire d’outils, les traceparent et tracestate de l'étendue du CLI sont disponibles. Étant donné que le SDK n’a pas de dépendance OpenTelemetry, ceux-ci sont passés sous forme de chaînes brutes sur l’objet ToolInvocation . Restaurez le contexte manuellement si nécessaire :

TypeScript
import { propagation, context, trace } from "@opentelemetry/api";

session.registerTool(myTool, async (args, invocation) => {
  // Restore the CLI's trace context as the active context
  const carrier = {
    traceparent: invocation.traceparent,
    tracestate: invocation.tracestate,
  };
  const parentCtx = propagation.extract(context.active(), carrier);

  // Create a child span under the CLI's span
  const tracer = trace.getTracer("my-app");
  return context.with(parentCtx, () =>
    tracer.startActiveSpan("my-tool", async (span) => {
      try {
        const result = await doWork(args);
        return result;
      } finally {
        span.end();
      }
    })
  );
});

Lectures complémentaires

  •         [Conventions sémantiques OpenTelemetry GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/) dans la documentation OpenTelemetry
    
  •         [Conventions sémantiques MCP OpenTelemetry](https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/) dans la documentation OpenTelemetry
    
  •         [Kit de développement logiciel (SDK) Python OpenTelemetry](https://opentelemetry.io/docs/instrumentation/python/) dans la documentation OpenTelemetry