Associer la fonctionnalité Database Monitoring aux traces
Ce guide suppose que vous avez configuré Database Monitoring et que vous utilisez la solution APM. En connectant la solution APM et DBM, vous permettez dʼinjecter des identifiants de traces de la solutions APM dans les données collectées par DBM, ce qui permet de corréler ces deux sources de données. Cela permet aux caractéristiques du produit d’afficher les informations relatives à la base de données dans le produit APM et les données de la solution APM dans le produit DBM.
Avant de commencer
- Bases de données prises en charge
- Postgres, MySQL, SQL Server, Oracle
- Versions de l’Agent prises en charge
- 7.46 et versions ultérieures
- Confidentialité des données
- l’activation de la propagation des commentaires SQL entraîne le stockage de données potentiellement confidentielles (noms des services) dans les bases de données ; ces données sont alors accessibles aux tierces parties ayant accès à la base de données.
Les intégrations du traceur de lʼAPM fonctionnent avec un mode de propagation, qui permet de contrôler la quantité de données que les applications transmettent à la base de données.
- Le mode
full
envoie des informations complètes sur les traces à la base de données, ce qui vous permet d’enquêter sur chaque trace dans DBM. C’est la solution conseillée pour la plupart des intégrations. - Le mode
service
envoie le nom du service, ce qui vous permet de comprendre quels services contribuent à la charge de la base de données. Il sʼagit du seul mode pris en charge pour les applications Oracle et SQL Server. - Le mode
disabled
désactive la propagation et n’envoie aucune information provenant des applications.
SQL Server et Oracle ne prennent pas en charge le mode de propagation full
en raison du comportement de mise en cache des instructions, susceptible dʼentraîner des problèmes de performances lors de l’ajout du contexte complet des traces.
DD_DBM_PROPAGATION_MODE | Postgres | MySQL | SQL Server | Oracle |
---|
full | | | | |
service | | | | |
Traceurs et pilotes d’applications pris en charge
* CommandType.StoredProcedure nʼest pas pris en charge
Configuration
Afin de profiter de la meilleure expérience possible, assurez-vous que les variables dʼenvironnement suivantes sont définies dans votre application :
DD_SERVICE=(application name)
DD_ENV=(application environment)
DD_VERSION=(application version)
Mettez à jour les dépendances de vos applications afin d’inclure dd-trace-go@v1.44.0 ou une version ultérieure :
go get gopkg.in/DataDog/dd-trace-go.v1@v1.44.0
Mettez à jour votre code afin d’importer le package contrib/database/sql
:
import (
"database/sql"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
)
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
Variable d’environnement :
DD_DBM_PROPAGATION_MODE=full
Utilisation de code durant l’enregistrement du pilote :
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull), sqltrace.WithServiceName("my-db-service"))
Utilisation de code sur sqltrace.Open
:
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithServiceName("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"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
)
func main() {
// La première étape consiste à définir le mode de propagation DBM lors de l'enregistrement du pilote. Notez qu'il est également possible de le faire
// sur sqltrace.Open pour avoir un contrôle plus granulaire sur la fonctionnalité.
sqltrace.Register("postgres", &pq.Driver{}, sqltrace.WithDBMPropagation(tracer.DBMPropagationModeFull))
// On appelle ensuite Open.
db, err := sqltrace.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=disable")
if err != nil {
log.Fatal(err)
}
// Puis on utilise le package database/sql comme d'habitude, avec 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 pour le tracing de Java et installez la version 1.11.0
ou une version ultérieure de lʼAgent.
Vous devez également activer lʼinstrumentation jdbc-datasource
.
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
- Définir la propriété du système
dd.dbm.propagation.mode=full
- Définir la variable dʼenvironnement
DD_DBM_PROPAGATION_MODE=full
Exemple complet :
# Démarrer l'Agent Java avec les propriétés système requises
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
}
}
}
Remarque : les instructions préparées ne sont pas prises en charge en mode full
, et tous les appels de lʼAPI JDBC qui utilisent des instructions préparées sont automatiquement rétrogradés en mode service
. Comme la plupart des bibliothèques Java SQL 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 le traceur dd-trace-rb ou mettez-le à jour vers la version 1.6.0
ou ultérieur :
source 'https://rubygems.org'
gem 'datadog' # Utilisez `'ddtrace', '>= 1.8.0'` avec les versions v1.x
# Selon votre utilisation
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"
Installez psycopg2 :
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variable d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
Exemple complet :
import psycopg2
POSTGRES_CONFIG = {
"host": "127.0.0.1",
"port": 5432,
"user": "postgres_user",
"password": "postgres_password",
"dbname": "postgres_db_name",
}
# connectez-vous à postgres db
conn = psycopg2.connect(**POSTGRES_CONFIG)
cursor = conn.cursor()
# exécutez les requêtes sql
cursor.execute("select 'blah'")
cursor.executemany("select %s", (("foo",), ("bar",)))
Cette fonctionnalité nécessite dʼactiver lʼinstrumentation automatique pour votre service .NET.
Suivez les instructions relatives au tracing .NET Framework ou celles relatives au tracing .NET Core afin d’installer le package d’instrumentation automatique et d’activer le tracing pour votre service.
Vérifiez que vous utilisez une bibliothèque client compatible, par exemple Npgsql
.
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variable d’environnement suivante :
- Pour Postgres et MySQL :
DD_DBM_PROPAGATION_MODE=full
- Pour SQL Server :
DD_DBM_PROPAGATION_MODE=service
Afin de pouvoir utiliser cette fonctionnalité, l'extension du traceur doit être activée pour votre service PHP.
Suivez les instructions relatives au tracing PHP afin d’installer le package d’instrumentation automatique et d’activer le tracing pour votre service.
Vérifiez que vous utilisez une bibliothèque client compatible, par exemple PDO
.
Activez la fonctionnalité de propagation de Database Monitoring en définissant la variable d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
Installez le traceur dd-trace-js ou mettez-le à jour vers une version ultérieure à 3.17.0
(ou 2.30.0
en cas d’utilisation de 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 :
// Cette ligne doit précéder l'importation des modules instrumentés.
const tracer = require('dd-trace').init();
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
En définissant la variable d’environnement suivante :
DD_DBM_PROPAGATION_MODE=full
En configurant le traceur de façon à utiliser l’option dbmPropagationMode
(par défaut : ENV['DD_DBM_PROPAGATION_MODE']
):
const tracer = require('dd-trace').init({ dbmPropagationMode: 'full' })
En activant le traceur 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) => {
// traitement du résultat
})
Explorer la connexion APM dans DBM
Attribuer les connexions de base de données actives aux services APM les appelant
Obtenez une vue détaillée des connexions actives pour un host donné selon les services APM en amont qui émettent les requêtes. Vous pouvez attribuer la charge d’une base de données à des services individuels afin d’identifier ceux qui sont les plus actifs sur la base de données. Basculez sur la page du service en amont le plus actif pour poursuivre l’examen des données.
Filtrer les hosts de votre base de données selon les services APM qui les appellent
Filtrez rapidement la liste des bases de données afin d’afficher uniquement les hosts de base de données dont dépendent vos services APM spécifiques. Identifiez facilement si l’une de vos dépendances en aval connaît un blocage susceptible de nuire aux performances du service.
Consulter la trace associée à un échantillon de requête
Si vous consultez un échantillon de requête dans Database Monitoring et que la trace associée a été échantillonnée par APM, vous pouvez afficher l’échantillon de requête DBM dans le contexte de la trace APM. Procéder de la sorte permet de combiner les données de télémétrie DBM (notamment le plan d’exécution ainsi que les performances historiques de la requête) et l’historique de la span au sein de votre infrastructure afin de déterminer si une modification apportée à la base données est à l’origine des mauvaises performances de l’application.
Explorer la connexion DBM dans APM
Visualiser les hosts de base de données en aval des services APM
Sur la page APM d’un service donné, consultez les dépendances de base de données directement en aval du service identifiées par Database Monitoring. Déterminez rapidement si des hosts présentent une charge disproportionnée pouvant être due à d’autres hosts sollicitant fortement la base de données. Pour afficher la page d’un service, cliquez sur le service de votre choix dans le Service Catalog pour ouvrir le volet des détails, puis cliquez sur View Service Page au sein de celui-ci.
Identifier de potentielles optimisations à l’aide des 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, notamment les événements d’attente échantillonnés, la latence moyenne et les plans d’exécution capturés récemment, afin d’apporter du contexte au comportement attendu d’une requête. Déterminez si le comportement est anormal et poursuivez l’examen en basculant sur Database Monitoring pour obtenir encore plus d’informations concernant les hosts de base de données sous-jacents.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: