Configuración de Database Monitoring para SQL Server gestionado por Google Cloud SQL
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:
- Concede al Agent acceso a la base de datos.
- Instala y configura el Agent.
- Instala la integración Cloud SQL.
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 usuario datadog
en la instancia de Cloud SQL.
Para mantener un acceso de sólo lectura para el Agent, elimina el usuario datadog
del CustomerDbRootRole
predeterminado. En su lugar, concede únicamente los permisos explícitos requeridos por el Agent.
GRANT VIEW SERVER STATE to datadog as CustomerDbRootRole;
GRANT VIEW ANY DEFINITION to datadog as CustomerDbRootRole;
ALTER SERVER ROLE CustomerDbRootRole DROP member datadog;
Crea el usuario datadog
en cada base de datos de aplicaciones adicional:
USE [database_name];
CREATE USER datadog FOR LOGIN datadog;
Esto es necesario porque Google Cloud SQL no permite conceder el permiso CONNECT ANY DATABASE
. El Datadog Agent necesita conectarse a cada base de datos para recopilar estadísticas de E/S de archivos específicas de la base de datos.
Instalación y configuración del Agent
Dado que Google Cloud 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: '<PASSWORD>'
connector: adodbapi
provider: MSOLEDBSQL
tags: # Opcional
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
# Después de añadir tu proyecto y tu instancia, configura la integración Datadog Google Cloud (GCP) para extraer datos de nube adicionales, como CPU, memoria, etc.
gcp:
project_id: '<PROJECT_ID>'
instance_id: '<INSTANCE_ID>'
Para obtener información adicional sobre la configuración de los campos project_id
y instance_id
, 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.
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.
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 # Sustituye 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 Google Cloud (GCP) para extraer datos de nube adicionales, como CPU, memoria, etc.
gcp:
project_id: '<PROJECT_ID>'
instance_id: '<INSTANCE_ID>'
Para obtener información adicional sobre la configuración de los campos project_id
y instance_id
, 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>",
"port": <SQL_PORT>,
"connector": "odbc",
"driver": "ODBC Driver 18 for SQL Server",
"username": "datadog",
"password": "<PASSWORD>",
"tags": [
"service:<CUSTOM_SERVICE>"
"env:<CUSTOM_ENV>"
],
"gcp": {
"project_id": "<PROJECT_ID>",
"instance_id": "<INSTANCE_ID>"
}
}]' \
gcr.io/datadoghq/agent:${DD_AGENT_VERSION}
Para obtener información adicional sobre la configuración de los campos project_id
y instance_id
, 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.
Sigue las instrucciones de instalación del Datadog Agent para Helm.
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>
port: 1433
username: datadog
password: 'ENC[datadog_user_database_password]'
connector: 'odbc'
driver: 'ODBC Driver 18 for SQL Server'
tags: # Optional
- 'service:<CUSTOM_SERVICE>'
- 'env:<CUSTOM_ENV>'
gcp:
project_id: '<PROJECT_ID>'
instance_id: '<INSTANCE_ID>'
clusterChecksRunner:
enabled: true
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>'
port: <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 Google Cloud (GCP) para extraer datos de nube adicionales, como CPU, memoria, etc.
gcp:
project_id: '<PROJECT_ID>'
instance_id: '<INSTANCE_ID>'
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>",
"port": <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
"gcp": {
"project_id": "<PROJECT_ID>",
"instance_id": "<INSTANCE_ID>"
}
}
]
spec:
ports:
- port: 1433
protocol: TCP
targetPort: 1433
name: sqlserver
Para obtener información adicional sobre la configuración de los campos project_id
y instance_id
, 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
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
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 running SQLServer 2017 or higher. 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: 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
Instalar la integración Google Cloud SQL
Para recopilar métricas de base de datos más completas de Google Cloud SQL, instala la integración Google Cloud SQL.
Referencias adicionales
Más enlaces, artículos y documentación útiles: