Configuración de Database Monitoring para Azure SQL Server

Database Monitoring te proporciona una amplia visibilidad de tus bases de datos Microsoft SQL Server mediante la exposición de métricas de consultas, muestras de consultas, explain-plans, estados de bases de datos, conmutaciones por error y eventos.

Sigue los siguientes pasos para habilitar Database Monitoring con tu base de datos:

  1. Concede al Agent acceso a la base de datos.
  2. Instala y configura el Agent.
  3. Instala la integración Azure.

Antes de empezar

Versiones de SQL Server compatibles
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.

Conceder acceso al Agent

El Datadog Agent requiere acceso de sólo lectura al servidor de la base de datos para recopilar estadísticas y consultas.

Crea un inicio de sesión de sólo lectura para conectarte a tu servidor y concede los permisos necesarios: Roles Azure SQL:

CREAR INICIO DE SESIÓN datadog CON CONTRASEÑA = '<PASSWORD>';
CREAR USUARIO datadog PARA INICIO DE SESIÓN datadog;
ALTERAR ROLE DEL SERVIDOR ##MS_ServerStateReader## AÑADIR MIEMBRO datadog;
ALTERAR ROLE DEL SERVIDOR ##MS_DefinitionReader## AÑADIR MIEMBRO datadog;
-- Para utilizar la monitorización Log Shipping (disponible en el Agent v7.50 o superior), descomenta las siguientes tres líneas:
-- UTILIZAR msdb;
-- CREAR USUARIO datadog PARA INICIO DE SESIÓN datadog;
-- CONCEDER SELECCIÓN a datadog;

Concede al Agent acceso a cada Azure SQL Database adicional en este servidor:

CREATE USER datadog FOR LOGIN datadog;

Nota: También se admite la autenticación de identidad gestionada por Microsoft Entra ID. Para saber cómo configurarla en tu instancia Azure SQL DB, consulta la guía.

Al configurar el Datadog Agent, especifica una instancia de check para cada base de datos de aplicaciones ubicada en un servidor Azure SQL DB determinado. No incluyas master ni otras bases de datos del sistema. El Datadog Agent debe conectarse directamente a cada base de datos de aplicaciones en Azure SQL DB, ya que cada base de datos se ejecuta en un entorno de computación aislado. Esto también significa que database_autodiscovery no funciona para Azure SQL DB, por lo que no debe habilitarse.

Nota: Azure SQL Database despliega una base de datos en un red aislada. Cada base de datos se trata como un único host. Esto significa que si ejecutas Azure SQL Database en un pool elástico, cada base de datos del pool se trata como una host independiente.

init_config:
instances:
  - host: '<SERVER_NAME>.database.windows.net,1433'
    database: '<DATABASE_1>'
    username: datadog
    password: '<PASSWORD>'
    # Después de añadir tu proyecto y tu instancia, configura la integración Datadog Azure para extraer datos de nube adicionales, como CPU, memoria, etc.
    azure:
      deployment_type: 'sql_database'
      fully_qualified_domain_name: '<SERVER_NAME>.database.windows.net'

  - host: '<SERVER_NAME>.database.windows.net,1433'
    database: '<DATABASE_2>'
    username: datadog
    password: '<PASSWORD>'
    # Después de añadir tu proyecto y tu instancia, configura la integración Datadog Azure para extraer datos de nube adicionales, como CPU, memoria, etc.
    azure:
      deployment_type: 'sql_database'
      fully_qualified_domain_name: '<SERVER_NAME>.database.windows.net'

Para obtener instrucciones más detalladas sobre cómo instalar y configurar el Datadog Agent, consulta Instalar el Agent.

Crea un inicio de sesión de sólo lectura para conectarte a tu servidor y concede los permisos necesarios:

Para las versiones 2014 o posteriores de SQL Server

CREAR INICIO DE SESIÓN datadog CON CONTRASEÑA = '<PASSWORD>';
CREAR USUARIO datadog PARA INICIO DE SESIÓN datadog;
CONCEDER CONEXIÓN A CUALQUIER BASE DE DATOS a datadog;
CONCEDER VISUALIZACIÓN DEL ESTADO DEL SERVIDOR a datadog;
CONCEDER VISUALIZACIÓN DE CUALQUIER DEFINICIÓN a datadog;
-- Para utilizar la monitorización Log Shipping (disponible en el Agent v7.50 o superior), descomenta las siguientes tres líneas:
-- UTILIZAR msdb;
-- CREAR USUARIO datadog PARA INICIO DE SESIÓN datadog;
-- CONCEDER SELECCIÓN a datadog;

Nota: También se admite la autenticación de identidad gestionada por Azure. Para saber cómo configurarla en tu instancia Azure SQL DB, consulta [la guía][1].

Para SQL Server en máquinas virtuales Windows Azure, sigue la documentación Configuración de Database Monitoring para SQL Server autoalojado para instalar el Datadog Agent directamente en la máquina virtual del host Windows Server.

Guardar tu contraseña de forma segura

Store your password using secret management software such as Vault. You can then reference this password as ENC[<SECRET_NAME>] in your Agent configuration files: for example, ENC[datadog_user_database_password]. See Secrets Management for more information.

The examples on this page use datadog_user_database_password to refer to the name of the secret where your password is stored. It is possible to reference your password in plain text, but this is not recommended.

Instalación y configuración del Agent

Dado que AWS no permite el acceso directo al host, el Datadog Agent debe instalarse en un host distinto donde pueda comunicarse con el host de SQL Server. Existen varias opciones para instalar y ejecutar el Agent.

Para empezar a recopilar telemetría de SQL Server, primero instala el Datadog Agent.

Crea el archivo de configuración de SQL Server Agent C:\ProgramData\Datadog\conf.d\sqlserver.d\conf.yaml. Para ver todas las opciones de configuración disponibles, consulta el archivo de configuración de ejemplo.

init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<SQL_PORT>'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: adodbapi
    adoprovider: MSOLEDBSQL
    tags:  # Opcional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
    # Después de añadir tu proyecto y tu instancia, configura la integración Datadog Azure para extraer datos de nube adicionales, como CPU, memoria, etc.
    azure:
      deployment_type: '<DEPLOYMENT_TYPE>'
      fully_qualified_domain_name: '<AZURE_INSTANCE_ENDPOINT>'

Para obtener información adicional sobre la configuración de los campos deployment_type y name, consulta las especificaciones para la integración SQL Server.

Para utilizar la autenticación de Windows, configura connection_string: "Trusted_Connection=yes" y omite los campos username y password.

Utiliza las etiquetas (tags) service y env para vincular la telemetría de tu base de datos a otras telemetrías mediante un esquema de etiquetado común. Para saber cómo se utilizan estas etiquetas en Datadog, consulta Etiquetado unificado de servicios.

Controladores compatibles

Microsoft ADO

El proveedor ADO recomendado es el controlador de Microsoft OLE DB. Asegúrate de que el controlador está instalado en el host donde se ejecuta el Agent.

connector: adodbapi
adoprovider: MSOLEDBSQL19  # Sustituir por MSOLEDBSQL para las versiones 18 y anteriores

Los otros dos proveedores, SQLOLEDB y SQLNCLI, se consideran obsoletos por Microsoft y ya no deben ser utilizados.

ODBC

El controlador ODBC recomendado es Microsoft ODBC. A partir del Agent v7.51, el controlador ODBC 18 para SQL Server se incluye en el Agent para Linux. Para Windows, asegúrate de que el controlador está instalado en el host donde se ejecuta el Agent.

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

Una vez terminada la configuración del Agent, reinicia el Datadog Agent.

Validar

Ejecuta el subcomando de estado del Agent y busca sqlserver en la sección Checks o visita la página Bases de datos de Datadog para empezar.

Para empezar a recopilar telemetría de SQL Server, primero instala el Datadog Agent.

En Linux, el Datadog Agent requiere además la instalación de un controlador ODBC SQL Server, por ejemplo, el controlador ODBC de Microsoft. Una vez instalado el controlador ODBC SQL Server, copia los archivos odbc.ini y odbcinst.ini en la carpeta /opt/datadog-agent/embedded/etc.

Utiliza el conector odbc y especifica el controlador adecuado, como se indica en el archivo odbcinst.ini.

Crea el archivo de configuración de SQL Server Agent /etc/datadog-agent/conf.d/sqlserver.d/conf.yaml. Para ver todas las opciones de configuración disponibles, consulta el archivo de configuración de ejemplo.

init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<SQL_PORT>'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: odbc
    driver: '<Driver from the `odbcinst.ini` file>'
    tags:  # Opcional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
    # Después de añadir tu proyecto y tu instancia, configura la integración Datadog Azure para extraer datos de nube adicionales, como CPU, memoria, etc.
    azure:
      deployment_type: '<DEPLOYMENT_TYPE>'
      fully_qualified_domain_name: '<AZURE_ENDPOINT_ADDRESS>'

Para obtener información adicional sobre la configuración de los campos deployment_type y name, consulta las especificaciones para la integración SQL Server.

Utiliza las etiquetas (tags) service y env para vincular la telemetría de tu base de datos a otras telemetrías mediante un esquema de etiquetado común. Para saber cómo se utilizan estas etiquetas en Datadog, consulta Etiquetado unificado de servicios.

Una vez terminada la configuración del Agent, reinicia el Datadog Agent.

Validar

Ejecuta el subcomando de estado del Agent y busca sqlserver en la sección Checks o visita la página Bases de datos de Datadog para empezar.

Para configurar el Database Monitoring Agent que se ejecuta en un contenedor Docker, configura las plantillas de integración Autodiscovery como etiquetas (labels) de Docker en el contenedor de tu Agent.

Nota: El Agent debe tener permiso de lectura en el socket de Docker para que las etiquetas (labels) de Autodiscovery funcionen.

