Vai al contenuto
CloseYourItdocsPagine

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.