import { registerInstrumentations } from "@opentelemetry/instrumentation";
import {
ConsoleSpanExporter,
SimpleSpanProcessor,
TracerProvider,
} from "@opentelemetry/sdk-trace";
import { resourceFromAttributes } from "@opentelemetry/resources";
import {
AsyncLocalStorageContextManager,
} from "@opentelemetry/context-async-hooks";
import {
OTLPTraceExporter as GrpcOTLPTraceExporter
} from "@opentelemetry/exporter-trace-otlp-grpc"; // Arize specific
import {
context,
diag,
DiagConsoleLogger,
DiagLogLevel,
trace,
} from "@opentelemetry/api";
import { Metadata } from "@grpc/grpc-js"
// For troubleshooting, set the log level to DiagLogLevel.DEBUG
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
// Arize specific - Create metadata and add your headers
const metadata = new Metadata();
// Your Arize Space and API Keys, which can be found in the UI, see below
metadata.set('arize-space-id', 'your-space-id');
metadata.set('arize-api-key', 'your-api-key');
const provider = new TracerProvider({
resource: resourceFromAttributes({
// Arize specific - The name of a new or preexisting project you
// want to export spans to
"openinference.project.name": "your-project-name",
}),
spanProcessors: [
new SimpleSpanProcessor({ exporter: new ConsoleSpanExporter() }),
new SimpleSpanProcessor({
exporter: new GrpcOTLPTraceExporter({
url: "https://otlp.arize.com/v1",
metadata,
}),
}),
],
});
// Add auto instrumentations here
trace.setGlobalTracerProvider(provider);
context.setGlobalContextManager(
new AsyncLocalStorageContextManager().enable(),
);