es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo enviar trazas de OpenTelemetry directamente desde el navegador a Honeycomb.io?

He estado tratando de construir una implementación de OpenTelemetry que envía trazas directamente a Honeycomb.io.

// tracer.js
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';

const HONEYCOMB_DATASET = '<nombre_del_dataset>';
const HONEYCOMB_TEAM = '<clave_api>';
const HONEYCOMB_URL = 'https://api.honeycomb.io:443/v1/traces/';
const exporter = new OTLPTraceExporter({
  url: HONEYCOMB_URL,
  headers: {
    'X-Honeycomb-Team': HONEYCOMB_TEAM,
    'X-Honeycomb-Dataset': HONEYCOMB_DATASET,
  },
});

const provider = new WebTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));

export const tracer = provider.getTracer('tracer predeterminado');

Si posteriormente llamo a:

tracer.startSpan('clic en enlace').setAttributes(atributos).end();

Recibo una respuesta 501 de `https://api.honeycomb.io/v1/traces/` con el siguiente cuerpo:

{
  "message": "Tipo de contenido no válido. Solo se admite application/protobuf."
}

¿Cómo puedo enviar mis trazas como Protobufs?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para enviar trazas como Protobufs, debes configurar el campo metadata del OTLPTraceExporter para incluir el encabezado Content-Type. Actualiza la definición del exporter en el código de la siguiente manera:

    const metadata = new grpc.Metadata();
    metadata.set('Content-Type', 'application/protobuf');
    const exporter = new OTLPTraceExporter({
      url: HONEYCOMB_URL,
      headers: {
        'X-Honeycomb-Team': HONEYCOMB_TEAM,
        'X-Honeycomb-Dataset': HONEYCOMB_DATASET,
      },
      metadata
    });
    

    Esto enviará las trazas como Protobufs, que es el tipo de contenido soportado por la API de Honeycomb.io.

Comments are closed.