Documentazione / Collega
Database Node
Monitora query lente e ripetute con pg, mysql2, Drizzle e Prisma PostgreSQL.
Il modulo /database dell’SDK JavaScript 0.13.0 osserva istanze pg e mysql2 fornite dall’applicazione. Genera misure native slow_query e segnalazioni di query ripetute: non crea tracce OpenTelemetry. È disattivato per impostazione predefinita.
PostgreSQL
Installa @bussolabs/closeyourit-js@^0.13.0 e il driver pg compatibile con la tua applicazione. Fornisci connessione e credenziali solo a runtime, lato server. Questo esempio esegue una query reale e chiude le risorse al termine; in un server, installa una volta all’avvio e chiudi allo spegnimento.
import pg from 'pg'
import { Client } from '@bussolabs/closeyourit-js'
import { DatabaseMonitoring } from '@bussolabs/closeyourit-js/database'
const client = new Client({
endpointUrl: process.env.CLOSEYOURIT_ENDPOINT_URL!,
projectId: process.env.CLOSEYOURIT_PROJECT_ID!,
token: process.env.CLOSEYOURIT_TOKEN,
environment: process.env.NODE_ENV,
release: process.env.APP_VERSION,
})
const pool = new pg.Pool()
const monitoring = new DatabaseMonitoring(client, {
enabled: true,
slowQueryThresholdMs: 100,
repeatedQueryThreshold: 5,
})
monitoring.instrumentPostgres(pool)
await client.runWithScope(() =>
monitoring.profile(async () => {
await pool.query('SELECT $1::integer AS value', [1])
}),
)
monitoring.uninstall()
await client.close()
await pool.end()
Le soglie predefinite sono 100 ms e cinque ripetizioni. La query dell’esempio non produce necessariamente una misura: deve superare la soglia. Per una verifica controllata usa slowQueryThresholdMs: 0, poi controlla il dato memorizzato nel progetto corretto.
profile() delimita una richiesta: le richieste concorrenti non condividono i conteggi. Le query fuori dal profilo possono produrre misure di lentezza, ma non un conteggio di ripetizioni. Per richieste HTTP a callback o streaming usa monitoring.request(end => …) e chiama end alla conclusione della risposta. Le query database in streaming restano escluse.
MySQL e ORM
Per un pool mysql2/promise, chiama monitoring.instrumentMysql(pool, 'promise'); per le API callback, usa 'callback'. Con Drizzle strumenta lo stesso pool pg/mysql2 passato all’ORM. Con Prisma 7 strumenta il pool PostgreSQL esplicito passato a PrismaPg.
Prisma MySQL, motori interni, cursori e oggetti query personalizzati non sono coperti. Le query fisiche vengono contate una volta al confine del driver. Una ripetizione è un indizio, non la dimostrazione di un problema N+1 semantico.
Privacy, limiti e rimozione
Valori dei parametri e risultati non vengono inviati. Gli identificatori SQL sono pseudonimizzati; questo non garantisce anonimato contro tentativi di indovinare i nomi. La sintassi non riconosciuta viene omessa senza cambiare la query dell’applicazione.
I limiti sono 256 istanze, 64 profili simultanei, 64 gruppi e 1.000 operazioni per profilo. Un profilo incompleto non genera un verdetto aggregato. monitoring.getStats() espone le omissioni locali. Il trasporto non aggiunge una coda offline persistente o nuovi tentativi automatici.
uninstall() ripristina solo i metodi ancora posseduti dall’adattatore. Pool, transazioni e client SDK restano dell’applicazione. Verifica anche disattivazione e rimozione; consulta le combinazioni osservate prima di estendere il supporto ad altri runtime.