Configuration de Database Monitoring pour Azure SQL Server

La solution Database Monitoring vous permet de bénéficier d’une visibilité complète sur vos bases de données Microsoft SQL Server, en exposant des métriques de requête, des échantillons de requête, des plans d’exécution, ainsi que des états, des failovers et des événements de base de données.

Pour activer la solution Database Monitoring pour votre base de données, suivez les étapes ci-dessous :

  1. Autoriser l’Agent à accéder à la base de données
  2. Installer l’Agent
  3. Installer l’intégration Azure

Avant de commencer

Versions de SQL Server prises en charge : 2014, 2016, 2017, 2019, 2022

Supported Agent versions
7.41.0+
Performance impact
The default Agent configuration for Database Monitoring is conservative, but you can adjust settings such as the collection interval and query sampling rate to better suit your needs. For most workloads, the Agent represents less than one percent of query execution time on the database and less than one percent of CPU.

Database Monitoring runs as an integration on top of the base Agent (see benchmarks).
Proxies, load balancers, and connection poolers
The Datadog Agent must connect directly to the host being monitored. The Agent should not connect to the database through a proxy, load balancer, or connection pooler. If the Agent connects to different hosts while it is running (as in the case of failover, load balancing, and so on), the Agent calculates the difference in statistics between two hosts, producing inaccurate metrics.
Data security considerations
Read about how Database Management handles sensitive information for information about what data the Agent collects from your databases and how to ensure it is secure.

Accorder un accès à l’Agent

L’Agent Datadog requiert un accès en lecture seule au serveur de la base de données, afin de pouvoir recueillir les statistiques et requêtes.

Créez une connexion en lecture seule pour vous connecter au serveur et attribuer les rôles Azure SQL requis :

CREATE LOGIN datadog WITH PASSWORD = '<MOT_DE_PASSE>';
CREATE USER datadog FOR LOGIN datadog;
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER datadog;
ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER datadog;
-- Pour utiliser la fonctionnalité de surveillance de l'envoi de logs (disponible à partir de la version 7.50 de l'Agent), supprimez la mise en commentaire des trois lignes suivantes :
-- USE msdb;
-- CREATE USER datadog FOR LOGIN datadog;
-- GRANT SELECT to datadog;

Autorisez l’Agent à accéder à chaque base de données Azure SQL sur ce serveur :

CREATE USER datadog FOR LOGIN datadog;

Remarque : l’authentification via les identités gérées par Microsoft Entra ID est également prise en charge. Veuillez consulter ce guide pour découvrir comment configurer ce type d’authentification pour votre instance Azure SQL DB.

Lors de la configuration de l’Agent Datadog, spécifiez une instance de check pour chaque base de données d’application située sur un serveur Azure SQL DB donné. N’incluez pas la base de données master ni les autres bases de données système. L’Agent Datadog doit se connecter directement à chaque base de données d’application dans Azure SQL DB, car chaque base de données s’exécute dans un environnement de calcul distinct. De même, l’option database_autodiscovery ne fonctionne par pour Azure SQL DB : elle doit donc être désactivée.

Remarque : Azure SQL Database déploie une base de données au sein d’un réseau isolé ; chaque base de données est gérée en tant que host unique. Ainsi, si vous exécutez Azure SQL Database dans un pool élastique, chaque base de données dans le pool est considérée comme un host distinct.

init_config:
instances:
  - host: '<NOM_SERVEUR>.database.windows.net,1433'
    database: '<BASE_DE_DONNÉES_1>'
    username: datadog
    password: '<MOT_DE_PASSE>'
    # Une fois le projet et l'instance ajoutés, configurez l'intégration Datadog/Azure afin de récupérer des données cloud supplémentaires, notamment sur le CPU, la mémoire, etc.
    azure:
      deployment_type: 'sql_database'
      fully_qualified_domain_name: '<NOM_SERVEUR>.database.windows.net'

  - host: '<NOM_SERVEUR>.database.windows.net,1433'
    database: '<BASE_DE_DONNÉES_2>'
    username: datadog
    password: '<MOT_DE_PASSE>'
    # Une fois le projet et l'instance ajoutés, configurez l'intégration Datadog/Azure afin de récupérer des données cloud supplémentaires, notamment sur le CPU, la mémoire, etc.
    azure:
      deployment_type: 'sql_database'
      fully_qualified_domain_name: '<NOM_SERVEUR>.database.windows.net'

Consultez la rubrique Installer l’Agent pour obtenir des instructions détaillées décrivant comment installer et configurer l’Agent Datadog.