Sustituye los valores para que coincidan con tu cuenta y tu entorno. Para ver todas las opciones de configuración disponibles, consulta el archivo de configuración de ejemplo.

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>,<SQL_PORT>",
    "connector": "odbc",
    "driver": "ODBC Driver 18 for SQL Server",
    "username": "datadog",
    "password": "<PASSWORD>",
    "tags": [
      "service:<CUSTOM_SERVICE>"
      "env:<CUSTOM_ENV>"
    ],
    "azure": {
      "deployment_type": "<DEPLOYMENT_TYPE>",
      "name": "<AZURE_ENDPOINT_ADDRESS>"
    }
  }]' \
  gcr.io/datadoghq/agent:${DD_AGENT_VERSION}

Para obtener información adicional sobre la configuración de los campos deployment_type y name, consulta las especificaciones para la integración SQL Server.

Utiliza las etiquetas (tags) service y env para vincular la telemetría de tu base de datos a otras telemetrías mediante un esquema de etiquetado común. Para saber cómo se utilizan estas etiquetas en Datadog, consulta Etiquetado unificado de servicios.

Validar

Ejecuta el subcomando de estado del Agent y busca sqlserver en la sección Checks o visita la página Bases de datos de Datadog para empezar.

Si tienes un clúster Kubernetes, utiliza el Datadog Cluster Agent para Database Monitoring.

Si los checks de clúster no están habilitados en tu clúster de Kubernetes, sigue las instrucciones para habilitar checks de clúster. Puedes configurar el Cluster Agent ya sea con archivos estáticos montados en el contenedor de Cluster Agent o utilizando anotaciones de servicios de Kubernetes:

Helm

Realiza los siguientes pasos para instalar el Datadog Cluster Agent en tu clúster de Kubernetes. Sustituye los valores para que coincidan con tu cuenta y tu entorno.

  1. Sigue las instrucciones de instalación del Datadog Agent para Helm.

  2. Actualiza tu archivo de configuración YAML (datadog-values.yaml en las instrucciones de instalación del Cluster Agent) para incluir lo siguiente:

    clusterAgent:
      confd:
        sqlserver.yaml: -|
          cluster_check: true
          init_config:
          instances:
          - dbm: true
            host: <HOSTNAME>,1433
            username: datadog
            password: 'ENC[datadog_user_database_password]'
            connector: 'odbc'
            driver: 'ODBC Driver 18 for SQL Server'
            include_ao_metrics: true  # Optional: For AlwaysOn users
            tags:  # Optional
              - 'service:<CUSTOM_SERVICE>'
              - 'env:<CUSTOM_ENV>'
            azure:
              deployment_type: '<DEPLOYMENT_TYPE>'
              fully_qualified_domain_name: '<AZURE_ENDPOINT_ADDRESS>'      
    
    clusterChecksRunner:
      enabled: true
    
  3. Despliega el Agent con el archivo de configuración anterior desde la línea de comandos:

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    
Para Windows, añade --set targetSystem=Windows al comando helm install.

Configuración con archivos integrados

Para configurar un check de clúster con un archivo de configuración montado, monta el archivo de configuración del contenedor del Cluster Agent en la ruta: /conf.d/postgres.yaml:

cluster_check: true  # Asegúrate de incluir este indicador
init_config:
instances:
  - dbm: true
    host: '<HOSTNAME>,<SQL_PORT>'
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    connector: "odbc"
    driver: "ODBC Driver 18 for SQL Server"
    tags:  # Opcional
      - 'service:<CUSTOM_SERVICE>'
      - 'env:<CUSTOM_ENV>'
    # Después de añadir tu proyecto y tu instancia, configura la integración Datadog Azure para extraer datos de nube adicionales, como CPU, memoria, etc.
    azure:
      deployment_type: '<DEPLOYMENT_TYPE>'
      fully_qualified_domain_name: '<AZURE_ENDPOINT_ADDRESS>'

Configuración con anotaciones de servicios de Kubernetes

En lugar de integrar un archivo, puedes declarar la configuración de la instancia como servicio de Kubernetes. Para configurar este check en un Agent que se ejecuta en Kubernetes, crea un servicio en el mismo espacio de nombres que el Datadog Cluster Agent:

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>,<SQL_PORT>",
          "username": "datadog",
          "password": "ENC[datadog_user_database_password]",
          "connector": "odbc",
          "driver": "ODBC Driver 18 for SQL Server",
          "tags": ["service:<CUSTOM_SERVICE>", "env:<CUSTOM_ENV>"],  # Opcional
          "azure": {
            "deployment_type": "<DEPLOYMENT_TYPE>",
            "fully_qualified_domain_name": "<AZURE_ENDPOINT_ADDRESS>"
          }
        }
      ]      
spec:
  ports:
  - port: 1433
    protocol: TCP
    targetPort: 1433
    name: sqlserver

Para obtener información adicional sobre la configuración de los campos deployment_type y name, consulta las especificaciones para la integración SQL Server.

El Cluster Agent registra automáticamente esta configuración y comienza a ejecutar el check de SQL Server.

Para evitar exponer la contraseña del usuario datadog en texto simple, utiliza el paquete de gestión de secretos del Agent y declara la contraseña utilizando la sintaxis ENC[].

Ejemplo de configuraciones del 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

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

Instalar la integración Azure

Para recopilar métricas de base de datos y logs más completos de Azure, instala la integración Azure.

Referencias adicionales