Correlaciona DBM y las trazas

Esta guía asume que has configurado DBM 1 y estás utilizando APM 2. Conectar APM y DBM inyecta identificadores de trazas de APM en la recolección de datos de DBM, lo que permite la correlación de estas dos fuentes de datos. Esto habilita características del producto que muestran información de la base de datos en el producto APM, y datos de APM en el producto DBM.

Antes de comenzar

Bases de datos soportadas
Postgres, MySQL, SQL Server, Oracle, MongoDB
Versiones de Agente soportadas
7.46+
Privacidad de datos
Habilitar la propagación de comentarios SQL resulta en datos potencialmente confidenciales (nombres de servicios) que se almacenan en las bases de datos y que pueden ser accedidos por otros terceros que han sido autorizados para acceder a la base de datos.

Las integraciones del SDK de Datadog soportan un Modo de Propagación, que controla la cantidad de información que se pasa de las aplicaciones a la base de datos.

Modo de propagaciónDescripción
fullEnvía información completa de trazas a la base de datos, permitiéndote investigar trazas individuales dentro de DBM. Esta es la solución recomendada para la mayoría de las integraciones.
serviceEnvía el nombre del servicio, permitiéndote entender qué servicios contribuyen a la carga de la base de datos.
disabledDesactiva la propagación y no envía ninguna información desde las aplicaciones.

Bases de datos soportadas

IdiomaVersión mínima del rastreadorBiblioteca/MarcoModo
Godd-trace-go v2database/sql
sqlx
full
service
Javadd-trace-java >= 1.11.0jdbcfull
service
.NETdd-trace-dotnet >= 2.35.0Npgsqlfull
service
Node.jsdd-trace-js >= 3.17.0postgresfull
service
PHPdd-trace-php >= 0.86.0pdofull
service
Pythondd-trace-py >= 1.9.0psycopg2
psycopg
full
service
Pythondd-trace-py >= 2.9.0asyncpgfull
service
Rubydd-trace-rb >= 1.8.0pgfull
service

Nota: CommandType.StoredProcedure no es compatible con el controlador .NET.

IdiomaVersión mínima del rastreadorBiblioteca/MarcoModo
Godd-trace-go v2database/sql
sqlx
full
service
Javadd-trace-java >= 1.11.0jdbcfull
service
.NETdd-trace-dotnet >= 2.35.0MySql.Data
MySqlConnector
full
service
Node.jsdd-trace-js >= 3.17.0mysql
mysql2
full
service
PHPdd-trace-php >= 0.86.0pdo
MySQLi
full
service
Pythondd-trace-py >= 2.9.0aiomysql
mysql-connector-python
mysqlclient
pymysql
full
service
Rubydd-trace-rb >= 1.8.0mysql2full
service

Nota: CommandType.StoredProcedure no es compatible con los controladores .NET.

Nota: El modo de propagación completa en Aurora MySQL requiere la versión 3.

IdiomaVersión mínima del rastreadorBiblioteca/MarcoModo
Godd-trace-go v2database/sql
sqlx
service
Javadd-trace-java >= 1.11.0jdbcfull
service
.NETdd-trace-dotnet >= 2.35.0System.Data.SqlClient
Microsoft.Data.SqlClient
full
service

Nota: CommandType.StoredProcedure no es compatible con los controladores .NET.

Para full modo con Java y .NET:

Si su aplicación utiliza context_info para instrumentación, el SDK de Datadog lo sobrescribe.
  • La instrumentación ejecuta un SET context_info comando cuando el cliente emite una consulta, lo que provoca una ronda adicional de comunicación con la base de datos.
  • Requisitos previos:
    • Versión del agente 7.55.0 o superior
    • Versión del rastreador de Java 1.39.0 o superior
    • Versión del rastreador de .NET 3.3 o superior
IdiomaVersión mínima del rastreadorBiblioteca/MarcoModo
Godd-trace-go v2database/sql
sqlx
service
Javadd-trace-java >= 1.11.0jdbcfull
service

Para full modo con Java:

  • La instrumentación sobrescribe V$SESSION.ACTION.
  • Requisito previo: rastreador de Java 1.45 o superior
IdiomaVersión mínima del rastreadorBiblioteca/MarcoModo
Javadd-trace-java >= 1.58.0mongo-java-driver v3.8+full
service
Node.jsdd-trace-js >= 5.80.0mongodbfull
service
Pythondd-trace-py >= 3.5.0pymongofull
service

Configuración

Establezca las siguientes variables de entorno en su aplicación:

DD_SERVICE=(application name)
DD_ENV=(application environment)
DD_VERSION=(application version)

Estas etiquetas identifican su servicio en las vistas de correlación de APM y en el desglose de conexiones activas de DBM.

Datadog recomienda establecer el modo de ofuscación en obfuscate_and_normalize para las versiones del Agente 7.63 y superiores. Agregue el siguiente parámetro en la sección apm_config de su archivo de configuración del Agente APM:

  sql_obfuscation_mode: "obfuscate_and_normalize"
Cambiar el modo de ofuscación puede alterar el texto SQL normalizado. Si tiene monitores basados en texto SQL en los trazos de APM, es posible que necesite actualizarlos.

Actualice las dependencias de su aplicación para incluir dd-trace-go v2. Note: This documentation uses v2 of the Go tracer, which Datadog recommends for all users. If you are using v1, see the migration guide to upgrade to v2.

go get github.com/DataDog/dd-trace-go/v2 # 2.x

Actualice su código para importar el paquete contrib/database/sql:

import (
   "database/sql"
   "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
   sqltrace "github.com/DataDog/dd-trace-go/contrib/database/sql/v2"
)

Habilite la función de propagación de monitoreo de base de datos utilizando uno de los siguientes métodos:

  • Variable de entorno: DD_DBM_PROPAGATION_MODE=full

  • Usando código durante el registro del controlador:

    sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull), sqltrace.WithService("my-db-service"))
    
  • Usando código en sqltrace.Open:

    sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithService("my-db-service"))
    
    db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable", sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull))
    if err != nil {
        log.Fatal(err)
    }
    

Ejemplo completo:

import (
	"database/sql"
	"github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
   sqltrace "github.com/DataDog/dd-trace-go/contrib/database/sql/v2"
)

func main() {
	// The first step is to set the dbm propagation mode when registering the driver. Note that this can also
	// be done on sqltrace.Open for more granular control over the feature.
	sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull))

	// Followed by a call to Open.
	db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable")
	if err != nil {
		log.Fatal(err)
	}

	// Then, we continue using the database/sql package as we normally would, with tracing.
	rows, err := db.Query("SELECT name FROM users WHERE age=?", 27)
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()
}

Siga las instrucciones de instrumentación de Java tracing e instale la versión 1.11.0 o superior del Agente.

También debe habilitar la instrumentación jdbc-datasource instrumentation.

Habilite la función de propagación de DBM utilizando una de los siguientes métodos:

  • Establezca la propiedad del sistema dd.dbm.propagation.mode=full
  • Establezca la variable de entorno DD_DBM_PROPAGATION_MODE=full

Ejemplo completo:

# Start the Java Agent with the required system properties
java -javaagent:/path/to/dd-java-agent.jar -Ddd.dbm.propagation.mode=full -Ddd.integration.jdbc-datasource.enabled=true -Ddd.service=my-app -Ddd.env=staging -Ddd.version=1.0 -jar path/to/your/app.jar

Pruebe la función en su aplicación:

public class Application {
    public static void main(String[] args) {
        try {
            Connection connection = DriverManager
                    .getConnection("jdbc:postgresql://127.0.0.1/foobar?preferQueryMode=simple", "user", "password");
            Statement stmt = connection.createStatement();
            String sql = "SELECT * FROM foo";
            stmt.execute(sql);
            stmt.close();
            connection.close();
        } catch (SQLException exception) {
            //  exception logic
        }
    }
}

Las versiones del Tracer 1.44 y superiores: Habilite la traza de declaraciones preparadas para Postgres usando uno de los siguientes métodos:

  • Establece la propiedad del sistema dd.dbm.trace_prepared_statements=true
  • Establece la variable de entorno export DD_DBM_TRACE_PREPARED_STATEMENTS=true

Nota: La instrumentación de declaraciones preparadas sobrescribe la propiedad Application con el texto _DD_overwritten_by_tracer, y causa un viaje adicional a la base de datos. Este viaje adicional tiene un impacto mínimo en el tiempo de ejecución de las declaraciones SQL.

Habilitar el rastreo de declaraciones preparadas puede causar un aumento del pinning de conexiones cuando se utiliza Amazon RDS Proxy, lo que reduce la eficiencia del agrupamiento de conexiones. Para más información, consulta Pinning de conexiones en RDS Proxy.