Créez une connexion en lecture seule pour vous connecter au serveur et attribuez les autorisations requises :

Pour la version 2014 et les versions ultérieures de SQL Server

CREATE LOGIN datadog WITH PASSWORD = '<MOT_DE_PASSE>';
CREATE USER datadog FOR LOGIN datadog;
GRANT CONNECT ANY DATABASE to datadog;
GRANT VIEW SERVER STATE to datadog;
GRANT VIEW ANY DEFINITION to datadog;
-- Pour utiliser la fonctionnalité de surveillance de l'envoi de logs (disponible à partir de la version 7.50 de l'Agent), supprimez la mise en commentaire des trois lignes suivantes :
-- USE msdb;
-- CREATE USER datadog FOR LOGIN datadog;
-- GRANT SELECT to datadog;

Remarque : l’authentification via les identités gérées par Azure est également prise en charge. Veuillez consulter [ce guide][1] pour découvrir comment configurer ce type d’authentification pour votre instance Azure SQL DB.

Pour SQL Server sur une VM Azure WIndows, consultez la section Configuration de Database Monitoring pour SQL Server auto-hébergé afin d’installer l’Agent Datadog directement sur la VM du host Windows Server.

Installer l’Agent

Puisqu’Azure n’accorde pas un accès direct au host, l’Agent Datadog doit être installé sur un host distinct, à partir duquel il peut communiquer avec le host du SQL Server. Il existe plusieurs manières d’installer et d’exécuter l’Agent.

Pour commencer à recueillir des données de télémétrie pour SQL Server, commencez par installer l’Agent Datadog.

Créez le fichier conf de l’Agent pour SQL Server : C:\ProgramData\Datadog\conf.d\sqlserver.d\conf.yaml. Consultez l’exemple de fichier conf pour découvrir toutes les options de configuration disponibles.

init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<PORT_SQL>'
    username: datadog
    password: '<MOT_DE_PASSE>'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    tags:  # Facultatif
      - 'service:<SERVICE_PERSONNALISÉ>'
      - 'env:<ENVIRONNEMENT_PERSONNALISÉ>'
    # Une fois le projet et l'instance ajoutés, configurez l'intégration Datadog/Azure afin de récupérer des données cloud supplémentaires, notamment sur le CPU, la mémoire, etc.
    azure:
      deployment_type: '<TYPE_DÉPLOIEMENT>'
      fully_qualified_domain_name: '<ENDPOINT_INSTANCE_AZURE>'

Consultez les spécifications de l’intégration SQL Server pour en savoir plus sur la définition des champs deployment_type et name.

Pour utiliser l’authentification Windows, définissez connection_string: "Trusted_Connection=yes" et ne remplissez pas les champs username et password.

Utilisez les tags service et env pour lier la télémétrie de votre base de données à d’autres données de télémétrie, par l’intermédiaire d’un schéma de tagging commun. Consultez la section Tagging de service unifié pour découvrir comment ces tags sont exploités dans l’ensemble de la plateforme Datadog.

Pilotes compatibles

Microsoft ADO

Il est recommandé d’utiliser le fournisseur d’ADO Microsoft OLE DB Driver. Vérifiez que le pilote est installé sur le host sur lequel l’Agent s’exécute.

connector: adodbapi
adoprovider: MSOLEDBSQL19  # Remplacer cette valeur par MSOLEDBSQL pour la version 18 et les versions antérieures

Les deux autres fournisseurs, SQLOLEDB et SQLNCLI, sont considérés comme obsolètes par Microsoft. Ne les utilisez pas.

ODBC

Pour ODBC, il est recommandé d’utiliser le pilote Microsoft ODBC Driver. Depuis la version 7.51 de l’Agent, ODBC Driver 18 pour SQL Server est inclus dans l’Agent pour Linux. Pour Windows, vérifiez que le pilote est installé sur le host sur lequel l’Agent s’exécute.

connector: odbc
driver: '{ODBC Driver 18 for SQL Server}'

Une fois la configuration de l’Agent terminée, redémarrez l’Agent Datadog.

Validation

Lancez la sous-commande status de l’Agent et cherchez sqlserver dans la section Checks. Accédez à la page Databases dans Datadog pour commencer le processus de validation.

Pour commencer la collecte des données de télémétrie SQL Server, commencez par installer l’Agent Datadog.

Sous Linux, l’Agent Datadog requiert l’installation d’un pilote ODBC SQL Server, par exemple le pilote Microsoft ODBC. Une fois ce pilote installé, copiez les fichiers odbc.ini et odbcinst.ini dans le dossier /opt/datadog-agent/embedded/etc.

Utilisez le connecteur odbc et spécifiez le bon pilote, tel qu’indiqué dans le fichier odbcinst.ini.

Créez le fichier conf de l’Agent SQL Server /etc/datadog-agent/conf.d/sqlserver.d/conf.yaml. Consultez l’exemple de fichier conf pour découvrir toutes les options de configuration disponibles.

init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<PORT_SQL>'
    username: datadog
    password: '<MOT_DE_PASSE>'
    connector: odbc
    driver: '<Pilote indiqué dans le fichier `odbcinst.ini`>'
    tags:  # Facultatif
      - 'service:<SERVICE_PERSONNALISÉ>'
      - 'env:<ENVIRONNEMENT_PERSONNALISÉ>'
    # Une fois le projet et l'instance ajoutés, configurez l'intégration Datadog/Azure afin de récupérer des données cloud supplémentaires, notamment sur le CPU, la mémoire, etc.
    azure:
      deployment_type: '<TYPE_DÉPLOIEMENT>'
      fully_qualified_domain_name: '<ADRESSE_ENDPOINT_AZURE>'

Consultez les spécifications de l’intégration SQL Server pour en savoir plus sur la définition des champs deployment_type et name.

Utilisez les tags service et env pour lier la télémétrie de votre base de données à d’autres données de télémétrie, par l’intermédiaire d’un schéma de tagging commun. Consultez la section Tagging de service unifié pour découvrir comment ces tags sont exploités dans l’ensemble de la plateforme Datadog.

Une fois la configuration de l’Agent terminée, redémarrez l’Agent Datadog.

Validation

Lancez la sous-commande status de l’Agent et cherchez sqlserver dans la section Checks. Accédez à la page Databases dans Datadog pour commencer le processus de validation.

Pour configurer l’Agent Database Monitoring qui s’exécute dans un conteneur Docker, définissez des modèles d’intégration Autodiscovery en tant qu’étiquettes Docker sur le conteneur de votre Agent.

Remarque : pour que le processus de découverte automatique des étiquettes fonctionne, l’Agent doit être autorisé à lire le socket Docker.

Remplacez les valeurs afin qu’elles correspondent à votre compte et votre environnement. Consultez l’exemple de fichier conf pour découvrir toutes les options de configuration disponibles.

export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=7.51.0

docker run -e "DD_API_KEY=${DD_API_KEY}" \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -l com.datadoghq.ad.check_names='["sqlserver"]' \
  -l com.datadoghq.ad.init_configs='[{}]' \
  -l com.datadoghq.ad.instances='[{
    "dbm": true,
    "host": "<HOSTNAME>,<PORT_SQL>",
    "connector": "odbc",
    "driver": "ODBC Driver 18 for SQL Server",
    "username": "datadog",
    "password": "<MOT_DE_PASSE>",
    "tags": [
      "service:<SERVICE_PERSONNALISÉ>"
      "env:<ENVIRONNEMENT_PERSONNALISÉ>"
    ],
    "azure": {
      "deployment_type": "<TYPE_DÉPLOIEMENT>",
      "name": "<ADRESSE_ENDPOINT_AZURE>"
    }
  }]' \
  gcr.io/datadoghq/agent:${DD_AGENT_VERSION}

Consultez les spécifications de l’intégration SQL Server pour en savoir plus sur la définition des champs deployment_type et name.

Utilisez les tags service et env pour lier la télémétrie de votre base de données à d’autres données de télémétrie, par l’intermédiaire d’un schéma de tagging commun. Consultez la section Tagging de service unifié pour découvrir comment ces tags sont exploités dans l’ensemble de la plateforme Datadog.

Validation

Lancez la sous-commande status de l’Agent et cherchez sqlserver dans la section Checks. Sinon, accédez à la page Databases dans Datadog pour commencer le processus de validation.

Si vous disposez d’un cluster Kubernetes, utilisez l’Agent de cluster Datadog pour Database Monitoring.

Si les checks de cluster ne sont pas encore activés dans votre cluster Kubernetes, suivez les instructions afin de les activer. Vous pouvez configurer l’Agent de cluster, que ce soit avec des fichiers statiques montés dans le conteneur de l’Agent de cluster, ou avec des annotations de service Kubernetes :

Ligne de commande avec Helm

Exécutez la commande Helm suivante pour installer l’Agent de cluster Datadog sur votre cluster Kubernetes. Modifiez les valeurs de façon à indiquer votre compte et votre environnement :

helm repo add datadog https://helm.datadoghq.com
helm repo update

helm install <NOM_VERSION> \
  --set 'datadog.apiKey=<CLÉ_API_DATADOG>' \
  --set 'clusterAgent.enabled=true' \
  --set 'clusterChecksRunner.enabled=true' \
  --set "clusterAgent.confd.sqlserver\.yaml=cluster_check: true
init_config:
instances:
  - dbm: true
    host: <HOSTNAME>\,1433
    username: datadog
    password: '<MOT_DE_PASSE>'
    connector: 'odbc'
    driver: 'ODBC Driver 18 for SQL Server'
    include_ao_metrics: true  # Facultatif : pour les utilisateurs AlwaysOn 
    tags:  # Facultatif
      - 'service:<SERVICE_PERSONNALISÉ>'
      - 'env:<ENVIRONNEMENT_PERSONNALISÉ>'
    azure:
      deployment_type: '<TYPE_DÉPLOIEMENT>'
      fully_qualified_domain_name: '<ADRESSE_ENDPOINT_AZURE>'" \
  datadog/datadog

Configuration avec des fichiers montés

Pour configurer un check de cluster avec un fichier de configuration monté, montez le fichier de configuration dans le conteneur de l’Agent de cluster à l’emplacement suivant : /conf.d/sqlserver.yaml.

cluster_check: true  # Bien inclure ce flag
init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<PORT_SQL>'
    username: datadog
    password: '<MOT_DE_PASSE>'
    connector: "odbc"
    driver: "ODBC Driver 18 for SQL Server"
    tags:  # Facultatif
      - 'service:<SERVICE_PERSONNALISÉ>'
      - 'env:<ENVIRONNEMENT_PERSONNALISÉ>'
    # Une fois le projet et l'instance ajoutés, configurez l'intégration Datadog/Azure afin de récupérer des données cloud supplémentaires, notamment sur le CPU, la mémoire, etc.
    azure:
      deployment_type: '<TYPE_DÉPLOIEMENT>'
      fully_qualified_domain_name: '<ADRESSE_ENDPOINT_AZURE>'

Configuration avec les annotations de service Kubernetes

Au lieu de monter un fichier, vous pouvez déclarer la configuration d’instance en tant que service Kubernetes. Pour configurer ce check pour un Agent s’exécutant sur Kubernetes, créez un service dans le même espace de nommage que l’Agent de cluster Datadog :

apiVersion: v1
kind: Service
metadata:
  name: sqlserver-datadog-check-instances
  annotations:
    ad.datadoghq.com/service.check_names: '["sqlserver"]'
    ad.datadoghq.com/service.init_configs: '[{}]'
    ad.datadoghq.com/service.instances: |
      [
        {
          "dbm": true,
          "host": "<HOSTNAME>,<PORT_SQL>",
          "username": "datadog",
          "password": "<MOT_DE_PASSE>",
          "connector": "odbc",
          "driver": "ODBC Driver 18 for SQL Server",
          "tags": ["service:<SERVICE_PERSONNALISÉ>", "env:<ENVIRONNEMENT_PERSONNALISÉ>"],  # Facultatif
          "azure": {
            "deployment_type": "<TYPE_DÉPLOIEMENT>",
            "fully_qualified_domain_name": "<ADRESSE_ENDPOINT_AZURE>"
          }
        }
      ]      
spec:
  ports:
  - port: 1433
    protocol: TCP
    targetPort: 1433
    name: sqlserver

Consultez les spécifications de l’intégration SQL Server pour en savoir plus sur la définition des champs deployment_type et name.

L’Agent de cluster enregistre automatiquement cette configuration et commence à exécuter le check SQL Server.

Pour éviter d’exposer le mot de passe de l’utilisateur datadog en clair, utilisez le package de gestion des secrets de l’Agent et déclarez le mot de passe à l’aide de la syntaxe ENC[].

Exemples de configuration de l’Agent

Connecting with DSN using the ODBC driver on Linux

  1. Locate the odbc.ini and odbcinst.ini files. By default, these are placed in the /etc directory when installing ODBC.

  2. Copy the odbc.ini and odbcinst.ini files into the /opt/datadog-agent/embedded/etc folder.

  3. Configure your DSN settings as follows:

    odbcinst.ini must provide at least one section header and ODBC driver location.

    Example:

    [ODBC Driver 18 for SQL Server]
    Description=Microsoft ODBC Driver 18 for SQL Server
    Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1
    UsageCount=1
    

    odbc.ini must provide a section header and a Driver path that matches odbcinst.ini.

    Example:

    [datadog]
    Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1
    
  4. Update the /etc/datadog-agent/conf.d/sqlserver.d/conf.yaml file with your DSN information.

    Example:

    instances:
      - dbm: true
        host: 'localhost,1433'
        username: datadog
        password: 'ENC[datadog_user_database_password]'
        connector: 'odbc'
        driver: '{ODBC Driver 18 for SQL Server}' # This is the section header of odbcinst.ini
        dsn: 'datadog' # This is the section header of odbc.ini
    
  5. Restart the Agent.

