En esta guía se considera que has configurado Database Monitoring y usas APM. La conexión de APM y DBM inyecta identificadores de traza (trace) de APM en la recopilación de datos de DBM, lo que permite la correlación de estas dos fuentes de datos. Esto permite que las funciones del producto muestren información sobre la base de datos en el producto de APM, y datos de APM en el producto de DBM.
Al habilitar la propagación de comentarios de SQL, se almacenan datos potencialmente confidenciales (nombres de servicios) en las bases de datos, a los que luego pueden acceder terceros a los que se les ha otorgado acceso a la base de datos.
Las integraciones del rastreador de APM admiten un Modo de propagación, que controla la cantidad de información que pasa de las aplicaciones a la base de datos.
El modo full envía información completa sobre la traza a la base de datos, lo que te permite investigar trazas individuales en DBM. Esta es la solución recomendada para la mayoría de las integraciones.
El modo service envía el nombre del servicio, lo que te permite conocer qué servicios contribuyen a la carga de la base de datos. Este es el único modo compatible con las aplicaciones de Oracle.
El modo disabled deshabilita la propagación y no envía información desde las aplicaciones.
DD_DBM_PROPAGATION_MODE
Postgres
MySQL
SQL Server
Oracle
full
*
service
* El modo de propagación completa en Aurora MySQL requiere la versión 3.
Rastreadores y controladores de aplicaciones compatibles
Si tu aplicación utiliza context_info para la instrumentación, el rastreador de APM lo sobrescribe.
La instrumentación ejecuta un comando SET context_info cuando el cliente emite una consulta, lo que realiza un recorrido completo adicional a la base de datos.
Requisitos previos:
Versión 7.55.0 o posterior del Agent
Versión 1.39.0 o posterior del rastreador de Java
Versión del rastreador .NET 3.3 o posterior
*** Oracle modo completo para Java:
La instrumentación sobrescribe V$SESSION.ACTION.
Requisito previo: rastreador de Java 1.45 o posterior
Para obtener la mejor experiencia de usuario, asegúrate de que las siguientes variables de entorno se hayan configurado en tu aplicación:
DD_SERVICE=(nombre de la aplicación)
DD_ENV=(entorno de la aplicación)
DD_VERSION=(versión de la aplicación)
Datadog recomienda establecer el modo de enmascaramiento en obfuscate_and_normalize para las versiones del Agent 7.63 y posteriores. Añade el siguiente parámetro en la sección apm_config de tu archivo de configuración del Agent de APM:
import("database/sql""gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"// 1.x
sqltrace"gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"// 1.x
// "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer" // 2.x
// sqltrace "github.com/DataDog/dd-trace-go/contrib/database/sql/v2" // 2.x
)funcmain(){// 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")iferr!=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)iferr!=nil{log.Fatal(err)}deferrows.Close()}
Sigue las instrucciones de instrumentación del rastreo de Java e instala la versión 1.11.0, o una posterior, del Agent.
Habilita la función de propagación de la monitorización de base de datos mediante uno de los siguientes métodos:
Establecer la propiedad del sistema dd.dbm.propagation.mode=full
Establecer la variable de entorno DD_DBM_PROPAGATION_MODE=full
Ejemplo completo:
# Inicia el Java Agent con las propiedades del sistema requeridas
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
Realiza un test de la función en tu aplicación:
publicclassApplication{publicstaticvoidmain(String[]args){try{Connectionconnection=DriverManager.getConnection("jdbc:postgresql://127.0.0.1/foobar?preferQueryMode=simple","user","password");Statementstmt=connection.createStatement();Stringsql="SELECT * FROM foo";stmt.execute(sql);stmt.close();connection.close();}catch(SQLExceptionexception){// lógica de excepción}}}
Versiones 1.44 y posteriores:
Habilita el rastreo de sentencias preparadas para Postgres mediante 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 sentencias preparadas sobrescribe la propiedad Application y provoca un recorrido de ida y vuelta adicional a la base de datos. Este movimiento adicional tiene un impacto insignificante en la latencia.
Versiones del rastreador inferiores a 1.44:
Las sentencias preparadas no son compatibles con el modo full para Postgres y MySQL, y todas las llamadas a la API de JDBC que utilizan sentencias preparadas se degradan automáticamente al modo service. Dado que la mayoría de las bibliotecas SQL de Java utilizan sentencias preparadas por defecto, esto significa que la mayoría de las aplicaciones Java sólo pueden utilizar el modo service.
En tu archivo GEM, instala o actualiza dd-trace-rb a la versión 1.8.0 o una posterior:
source'https://rubygems.org'gem'datadog'# Usa `'ddtrace', '>= 1.8.0'` si estás usando v1.x# Depende de tu usogem'mysql2'gem'pg'
Habilita la función de propagación de la monitorización de base de datos mediante uno de los siguientes métodos:
Variable de entorno:
DD_DBM_PROPAGATION_MODE=full
La opción comment_propagation (de manera predeterminada: ENV['DD_DBM_PROPAGATION_MODE']), para mysql2 o pg:
Habilita la función de propagación de la monitorización de base de datos al establecer la siguiente variable de entorno:
DD_DBM_PROPAGATION_MODE=full
Ejemplo completo:
importpsycopg2POSTGRES_CONFIG={"host":"127.0.0.1","port":5432,"user":"postgres_user","password":"postgres_password","dbname":"postgres_db_name",}# conecta a la base de datos de Postgresconn=psycopg2.connect(**POSTGRES_CONFIG)cursor=conn.cursor()# ejecuta consultas de SQLcursor.execute("select 'blah'")cursor.executemany("select %s",(("foo",),("bar",)))
Esta función requiere que la instrumentación automática se encuentre habilitada para tu servicio de .NET.
constpg=require('pg')consttracer=require('dd-trace').init({dbmPropagationMode:'full'})constclient=newpg.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)=>{// gestiona el resultado
})
Desglosa las conexiones activas de un host determinado por los servicios de APM ascendentes que realizan las solicitudes. Puedes atribuir la carga de una base de datos a servicios individuales para comprender qué servicios son los más activos en la base de datos. Dirígete a la página de servicios del servicio ascendente más activo para continuar la investigación.
Filtra con rapidez la lista de bases de datos para solo visualizar los hosts de bases de datos de los que dependen tus servicios de APM específicos. Identifica de manera sencilla si alguna de tus dependencias descendentes tiene actividad de bloqueo que pueda afectar el rendimiento del servicio.
Al visualizar una muestra de consulta en Database Monitoring, si APM ha realizado un muestreo de la traza asociada, puedes ver la muestra de DBM en el contexto de la traza de APM. Esto te permite combinar la telemetría de DBM, incluido el plan de explicación y el rendimiento histórico de la consulta, junto con el linaje del tramo dentro de tu infraestructura para comprender si un cambio en la base de datos es responsable del bajo rendimiento de la aplicación.
En la página de APM de un servicio determinado, visualiza las dependencias de bases de datos descendentes directas del servicio identificadas por Database Monitoring. Determina con rapidez si algún host tiene una carga desproporcionada que puede ser causada por hosts vecinos ruidosos. Para ver la página de un servicio, haz clic en el servicio en el Service Catalog a fin de abrir un panel de detalles y, a continuación, haz clic en View Service Page (Ver página de servicios) en el panel.
Visualiza el rendimiento histórico de consultas similares a las que se ejecutan en tu traza, incluidos los eventos de espera muestreados, la latencia promedio y los planes de explicación capturados recientemente, para contextualizar cómo se espera que funcione una consulta. Determina si el comportamiento es anormal y continúa la investigación al pasar a Database Monitoring para obtener contexto adicional sobre los hosts de bases de datos subyacentes.