Las versiones del Tracer anteriores a 1.44: Las declaraciones preparadas no son compatibles en full modo para Postgres y MySQL, y todas las llamadas a la API JDBC que utilizan declaraciones preparadas se degradan automáticamente a service modo. Dado que la mayoría de las bibliotecas SQL de Java utilizan declaraciones preparadas por defecto, esto significa que la mayoría de las aplicaciones Java solo pueden usar service modo.

En tu Gemfile, instala o actualiza dd-trace-rb a la versión 1.8.0 o superior:

source 'https://rubygems.org'
gem 'datadog' # Use `'ddtrace', '>= 1.8.0'` if you're using v1.x

# Depends on your usage
gem 'mysql2'
gem 'pg'

Habilita la función de propagación de Database Monitoring utilizando uno de los siguientes métodos:

  1. Variable de entorno: DD_DBM_PROPAGATION_MODE=full

  2. Opción comment_propagation (predeterminado: ENV['DD_DBM_PROPAGATION_MODE']), para mysql2 o pg:

     Datadog.configure do |c|
     	c.tracing.instrument :mysql2, comment_propagation: 'full'
     	c.tracing.instrument :pg, comment_propagation: 'full'
     end
    

Ejemplo completo:

require 'mysql2'
require 'ddtrace'

Datadog.configure do |c|
	c.service = 'billing-api'
	c.env = 'production'
	c.version = '1.3-alpha'

	c.tracing.instrument :mysql2, comment_propagation: ENV['DD_DBM_PROPAGATION_MODE']
end

client = Mysql2::Client.new(:host => "localhost", :username => "root")
client.query("SELECT 1;")

Actualiza las dependencias de tu aplicación para incluir dd-trace-py>=1.9.0:

pip install "ddtrace>=1.9.0"

Para Postgres, instala psycopg2:

pip install psycopg2

Para MongoDB, instala pymongo:

pip install pymongo

Nota: El soporte para MongoDB requiere dd-trace-py >= 3.5.0. Si necesitas actualizar: pip install "ddtrace>=3.5.0".

Habilita la función de propagación de Database Monitoring configurando la siguiente variable de entorno:

  • DD_DBM_PROPAGATION_MODE=full

Ejemplo de Postgres:

import psycopg2

POSTGRES_CONFIG = {
    "host": "127.0.0.1",
    "port": 5432,
    "user": "postgres_user",
    "password": "postgres_password",
    "dbname": "postgres_db_name",
}

# connect to postgres db
conn = psycopg2.connect(**POSTGRES_CONFIG)
cursor = conn.cursor()
# execute sql queries
cursor.execute("select 'blah'")
cursor.executemany("select %s", (("foo",), ("bar",)))

Ejemplo de MongoDB:

from pymongo import MongoClient

# Connect to MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['test_database']
collection = db['test_collection']

# Insert a document
collection.insert_one({"name": "test", "value": 1})

# Query documents
results = collection.find({"name": "test"})
for doc in results:
    print(doc)
Esta función requiere que la instrumentación automática esté habilitada para tu servicio .NET.

Sigue las instrucciones de trazado de .NET Framework o las instrucciones de trazado de .NET Core para instalar el paquete de instrumentación automática y habilitar el trazado para tu servicio.

Asegúrate de que estás utilizando una biblioteca de cliente compatible. Por ejemplo, Npgsql.

Habilita la función de propagación de Database Monitoring configurando la siguiente variable de entorno:

  • Para Postgres y MySQL: DD_DBM_PROPAGATION_MODE=full
  • Para SQL Server: DD_DBM_PROPAGATION_MODE=service o DD_DBM_PROPAGATION_MODE=full con rastreadores de Java y .NET
  • Para Oracle: DD_DBM_PROPAGATION_MODE=service
Esta función requiere que la extensión tracer esté habilitada para tu servicio de PHP.

Siga las instrucciones de traza de PHP para instalar el paquete de instrumentación automática y habilitar la traza para su servicio.

Asegúrese de que está utilizando una biblioteca de cliente compatible. Por ejemplo, PDO.

Habilita la función de propagación de Database Monitoring configurando la siguiente variable de entorno:

  • DD_DBM_PROPAGATION_MODE=full

Instale o actualice dd-trace-js a una versión superior a 3.17.0 (o 2.30.0 si utiliza la versión 12 de Node.js que ha llegado al final de su vida útil):

npm install dd-trace@^3.17.0

Actualiza tu código para importar e inicializar el tracer:

// This line must come before importing any instrumented module.
const tracer = require('dd-trace').init();

Habilita la función de propagación de Database Monitoring utilizando uno de los siguientes métodos:

  • Establece la siguiente variable de entorno:

    DD_DBM_PROPAGATION_MODE=full
    
  • Establece el SDK para usar la opción dbmPropagationMode (predeterminado: ENV['DD_DBM_PROPAGATION_MODE']):

    const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })
    
  • Habilita solo a nivel de integración:

    const tracer = require('dd-trace').init();
    tracer.use('pg', {
       dbmPropagationMode: 'full'
    })
    

Ejemplo completo:

const pg = require('pg')
const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })

const client = new pg.Client({
	user: 'postgres',
	password: 'postgres',
	database: 'postgres'
})

client.connect(err => {
	console.error(err);
	process.exit(1);
});

client.query('SELECT $1::text as message', ['Hello world!'], (err, result) => {
	// handle result
})

Para deshabilitar la propagación después de habilitarla, establece DD_DBM_PROPAGATION_MODE=disabled.

Verifica la integración

Para confirmar que la integración está funcionando:

  1. Ejecuta tu aplicación instrumentada y realiza una consulta a la base de datos.
  2. En Datadog, ve a Database Monitoring > Muestras de consulta.
  3. Confirma que la insignia de correlación APM aparece en la muestra de consulta.

Explore la Conexión APM en DBM

Atribuya las conexiones de base de datos activas a los servicios APM que las llaman

Vea las conexiones activas a una base de datos desglosadas por el servicio APM del que provienen.

Desglose las conexiones activas para un servidor dado por los servicios APM ascendentes que realizan las solicitudes. Puede atribuir la carga en una base de datos a servicios individuales para entender cuáles son los servicios más activos en la base de datos. Dirígete a la página del servicio más activo en la parte superior para continuar la investigación.

Filtra tus hosts de base de datos por los servicios APM que los llaman

Filtra tus hosts de base de datos por los servicios APM que los llaman.

Filtra la lista de bases de datos para mostrar solo los hosts de base de datos de los que dependen tus servicios APM específicos. Identifica si alguna de tus dependencias aguas abajo tiene actividad bloqueante que pueda afectar el rendimiento del servicio.

Ve la traza asociada para una muestra de consulta

Previsualiza la traza de APM muestreada de la que proviene la muestra de consulta que se está inspeccionando.

Al ver una Muestra de Consulta en Database Monitoring, si la traza asociada ha sido muestreada por APM, puedes ver la Muestra de DBM en el contexto de la traza de APM. Esto te permite combinar la telemetría de DBM, que incluye el plan de ejecución y el rendimiento histórico de la consulta, junto con el seguimiento del tramo dentro de tu infraestructura, para determinar si un cambio en la base de datos es responsable del bajo rendimiento de la aplicación.

Explora la Conexión de DBM en APM

Visualiza los servidores de base de datos aguas abajo de los servicios APM

En la página de APM para un servicio dado, visualiza las dependencias directas de base de datos aguas abajo del servicio según lo identificado por DBM, y determina si algún servidor tiene una carga desproporcionada que puede ser causada por vecinos ruidosos. Para ver las dependencias de base de datos de un servicio:

  1. Selecciona el servicio en el Catálogo de Software para abrir un panel de detalles.
  2. Selecciona Service Page en el panel.
  3. En la página del Servicio, selecciona la sección Databases.
  4. Dentro de la sección de Bases de Datos, selecciona la pestaña Databases.

Visualiza las duraciones de los tramos y ve los detalles de la consulta

Selecciona la pestaña Queries de la sección Databases en la página del servicio APM para ver los valores anómalos de latencia y una lista completa de consultas del intervalo de tiempo seleccionado. Selecciona una consulta en la tabla para ver el panel de consulta y acceder a diagnósticos, detalles de errores e información de traza.

Identifica optimizaciones potenciales utilizando planes de explicación para consultas de base de datos en traza

Identifica ineficiencias utilizando planes de explicación para consultas de base de datos en traza.

Ve el rendimiento histórico de consultas similares a las ejecutadas en tu traza, incluyendo eventos de espera muestreados, latencia promedio y planes de explicación capturados recientemente, para contextualizar cómo se espera que rinda una consulta. Determina si el comportamiento es anormal y continúa la investigación pivotando hacia DBM para obtener contexto adicional sobre los servidores de base de datos subyacentes.

Lectura adicional