Using AlwaysOn

Note: For AlwaysOn users, the Agent must be installed on a separate server and connected to the cluster through the listener endpoint. This is because information about Availability Group (AG) secondary replicas is collected from the primary replica. Additionally, installing the Agent in this way helps to keep it up and running in the event of a failover.

instances:
  - dbm: true
    host: 'shopist-prod,1433'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    include_ao_metrics: true  # If Availability Groups is enabled
    include_fci_metrics: true   # If Failover Clustering is enabled

Monitoring SQL Server Agent Jobs

Note: For monitoring SQL Server Agent jobs, the Datadog Agent must have access to the [msdb] database. Monitoring of SQL Server Agent jobs is supported on SQL Server versions 2016 and newer. Starting from Agent v7.57, the Datadog Agent can collect SQL Server Agent job metrics and histories. To enable this feature, set enabled to true in the agent_jobs section of the SQL Server integration configuration file. The collection_interval and history_row_limit fields are optional.

instances:
  - dbm: true
    host: 'shopist-prod,1433'
    username: datadog
    password: '<PASSWORD>'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    agent_jobs:
      enabled: true
      collection_interval: 15
      history_row_limit: 10000

Collecting schemas

Starting from Agent v7.56, the Datadog Agent can collect schema information from SQLServer databases. To enable this feature, use the schemas_collection option. Schemas are collected on databases for which the Agent has CONNECT access.

Note: For schema collection on RDS instances, it is necessary to grant explicit CONNECT access to the datadog user for each database on the instance. See Grant the Agent access for more details.

Use the database_autodiscovery option to avoid specifying each logical database. See the sample sqlserver.d/conf.yaml for more details.

init_config:
instances:
 # This instance detects every logical database automatically
  - dbm: true
        host: 'shopist-prod,1433'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    database_autodiscovery:
      enabled: true
    schemas_collection:
      enabled: true
    # Optional: enable metric collection for indexes
    include_index_usage_metrics: true
# This instance only collects schemas and index metrics from the `users` database
  - dbm: true
        host: 'shopist-prod,1433'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    database: users
    schemas_collection:
      enabled: true
    include_index_usage_metrics: true

One Agent connecting to multiple hosts

It is common to configure a single Agent host to connect to multiple remote database instances (see Agent installation architectures for DBM). To connect to multiple hosts, create an entry for each host in the SQL Server integration config. In these cases, Datadog recommends limiting the number of instances per Agent to a maximum of 10 database instances to guarantee reliable performance.

init_config:
instances:
  - dbm: true
    host: 'example-service-primary.example-host.com,1433'
    username: datadog
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: 'example-service–replica-1.example-host.com,1433'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: 'example-service–replica-2.example-host.com,1433'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
    [...]

Running custom queries

To collect custom metrics, use the custom_queries option. See the sample sqlserver.d/conf.yaml for more details.

init_config:
instances:
  - dbm: true
    host: 'localhost,1433'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    custom_queries:
    - query: SELECT age, salary, hours_worked, name FROM hr.employees;
      columns:
        - name: custom.employee_age
          type: gauge
        - name: custom.employee_salary
           type: gauge
        - name: custom.employee_hours
           type: count
        - name: name
           type: tag
      tags:
        - 'table:employees'

Working with hosts through a remote proxy

If the Agent must connect to a database host through a remote proxy, all telemetry is tagged with the hostname of the proxy rather than the database instance. Use the reported_hostname option to set a custom override of the hostname detected by the Agent.

init_config:
instances:
  - dbm: true
    host: 'localhost,1433'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: products-primary
  - dbm: true
    host: 'localhost,1433'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: products-replica-1

Discovering ports automatically

SQL Server Browser Service, Named Instances, and other services can automatically detect port numbers. You can use this instead of hardcoding port numbers in connection strings. To use the Agent with one of these services, set the port field to 0.

For example, a Named Instance config:

init_config:
instances:
  - host: <hostname\instance name>
    port: 0

Installer l’intégration Azure

Pour recueillir des métriques et des logs de base de données plus complets depuis Azure, installez l’intégration Azure.

Pour aller plus loin