evanderkoogh / otel-cf-workers

An OpenTelemetry compatible library for instrumenting and exporting traces for Cloudflare Workers
BSD 3-Clause "New" or "Revised" License
210 stars 40 forks source link

MultiSpanExporter implementation #44

Closed willie closed 10 months ago

willie commented 10 months ago

Includes an alternate MultiSpanExporterAsync implementation, which in local testing, seems to tickle some bugs in wrangler dev. Has no impact on how it works, but providing this as an alternate for now.

I use this in my code like so:

const config: ResolveConfigFn = (env: Env, _trigger) => {
    const exporters: SpanExporter[] = [];

    exporters.push(new OTLPExporter({
        url:  'http://localhost:4318/v1/traces',
    }))

    return {
        exporter: new MultiSpanExporter(exporters),
        service: { name: SERVICE_NAME },
    }
}
willie commented 10 months ago

A cleaner way of initialization as an example:

const config: ResolveConfigFn = (env: Env, _trigger) => {
    const exporterConfigs: OTLPExporterConfig[] = [
        {
            url: 'https://otlp.uptrace.dev/v1/traces',
            headers: { 'uptrace-dsn': env.UPTRACE_DSN }
        },
        {
            url: 'https://ingest.signoz.io/v1/traces',
            headers: { 'signoz-access-token': env.SIGNOZ_ACCESS_TOKEN }
        },
        {
            url: 'https://otlp.nr-data.net/v1/traces',
            headers: { 'api-key': env.NR_API_KEY }
        // },
        // {
        //  url :'http://localhost:4318/v1/traces',
        }
    ];

    const exporters: SpanExporter[] = exporterConfigs.map(config => new OTLPExporter(config));

    return {
        exporter: new MultiSpanExporter(exporters),
        service: { name: env.NR_SERVICE_NAME },
    }
}