Prisma
Prisma has an official @opentelemetry/instrumentation-prisma package. Use it directly with autotel.
Installation
Section titled “Installation”npm install autotel @prisma/instrumentation @prisma/clientimport { init } from 'autotel';import { PrismaInstrumentation } from '@prisma/instrumentation';
init({ service: 'my-app', instrumentations: [new PrismaInstrumentation()], endpoint: process.env.OTLP_ENDPOINT,});tsx --import ./instrumentation.ts src/index.tsTracing Prisma Operations
Section titled “Tracing Prisma Operations”import { trace, withTracing, type TraceContext } from 'autotel';import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export const createUser = withTracing({})( (ctx) => async (email: string, name?: string) => { ctx.setAttribute('user.email', email);
const user = await prisma.user.create({ data: { email, name }, }); // PrismaInstrumentation auto-creates child spans for the DB call
return user; },);
export const getUserWithPosts = withTracing({})( (ctx) => async (userId: number) => { ctx.setAttribute('user.id', userId);
const user = await prisma.user.findUnique({ where: { id: userId }, include: { posts: true }, });
return user; },);What Gets Traced
Section titled “What Gets Traced”PrismaInstrumentation automatically captures:
prisma:client:operation: Full Prisma operationprisma:client:serialize: Query serializationprisma:engine:query: Query engine executionprisma:engine:connection: Database connectionprisma:engine:db_query: Actual SQL queryprisma:engine:serialize: Response serialization
Examples
Section titled “Examples”example-prisma: SQLite setup with User/Post models, nested queries, and transactions.