Configurando Database Monitoring para SQL Server en Amazon RDS
Database Monitoring proporciona una visibilidad profunda de sus bases de datos de Microsoft SQL Server al exponer métricas de consultas, muestras de consultas, planes de explicación, estados de bases de datos, conmutaciones por error y eventos.
Realice los siguientes pasos para habilitar Database Monitoring con su base de datos:
- Configure la integración de AWS
- Otorgue acceso al Agente
- Instale el Agente
- Instale la integración de RDS
Antes de comenzar
- Versiones de SQL Server soportadas
- 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.
- RDS Custom
- Datadog supports DBM for some RDS Custom configurations that make OS-level changes. This support depends on the customizations stable compatibility with DBM.
Habilite Standard Collection en la sección Resource Collection de su tile de integración de Amazon Web Services.
Otorgue acceso al Agente
El Agente de Datadog requiere acceso de solo lectura al servidor de base de datos para recopilar estadísticas y consultas.
Cree un inicio de sesión de solo lectura para conectarse a su servidor y otorgue los permisos requeridos:
USE [master];
CREATE LOGIN datadog WITH PASSWORD = '<PASSWORD>';
GO
--Set context to msdb database and create datadog user
USE [msdb];
CREATE USER datadog FOR LOGIN datadog;
-- If not using either of Log Shipping Monitoring (available in Agent v7.50+), comment out the next line:
GRANT SELECT ON dbo.log_shipping_monitor_primary to datadog;
GRANT SELECT ON dbo.log_shipping_monitor_secondary to datadog;
-- If not using SQL Server Agent Monitoring (available in Agent v7.57+), comment out the next three lines:
GRANT SELECT ON dbo.sysjobs to datadog;
GRANT SELECT ON dbo.sysjobhistory TO datadog;
GRANT SELECT ON dbo.sysjobactivity to datadog;
GO
--Switch back to master and grant datadog user server permissions
USE [master];
GRANT VIEW SERVER STATE to datadog;
GRANT VIEW ANY DEFINITION to datadog;
GO
Cree el usuario datadog en cada base de datos de aplicación adicional:
USE [database_name];
CREATE USER datadog FOR LOGIN datadog;
Esto es necesario porque RDS no permite otorgar CONNECT ANY DATABASE. El Agente de Datadog necesita conectarse a cada base de datos para recopilar estadísticas de I/O de archivos específicas de la base de datos.
Almacene su contraseña de manera 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.
Instale el Agente
Debido a que AWS no otorga acceso directo al host, el Agente de Datadog debe instalarse en un host separado donde pueda comunicarse con el host de SQL Server. Hay varias opciones para instalar y ejecutar el Agente.
Note: For AlwaysOn users with cloud-hosted instances, the recommended approach is to install the Agent on a remote instance and connect to each individual replica. Telemetry for the relevant availability groups will be collected from each replica the agent is connected to. As a fallback method, the Agent can be installed on a separate server and connected to the cluster through the listener endpoint.
Para comenzar a recopilar telemetría de SQL Server, instale el Agente de Datadog, luego cree el archivo de configuración del Agente de SQL Server en C:\ProgramData\Datadog\conf.d\sqlserver.d\conf.yaml. Consulte el archivo de configuración de muestra para todas las opciones de configuración disponibles.
init_config:
instances:
- dbm: true
host: '<HOSTNAME>,<PORT>'
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: adodbapi
adoprovider: MSOLEDBSQL
tags: # Optional
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# After adding your instance endpoint, configure the Datadog AWS integration to pull additional cloud data such as CPU, Memory, etc.
aws:
instance_endpoint: '<INSTANCE_ENDPOINT>'
Para usar Autenticación de Windows, configure connection_string: "Trusted_Connection=yes" y omita los campos username y password.
Utilice las etiquetas service y env para vincular su telemetría de base de datos a otra telemetría a través de un esquema de etiquetado común. Consulte Etiquetado de Servicio Unificado para obtener detalles sobre cómo se utilizan estas etiquetas en Datadog.
Controladores compatibles
Microsoft ADO
El proveedor ADO recomendado es Microsoft OLE DB Driver. Asegúrese de que el controlador esté instalado en el host donde se está ejecutando el Agente.
connector: adodbapi
adoprovider: MSOLEDBSQL19 # Replace with MSOLEDBSQL for versions 18 and lower
Los otros dos proveedores, SQLOLEDB y SQLNCLI, son considerados obsoletos por Microsoft y no deben ser utilizados.
ODBC
El controlador ODBC recomendado es Microsoft ODBC Driver. A partir de la versión 7.51 del Agente, el ODBC Driver 18 para SQL Server se incluye por defecto en el Agente de Linux. Para Windows, asegúrese de que el controlador esté instalado en el host donde se está ejecutando el Agente.
connector: odbc
driver: 'ODBC Driver 18 for SQL Server'
Una vez que toda la configuración del Agente esté completa, reinicie el Agente de Datadog.
Validar
Ejecute el subcomando de estado del Agente y busque sqlserver en la sección Checks. Navegue a la página de Bases de datos en Datadog para comenzar.
Note: For AlwaysOn users with cloud-hosted instances, the recommended approach is to install the Agent on a remote instance and connect to each individual replica. Telemetry for the relevant availability groups will be collected from each replica the agent is connected to. As a fallback method, the Agent can be installed on a separate server and connected to the cluster through the listener endpoint.
Para comenzar a recopilar telemetría de SQL Server, primero instale el Agente de Datadog.
En Linux, también debe instalar un controlador ODBC para SQL Server, como el Microsoft ODBC driver. Después de la instalación, copie los archivos odbc.ini y odbcinst.ini en la carpeta /opt/datadog-agent/embedded/etc.
Utilice el conector odbc y especifique el controlador adecuado como se indica en el archivo odbcinst.ini.
Cree el archivo de configuración del Agente de SQL Server /etc/datadog-agent/conf.d/sqlserver.d/conf.yaml. Consulte el archivo de configuración de muestra para todas las opciones de configuración disponibles.
init_config:
instances:
- dbm: true
host: '<HOSTNAME>,<PORT>'
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: odbc
driver: '<Driver from the `odbcinst.ini` file>'
tags: # Optional
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# After adding your instance endpoint, configure the Datadog AWS integration to pull additional cloud data such as CPU, Memory, etc.
aws:
instance_endpoint: '<INSTANCE_ENDPOINT>'
Utilice las etiquetas service y env para vincular la telemetría de su base de datos a otra telemetría a través de un esquema de etiquetado común. Consulte Etiquetado de Servicio Unificado para obtener detalles sobre cómo se utilizan estas etiquetas en Datadog.
Una vez que toda la configuración del Agente esté completa, reinicia el Agente de Datadog.
Valida
Ejecuta el subcomando de estado del Agente y busca sqlserver en la sección Checks. Navegue a la página de Bases de datos en Datadog para comenzar.
Note: For AlwaysOn users with cloud-hosted instances, the recommended approach is to install the Agent on a remote instance and connect to each individual replica. Telemetry for the relevant availability groups will be collected from each replica the agent is connected to. As a fallback method, the Agent can be installed on a separate server and connected to the cluster through the listener endpoint.
Para configurar el Agente de Monitoreo de Bases de Datos que se ejecuta en un contenedor Docker, establece las Plantillas de Integración de Autodescubrimiento como etiquetas Docker en tu contenedor de Agente.
Nota: El Agente debe tener permiso de lectura en el socket de Docker para que Autodiscovery de etiquetas funcione.
Reemplaza los valores para que coincidan con tu cuenta y entorno. Consulta el archivo de configuración de muestra para todas las opciones de configuración disponibles.
export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=<AGENT_VERSION>
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>",
"connector": "odbc",
"driver": "ODBC Driver 18 for SQL Server",
"username": "datadog",
"password": "<PASSWORD>",
"tags": [
"service:<CUSTOM_SERVICE>"
"env:<CUSTOM_ENV>"
],
"aws": {
"instance_endpoint": "<INSTANCE_ENDPOINT>"
}
}]' \
registry.datadoghq.com/agent:${DD_AGENT_VERSION}
Utiliza las etiquetas service y env para vincular la telemetría de tu base de datos a otra telemetría a través de un esquema de etiquetado común. Consulta Etiquetado de Servicio Unificado sobre cómo se utilizan estas etiquetas en Datadog.
Valida
Ejecuta el subcomando de estado del Agente y busca sqlserver en la sección Checks. Alternativamente, navega a la página de Bases de Datos en Datadog para comenzar.
Note: For AlwaysOn users with cloud-hosted instances, the recommended approach is to install the Agent on a remote instance and connect to each individual replica. Telemetry for the relevant availability groups will be collected from each replica the agent is connected to. As a fallback method, the Agent can be installed on a separate server and connected to the cluster through the listener endpoint.
Si estás ejecutando un clúster de Kubernetes, utiliza el Datadog Cluster Agent para habilitar Database Monitoring. Si las verificaciones del clúster no están habilitadas, sigue estas instrucciones para habilitarlas antes de continuar.
Operador
Sigue los pasos a continuación para configurar la integración de SQL Server, utilizando las instrucciones del Operador en Kubernetes e Integraciones como referencia.
Crea o actualiza el archivo datadog-agent.yaml con la siguiente configuración:
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
global:
clusterName: <CLUSTER_NAME>
site: <DD_SITE>
credentials:
apiSecret:
secretName: datadog-agent-secret
keyName: api-key
features:
clusterChecks:
enabled: true
override:
nodeAgent:
image:
name: agent
tag: <AGENT_VERSION>
clusterAgent:
extraConfd:
configDataMap:
sqlserver.yaml: |-
cluster_check: true # Required for cluster checks
init_config:
instances:
- host: <HOSTNAME>,<PORT>
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: 'odbc'
driver: 'ODBC Driver 18 for SQL Server'
dbm: true
# Optional: For additional tags
tags:
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# After adding your instance endpoint, configure the Datadog AWS integration to pull additional cloud data such as CPU, Memory, etc.
aws:
instance_endpoint: <INSTANCE_ENDPOINT>
Aplica los cambios al Operador de Datadog utilizando el siguiente comando:
kubectl apply -f datadog-agent.yaml
Helm
Completa los siguientes pasos para instalar el Agente de Clúster de Datadog en tu clúster de Kubernetes. Reemplaza los valores para que coincidan con tu cuenta y entorno.
Completa las instrucciones de instalación del Agente de Datadog para Helm.
Actualiza tu archivo de configuración YAML (datadog-values.yaml en las instrucciones de instalación del Agente de Clúster) para incluir lo siguiente:
clusterAgent:
confd:
sqlserver.yaml: |-
cluster_check: true # Required for cluster checks
init_config:
instances:
- dbm: true
host: <HOSTNAME>,<PORT>
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: 'odbc'
driver: 'ODBC Driver 18 for SQL Server'
# Optional: For additional tags
tags:
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# After adding your instance endpoint, configure the Datadog AWS integration to pull additional cloud data such as CPU, Memory, etc.
aws:
instance_endpoint: <INSTANCE_ENDPOINT>
clusterChecksRunner:
enabled: true
Despliega el Agente 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 helm install comando.
Para configurar una verificación de clúster con un archivo de configuración montado, monta el archivo de configuración en el contenedor del Agente de Clúster en la ruta: /conf.d/sqlserver.yaml:
cluster_check: true # Required for cluster checks
init_config:
instances:
- dbm: true
host: <HOSTNAME>,<PORT>
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: 'odbc'
driver: 'ODBC Driver 18 for SQL Server'
# Optional: For additional tags
tags:
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# After adding your instance endpoint, configure the Datadog AWS integration to pull additional cloud data such as CPU, Memory, etc.
aws:
instance_endpoint: <INSTANCE_ENDPOINT>
En lugar de montar un archivo, puedes declarar la configuración de la instancia como un Servicio de Kubernetes. Para configurar esta verificación para un Agente que se ejecute en Kubernetes, crea un servicio utilizando la siguiente sintaxis:
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>",
"username": "datadog",
"password": "ENC[datadog_user_database_password]",
"connector": "odbc",
"driver": "ODBC Driver 18 for SQL Server",
"tags": ["service:<CUSTOM_SERVICE>", "env:<CUSTOM_ENV>"],
"aws": {
"instance_endpoint": "<INSTANCE_ENDPOINT>"
}
}
]
spec:
ports:
- port: 1433
protocol: TCP
targetPort: 1433
name: sqlserver
Consulta la especificación de integración de SQL Server para obtener información adicional sobre la configuración de los campos deployment_type y name.
El Cluster Agent registra automáticamente esta configuración y comienza a ejecutar la verificación de SQL Server.
Para evitar exponer la contraseña del usuario datadog en texto plano, utilice el paquete de gestión de secretos del Agent y declare la contraseña utilizando la sintaxis ENC[].
Ejemplos de Configuraciones de Agent
Connecting with DSN using the ODBC driver on Linux
Locate the odbc.ini and odbcinst.ini files. By default, these are placed in the /etc directory when installing ODBC.
Copy the odbc.ini and odbcinst.ini files into the /opt/datadog-agent/embedded/etc folder.
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
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
Restart the Agent.
Using AlwaysOn
For AlwaysOn users, the Agent should be installed on each replica server and connected directly to each replica. The full set of AlwaysOn telemetry is collected from each individual replica, in addition to host-based telemetry (CPU, disk, memory, and so on) for each server.
instances:
- dbm: true
host: 'shopist-prod,1433'
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: adodbapi
adoprovider: MSOLEDBSQL
database_metrics:
# If Availability Groups is enabled
ao_metrics:
enabled: true
# If Failover Clustering is enabled
fci_metrics:
enabled: true
Monitoring SQL Server Agent Jobs
To enable monitoring of SQL Server Agent jobs, the Datadog Agent must have access to the [msdb] database.
SQL Server Agent Jobs monitoring is not available for Azure SQL 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
Datadog Agent v7.56+ and SQL Server 2017 or higher are required for SQL Server schema collection.
To enable this feature, use the collect_schemas option. Schemas are collected on databases for which the Agent has CONNECT access.
To collect schema information from RDS instances, you must grant the
datadog user explicit
CONNECT access to each database on the instance. For more information, see
Grant the Agent access.
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: true
collect_schemas:
enabled: true
database_metrics:
# Optional: enable metric collection for indexes
index_usage_metrics:
enabled: 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
collect_schemas:
enabled: true
database_metrics:
# Optional: enable metric collection for indexes
index_usage_metrics:
enabled: true
Note: For Agent v7.68 and below, use schemas_collection instead of collect_schemas.
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.
Datadog recommends using one Agent to monitor no more than 30 database instances.
Benchmarks show that one Agent running on a t4g.medium EC2 instance (2 CPUs and 4GB of RAM) can successfully monitor 30 RDS db.t3.medium instances (2 CPUs and 4GB of RAM).
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
Instale la integración de RDS
Para recopilar métricas y registros de base de datos más completos de AWS, instale la integración de RDS.
Lectura adicional
Más enlaces, artículos y documentación útiles: