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, type TraceContext } from 'autotel';import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export const createUser = trace( (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 = trace((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.