Skip to main content

Instrumentación de OpenTelemetry para el SDK de Copilot

Obtenga información sobre cómo agregar el seguimiento de OpenTelemetry a las SDK de Copilot aplicaciones.

¿Quién puede utilizar esta característica?

SDK de GitHub Copilot está disponible con todos los Copilot planes.

Nota:

          SDK de Copilot actualmente está en Versión preliminar técnica. La funcionalidad y la disponibilidad están sujetas a cambios.
          SDK de GitHub Copilot tiene soporte integrado para la configuración de OpenTelemetry en el proceso de la CLI y la propagación del contexto de seguimiento de W3C entre el SDK y la CLI.

Para obtener ejemplos en Python, Go y .NET, consulte el github/copilot-sdkrepositorio.

Compatibilidad con telemetría integrada

Para participar en la telemetría, proporcione al TelemetryConfig crear el cliente:

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

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

Opciones de TelemetryConfig

OpciónNode.js.Descripción
Punto de conexión de OTLPotlpEndpointDirección URL del punto de conexión HTTP de OTLP
Ruta de acceso del archivofilePathRuta de acceso del archivo para la salida de seguimiento de líneas JSON
Tipo de exportadorexporterType
          `"otlp-http"` o `"file"` |

| Nombre de origen | sourceName | Nombre del ámbito de instrumentación | | Captura de contenido | captureContent | Si se va a capturar el contenido del mensaje |

Propagación del contexto de rastreo

Nota:

La mayoría de los usuarios no necesitan esto. Lo de arriba TelemetryConfig es todo lo que necesita para recopilar trazas de la CLI. La propagación del contexto de seguimiento es una característica avanzada para las aplicaciones que crean sus propios intervalos de OpenTelemetry y quieren que aparezcan en el mismo seguimiento distribuido que los intervalos de la CLI.

El SDK puede propagar el contexto de seguimiento de W3C (traceparent/tracestate) en cargas JSON-RPC para que las trazas de la aplicación y las trazas de la CLI estén vinculadas en un seguimiento distribuido. Esto resulta útil cuando, por ejemplo, quiere mostrar la llamada del SDK como elemento secundario del intervalo de control de solicitudes.

Para obtener un diagrama de secuencia detallado del flujo de sesión, consulte el github/copilot-sdkrepositorio.

SDK a CLI (saliente)

Proporcione un onGetTraceContext callback en las opciones del cliente. Esto solo es necesario si la aplicación ya usa @opentelemetry/api y quiere vincular los intervalos con los intervalos de la CLI. El SDK llama a esta devolución de llamada antes de session.create, session.resume y 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 a SDK (entrante)

Cuando la CLI invoca un controlador de herramientas, el traceparent y tracestate del ámbito de la CLI están disponibles. Dado que el SDK no tiene ninguna dependencia de OpenTelemetry, se pasan como cadenas sin formato en el ToolInvocation objeto . Restaure el contexto manualmente si es necesario:

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();
      }
    })
  );
});

Lectura adicional

  •         [Convenciones semánticas de OpenTelemetry GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/) en la documentación de OpenTelemetry
    
  •         [Convenciones semánticas de MCP de OpenTelemetry](https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/) en la documentación de OpenTelemetry
    
  •         [SDK de Python de OpenTelemetry](https://opentelemetry.io/docs/instrumentation/python/) en la documentación de OpenTelemetry