Associer la fonctionnalité Database Monitoring aux traces
Ce guide suppose que vous avez configuré Surveillance de la base de données et que vous utilisez APM. La connexion d’APM et de DBM injecte des identifiants de trace APM dans la collecte de données DBM, ce qui permet de corréler ces deux sources de données. Cela active les fonctionnalités du produit qui affichent les informations sur la base de données dans APM et les données APM dans DBM.
Avant de commencer
- Bases de données prises en charge
- Postgres, MySQL, SQL Server, Oracle, MongoDB
- Versions d’Agent prises en charge
- 7.46+
- Confidentialité des données
- L’activation de la propagation des commentaires SQL entraîne le stockage de données potentiellement confidentielles (noms de services) dans les bases de données, qui peuvent ensuite être accessibles par d’autres tiers ayant obtenu l’accès à la base de données.
Les intégrations du SDK Datadog prennent en charge un Mode de propagation, qui contrôle la quantité d’informations transmises des applications à la base de données.
| Mode de propagation | Description |
|---|
full | Envoie des informations de trace complètes à la base de données, vous permettant d’examiner des traces individuelles dans DBM. C’est la solution recommandée pour la plupart des intégrations. |
service | Envoie le nom du service, vous permettant de comprendre quels services contribuent à la charge de la base de données. |
disabled | Désactive la propagation et n’envoie aucune information des applications. |
Bases de données prises en charge
Remarque : CommandType.StoredProcedure n’est pas pris en charge pour les pilotes .NET.
Remarque : Le mode de propagation complet sur Aurora MySQL nécessite la version 3.
Remarque : CommandType.StoredProcedure n’est pas pris en charge pour les pilotes .NET.
Pour le mode full avec Java et .NET :
Si votre application utilise context_info pour l'instrumentation, le SDK Datadog l'écrase.
- L’instrumentation exécute une commande
SET context_info lorsque le client émet une requête, ce qui entraîne un aller-retour supplémentaire vers la base de données. - Prérequis :
- Version de l’agent 7.55.0 ou supérieure
- Version du traceur Java 1.39.0 ou supérieure
- Version du traceur .NET 3.3 ou supérieure
Pour le mode full avec Java :
- L’instrumentation écrase
V$SESSION.ACTION. - Prérequis : traceur Java 1.45 ou supérieur
Configuration :
Définissez les variables d’environnement suivantes dans votre application :
DD_SERVICE=(application name)
DD_ENV=(application environment)
DD_VERSION=(application version)
Ces balises identifient votre service dans les vues de corrélation APM et dans la répartition des connexions actives DBM.
Datadog recommande de définir le mode d’obfuscation sur obfuscate_and_normalize pour les versions de l’Agent 7.63 et supérieures. Ajoutez le paramètre suivant dans la section apm_config de votre fichier de configuration de l’agent APM :
sql_obfuscation_mode: "obfuscate_and_normalize"
Changer le mode d'obfuscation peut modifier le texte SQL normalisé. Si vous avez des moniteurs basés sur le texte SQL dans les traces APM, vous devrez peut-être les mettre à jour.
Mettez à jour vos dépendances d’application pour inclure 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
Mettez à jour votre code pour importer le package 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"
)
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
Variable d’environnement :
DD_DBM_PROPAGATION_MODE=full
Utilisation du code lors de l’enregistrement du conducteur :
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull), sqltrace.WithService("my-db-service"))
Utilisation du code sur 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)
}
Exemple complet :
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()
}
Suivez les instructions d’instrumentation de Java tracing et installez la version 1.11.0 ou supérieure de l’Agent.
Vous devez également activer jdbc-datasource l’instrumentation.
Activez la fonctionnalité de propagation de la surveillance de la base de données en utilisant une des méthodes suivantes :
- Définissez la propriété système
dd.dbm.propagation.mode=full - Définissez la variable d’environnement
DD_DBM_PROPAGATION_MODE=full
Exemple complet :
# 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
Testez la fonctionnalité dans votre application :
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
}
}
}
Versions du traceur 1.44 et supérieures :
Activez le traçage des instructions préparées pour Postgres en utilisant une des méthodes suivantes :
- Définissez la propriété système
dd.dbm.trace_prepared_statements=true - Définissez la variable d’environnement
export DD_DBM_TRACE_PREPARED_STATEMENTS=true
Remarque : L’instrumentation des instructions préparées écrase la propriété Application avec le texte _DD_overwritten_by_tracer, et entraîne un aller-retour supplémentaire vers la base de données. Ce voyage supplémentaire a un impact minimal sur le temps d’exécution des instructions SQL.
L'activation du traçage des instructions préparées peut entraîner une augmentation du maintien de connexion lors de l'utilisation d'Amazon RDS Proxy, ce qui réduit l'efficacité du pool de connexions. Pour plus d'informations, voir
Maintien de connexion sur RDS Proxy.
Versions du traceur inférieures à 1.44 :
Les instructions préparées ne sont pas prises en charge en mode full pour Postgres et MySQL, et tous les appels d’API JDBC qui utilisent des instructions préparées sont automatiquement rétrogradés en mode service. Étant donné que la plupart des bibliothèques SQL Java utilisent des instructions préparées par défaut, cela signifie que la plupart des applications Java ne peuvent utiliser que le mode service.
Dans votre Gemfile, installez ou mettez à jour dd-trace-rb vers la version 1.8.0 ou supérieure :
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'
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
Variable d’environnement :
DD_DBM_PROPAGATION_MODE=full
Option comment_propagation (par défaut : ENV['DD_DBM_PROPAGATION_MODE']), pour mysql2 ou pg :
Datadog.configure do |c|
c.tracing.instrument :mysql2, comment_propagation: 'full'
c.tracing.instrument :pg, comment_propagation: 'full'
end
Exemple complet :
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;")
Mettez à jour les dépendances de vos applications afin d’inclure dd-trace-py>=1.9.0 :
pip install "ddtrace>=1.9.0"
Pour Postgres, installez psycopg2 :
Pour MongoDB, installez pymongo :
Remarque : Le support de MongoDB nécessite dd-trace-py >= 3.5.0. Si vous devez mettre à niveau : pip install "ddtrace>=3.5.0".
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variables d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
Exemple 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",)))
Exemple 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)
Cette fonctionnalité nécessite que l'instrumentation automatique soit activée pour votre service .NET.
Suivez les instructions de tracing .NET Framework ou les instructions de tracing .NET Core pour installer le package de l’instrumentation automatique et activer le tracing pour votre service.
Assurez-vous d’utiliser une bibliothèque cliente prise en charge. Par exemple, Npgsql.
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variables d’environnement suivante :
- Pour Postgres et MySQL :
DD_DBM_PROPAGATION_MODE=full - Pour SQL Server :
DD_DBM_PROPAGATION_MODE=service ou DD_DBM_PROPAGATION_MODE=full avec des traceurs Java et .NET - Pour Oracle :
DD_DBM_PROPAGATION_MODE=service
Cette fonctionnalité nécessite que l'extension de traceur soit activée pour votre service PHP.
Suivez les instructions de tracing PHP pour installer le package de l’instrumentation automatique et activer le tracing pour votre service.
Assurez-vous d’utiliser une bibliothèque cliente prise en charge. Par exemple, PDO.
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variables d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
Installez ou mettez à jour dd-trace-js vers une version supérieure à 3.17.0 (ou 2.30.0 si vous utilisez la version 12 de Node.js en fin de vie) :
npm install dd-trace@^3.17.0
Mettez à jour votre code pour importer et initialiser le traceur :
// This line must come before importing any instrumented module.
const tracer = require('dd-trace').init();
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
Définissez la variable d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
Définissez le SDK pour utiliser l’option dbmPropagationMode (par défaut : ENV['DD_DBM_PROPAGATION_MODE']) :
const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })
Activez uniquement au niveau de l’intégration :
const tracer = require('dd-trace').init();
tracer.use('pg', {
dbmPropagationMode: 'full'
})
Exemple complet :
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
})
Pour désactiver la propagation après l’avoir activée, définissez DD_DBM_PROPAGATION_MODE=disabled.
Vérifiez l’intégration
Pour confirmer que l’intégration fonctionne :
- Exécutez votre application instrumentée et exécutez une requête de base de données.
- Dans Datadog, allez à Surveillance de base de données > Échantillons de requêtes.
- Confirmez que le badge de corrélation APM apparaît sur l’échantillon de requête.
Explorez la connexion APM dans DBM
Attribuez les connexions actives de la base de données aux services APM appelants
Décomposez les connexions actives pour un hôte donné par les services APM en amont qui effectuent les requêtes. Vous pouvez attribuer la charge sur une base de données à des services individuels pour comprendre quels services sont les plus actifs sur la base de données. Basculez vers la page du service en amont le plus actif pour poursuivre l’enquête.
Filtrez vos hôtes de base de données par les services APM qui les appellent
Filtrez la liste des bases de données pour n’afficher que les hôtes de base de données dont vos services APM spécifiques dépendent. Identifiez si l’une de vos dépendances en aval a une activité bloquante qui pourrait affecter la performance du service.
Affichez la trace associée pour un échantillon de requête
Lors de la visualisation d’un échantillon de requête dans la surveillance de base de données, si la trace associée a été échantillonnée par APM, vous pouvez voir l’échantillon DBM dans le contexte de la trace APM. Cela vous permet de combiner la télémétrie DBM, y compris le plan d’exécution et les performances historiques de la requête, avec la traçabilité du span au sein de votre infrastructure pour déterminer si un changement apporté à la base de données est responsable de la mauvaise performance de l’application.
Explorez la connexion DBM dans APM
Visualisez les hôtes de base de données en aval des services APM
Sur la page APM d’un service donné, visualisez les dépendances directes de la base de données en aval du service telles qu’identifiées par la surveillance de base de données, et déterminez si des hôtes ont une charge disproportionnée qui pourrait être causée par des voisins bruyants. Pour visualiser les dépendances de base de données d’un service :
- Sélectionnez le service dans le catalogue de logiciels pour ouvrir un panneau de détails.
- Sélectionnez Service Page dans le panneau.
- Sur la page de service, sélectionnez la section Databases.
- Dans la section Bases de données, sélectionnez l’onglet Databases.
Visualisez les durées des spans et consultez les détails des requêtes
Sélectionnez l’onglet Queries dans la section Databases de la page de service APM pour voir les anomalies de latence et une liste complète des requêtes de l’intervalle de temps sélectionné. Sélectionnez une requête dans le tableau pour afficher le panneau de requête et accéder aux diagnostics, aux détails des erreurs et aux informations de trace.
Identifiez les optimisations potentielles en utilisant les plans d’exécution pour les requêtes de base de données dans les traces
Consultez les performances historiques de requêtes similaires à celles exécutées dans votre trace, y compris les événements d’attente échantillonnés, la latence moyenne et les plans d’exécution récemment capturés, pour contextualiser la performance attendue d’une requête. Déterminez si le comportement est anormal et poursuivez l’enquête en passant à Surveillance de la base de données pour obtenir un contexte supplémentaire sur les hôtes de base de données sous-jacents.
Lectures complémentaires
Documentation, liens et articles supplémentaires utiles: