Un equipo instrumenta su agente contra el SDK de un vendor de tracing. Funciona. Seis meses después el vendor cambia los precios, o el equipo se muda a Azure, o un cliente regulado exige que la telemetría no salga nunca de su red. Y resulta que cada span del código está escrito contra un formato que solo entiende un backend, así que la «migración rápida» es un trimestre reescribiendo instrumentación que nunca fue el producto. No compraron observabilidad: la alquilaron, y se les acaba de vencer el contrato.
Es la misma trampa que elegir modelo por el vendor que ganó la reunión en lugar de por el eval. Y la salida también es la misma: sé dueño del contrato, no del vendor.
El contrato es OpenTelemetry
OpenTelemetry (OTel) es el estándar neutral para emitir traces, métricas y logs. Instrumentas una vez, contra el SDK abierto, y la telemetría fluye hacia cualquier backend que hable OTel, sin tocar tu código. La instrumentación queda desacoplada del destino, y ese desacople es todo el asunto. En sistemas de agentes pasó de lujo a decisión estructural, porque hoy los destinos son varios y cambian: el backend nativo de una nube ahora, una plataforma de evaluación especializada después, tu propio almacén para la carga regulada.
Lo que vuelve esto real para agentes, y no solo para servicios genéricos, son las convenciones semánticas GenAI: un vocabulario estandarizado para las cosas que los agentes hacen de verdad. El modelo de una petición es gen_ai.request.model, sea GPT, Gemini o un modelo open-weights. El uso de tokens es gen_ai.usage.input_tokens, venga de donde venga. Las tool calls, los nombres de operación y los pasos de agente tienen nombres de atributo acordados. Eso es lo que permite que un mismo span se entienda igual en todos los backends en lugar de ser un blob propietario. La convención es la lengua franca; sin ella, unos traces «portables» son bytes que nadie más sabe leer.
Donde está la palanca es el Collector
Entre tus agentes y cualquier backend se sitúa el Collector de OTel, la pieza más desaprovechada del stack. Como toda la telemetría pasa por él, el Collector es donde haces lo que no quieres repartido por el código de la aplicación:
- Redacta la PII antes de que salga de tu red. En trabajo regulado esto no es opcional: el Collector elimina o hashea los campos sensibles, de forma que el texto del prompt y los argumentos de las tools ya salgan limpios hacia el backend. Se hace aquí, una vez, y no en cincuenta puntos de instrumentación.
- Muestrea a conciencia. Conserva el 100 % de los fallos y el 100 % de las modificaciones autónomas de los agentes; muestrea los éxitos rutinarios. La señal está en los fallos; los traces de éxito a máxima fidelidad son sobre todo costo.
- Enruta y reparte. El mismo trace puede ir al backend de tu nube para operación y a una plataforma de evaluación para puntuar con LLM como juez, sin cambiar nada río arriba.
Casi todos los frameworks de agentes ya lo hablan
La buena noticia es que rara vez partes de cero. Los frameworks grandes —las familias LangChain/LangGraph, CrewAI y AutoGen, y cada vez más los SDK nativos de nube— emiten traces OTel de forma nativa o por plugin. Las dos nubes grandes reciben OTel sin traducción: en Microsoft los traces aterrizan en Azure Monitor / Application Insights; en Google, en Cloud Trace y el resto de Cloud Observability. Cada stack tiene su propia guía de campo —Microsoft y Google—, pero la decisión de arquitectura viene antes: si tus spans son OTel con convenciones GenAI, qué backend de nube uses es enrutamiento, no una reescritura.
Lo que sigue siendo tuyo igualmente
OTel define cómo capturar telemetría. No decide qué conclusión sacar. Los traces en crudo te darán una tasa de fallo; no van a agrupar los fallos por sí solos, ni a señalar la causa raíz de coordinación, ni a atar una regresión al cambio autónomo de prompt de la semana pasada. Esa capa de interpretación —dashboards, evals sobre traces, detección de drift— es trabajo de verdad, y es donde las plataformas especializadas se ganan el sitio. Pero conviene que esa capa lea debajo un trace estándar y portable, para que la plataforma siga siendo una decisión reconsiderable y no un muro que te emparede.
Instrumentar el agente es la parte fácil. El error caro es instrumentarlo contra un formato que solo lee un vendor. Emite OTel con las convenciones GenAI, redacta y muestrea en el Collector, y deja el destino como una línea de enrutamiento que puedas cambiar de opinión mañana. Sé dueño del trace. Alquila el backend.