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.
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.
import("database/sql""gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"sqltrace"gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql")funcmain(){// 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")iferr!=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)iferr!=nil{log.Fatal(err)}deferrows.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ʼinstrumentationjdbc-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 :
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){// 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 utilisationgem'mysql2'gem'pg'
Activez la fonctionnalité de propagation de Database Monitoring via l’une des méthodes suivantes :
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.
consttracer=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']):
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)=>{// traitement du résultat
})
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.
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.
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.
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.
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.