我一直在尝试构建一个 OpenTelemetry 实现,它将跟踪直接发送到 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 = '<DATA_SET>';
const HONEYCOMB_TEAM = '<API_KEY>';
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('default tracer');
如果我稍后打电话
tracer.startSpan('link click').setAttributes(attributes).end();
我收到来自
https://api.honeycomb.io/v1/traces/
的 501 回复,正文如下:
{
"message": "Invalid content-type. Only application/protobuf is supported."
}
如何将我的痕迹作为 Protobuf 发送?
目前 Honeycomb 建议解决此问题的方法是通过应用程序与其 API 之间的 OpenTelemetry 收集器。
这个想法是,您可以通过适用于您的基础设施的任何形式的安全性,通过 HTTPS 将跟踪发送到收集器,然后让收集器在将数据发送到 Honeycomb 之前处理您的数据(从而防止您的 Honeycomb API 密钥暴露给浏览器)。
来源:https://www.honeycomb.io/blog/opentelemetry-browser-instrumentation/
我计划更新这个答案,因为 Honeycomb 更新了他们的 API 以通过 HTTPS 处理跟踪收集。
啊,现在更新了。您可以使用 JSON 将 OTLP/HTTP 跟踪发送到 Honeycomb.io