• /
  • EnglishEspañolFrançais日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Instalar y configurar NRDOT para el monitoreo de MSSQL con Docker

|View as Markdown (English)

Configure el monitoreo de SQL Server usando el NRDOT Collector como contenedor hermano de una instancia de SQL Server que ya se ejecuta en Docker.

Instalación guiada

Para instalar esto a través de la UI de New Relic en su lugar, vaya a one.newrelic.com > Integrations & Agents > Microsoft SQL Server (Database 360) . Siga las instrucciones en pantalla para configurar la integración. Esta página solo cubre la instalación manual.

Sugerencia

¿Busca automatizar esto a escala o ejecutarlo en Kubernetes en su lugar? Consulte la instalación de Ansible, la instalación de Chef o la instalación del chart de Helm.

Requisitos previos

  • Docker instalado en el host.
  • Un contenedor de SQL Server ya en ejecución (SQL Server 2017 o posterior), con la utilidad sqlcmd disponible en su interior. Las imágenes mssql-server de Microsoft lo incluyen en /opt/mssql-tools18/bin o /opt/mssql-tools/bin.
  • Un inicio de sesión en el rol de servidor sysadmin (o equivalente) con su contraseña.
  • Una clave de licencia de New Relic.
  • Conectividad de red desde el contenedor del recolector a los extremos OTLP de New Relic.

Cree el usuario de monitoreo y otorgue permisos

Ejecute el script de GRANT dentro del contenedor de SQL Server con docker exec. Reemplace <YOUR_MSSQL_CONTAINER_NAME>, <YOUR_ADMIN_USERNAME>, <YOUR_ADMIN_PASSWORD>, <YOUR_DB_USERNAME> y <YOUR_DB_PASSWORD> con sus propios valores. Ajuste la ruta sqlcmd (/opt/mssql-tools18/bin/sqlcmd o /opt/mssql-tools/bin/sqlcmd) para que coincida con la imagen.

bash
$
docker exec -i <YOUR_MSSQL_CONTAINER_NAME> /opt/mssql-tools18/bin/sqlcmd \
>
-S localhost -U <YOUR_ADMIN_USERNAME> -P '<YOUR_ADMIN_PASSWORD>' -C \
>
-Q "
$
USE [master];
$
GO
$
CREATE LOGIN [<YOUR_DB_USERNAME>] WITH PASSWORD = '<YOUR_DB_PASSWORD>';
$
GO
$
-- Instance-level permissions
$
GRANT VIEW SERVER STATE TO [<YOUR_DB_USERNAME>];
$
GRANT VIEW ANY DEFINITION TO [<YOUR_DB_USERNAME>];
$
GRANT VIEW ANY DATABASE TO [<YOUR_DB_USERNAME>];
$
GO
$
-- Grant read access privileges to all user databases
$
DECLARE @name SYSNAME;
$
DECLARE db_cursor CURSOR READ_ONLY FORWARD_ONLY FOR
$
SELECT [name]
$
FROM [master].[sys].[databases]
$
WHERE [name] NOT IN ('master', 'msdb', 'model', 'rdsadmin', 'distribution')
$
AND [state] = 0;
$
OPEN db_cursor;
$
FETCH NEXT FROM db_cursor INTO @name;
$
WHILE @@FETCH_STATUS = 0
$
BEGIN
$
BEGIN TRY
$
EXEC('USE [' + @name + '];
$
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''<YOUR_DB_USERNAME>'')
$
BEGIN
$
CREATE USER [<YOUR_DB_USERNAME>] FOR LOGIN [<YOUR_DB_USERNAME>];
$
END;
$
GRANT VIEW DATABASE STATE TO [<YOUR_DB_USERNAME>];');
$
END TRY
$
BEGIN CATCH
$
PRINT 'Error on ' + @name + ': ' + ERROR_MESSAGE();
$
END CATCH
$
FETCH NEXT FROM db_cursor INTO @name;
$
END
$
CLOSE db_cursor;
$
DEALLOCATE db_cursor;
$
GO
$
"

Sugerencia

Este script solo crea usuarios y permisos a nivel de base de datos para las bases de datos que están ONLINE en el momento de su ejecución, excluyendo master, msdb, model, rdsadmin y distribution. Vuelva a ejecutarlo cada vez que agregue una nueva base de datos que desee monitorear.

(Opcional) Verifique el inicio de sesión y sus permisos a nivel de servidor:

bash
$
docker exec -i <YOUR_MSSQL_CONTAINER_NAME> /opt/mssql-tools18/bin/sqlcmd \
>
-S localhost -U <YOUR_ADMIN_USERNAME> -P '<YOUR_ADMIN_PASSWORD>' -C \
>
-Q "SELECT sp.name AS [User], p.permission_name AS [Permission_Granted] FROM sys.server_permissions p JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id WHERE sp.name = '<YOUR_DB_USERNAME>';"

(Opcional) Verifique que el usuario de monitoreo pueda autenticarse y ver cada base de datos:

bash
$
docker exec -i <YOUR_MSSQL_CONTAINER_NAME> /opt/mssql-tools18/bin/sqlcmd \
>
-S localhost -U <YOUR_DB_USERNAME> -P '<YOUR_DB_PASSWORD>' -C \
>
-Q "SELECT name FROM sys.databases;"

Asegurar la conectividad de red de Docker

Cree una red compartida definida por el usuario (si aún no tiene una) y conecte el contenedor de SQL Server a ella, para que el contenedor del recolector pueda resolverla por nombre:

bash
$
docker network create <YOUR_DOCKER_NETWORK> 2>/dev/null || true
$
docker network connect <YOUR_DOCKER_NETWORK> <YOUR_MSSQL_CONTAINER_NAME> 2>/dev/null || true

Sugerencia

Es seguro volver a ejecutar ambos comandos: || true ignora los errores "already exists" o "already connected" de una ejecución anterior.

Crear la configuración del Collector NRDOT

Esta configuración se centra en el monitoreo esencial de SQL Server con el receptor nrsqlserver. Ejecute lo siguiente en el host de Docker para generar mssql-config.yaml en el directorio actual:

bash
$
cat << 'EOF' > mssql-config.yaml
$
receivers:
$
nrsqlserver:
$
collection_interval: 15s
$
username: "<YOUR_DB_USERNAME>"
$
password: "<YOUR_DB_PASSWORD>"
$
server: "<YOUR_MSSQL_CONTAINER_NAME>"
$
port: 1433
$
$
# Enable comprehensive database metrics
$
metrics:
$
sqlserver.database.count:
$
enabled: true
$
sqlserver.database.io:
$
enabled: true
$
sqlserver.database.latency:
$
enabled: true
$
sqlserver.database.operations:
$
enabled: true
$
sqlserver.database.tempdb.space:
$
enabled: true
$
sqlserver.database.tempdb.version_store.size:
$
enabled: true
$
sqlserver.deadlock.rate:
$
enabled: true
$
sqlserver.os.wait.duration:
$
enabled: true
$
sqlserver.processes.blocked:
$
enabled: true
$
sqlserver.memory.grants.pending.count:
$
enabled: true
$
sqlserver.database.file.size:
$
enabled: true
$
sqlserver.memory.area:
$
enabled: true
$
$
# Enable query sample, top query, query plan, and top procedure log collection
$
events:
$
db.server.query_sample:
$
enabled: true
$
db.server.top_query:
$
enabled: true
$
db.server.query_plan:
$
enabled: true
$
db.server.top_procedure:
$
enabled: true
$
$
# Top query collection configuration
$
top_query_collection:
$
lookback_time: 60s
$
max_query_sample_count: 1000
$
top_query_count: 250
$
collection_interval: 60s
$
collect_full_query_text: true
$
allowed_comment_keys:
$
- nr_service_guid
$
$
# Query sample collection configuration
$
query_sample_collection:
$
max_rows_per_query: 100
$
collect_full_query_text: true
$
allowed_comment_keys:
$
- nr_service_guid
$
$
# Top stored procedure collection configuration
$
top_procedure_collection:
$
max_procedure_sample_count: 1000
$
top_procedure_count: 250
$
collection_interval: 60s
$
$
resource_attributes:
$
db.system.version:
$
enabled: true
$
sqlserver.db.edition:
$
enabled: true
$
$
processors:
$
memory_limiter:
$
check_interval: ${env:NR_MEM_LIMITER_CHECK_INTERVAL:-1s}
$
limit_mib: ${env:NR_MEM_LIMITER_LIMIT_MIB:-200}
$
spike_limit_mib: ${env:NR_MEM_LIMITER_SPIKE_MIB:-50}
$
$
exporters:
$
otlp:
$
endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>:4318"
$
headers:
$
api-key: "<YOUR_NEWRELIC_LICENSE_KEY>"
$
tls:
$
insecure: false
$
compression: gzip
$
$
sending_queue:
$
enabled: true
$
sizer: bytes
$
queue_size: 100_000_000
$
num_consumers: 10
$
batch:
$
sizer: bytes
$
max_size: 1_000_000
$
min_size: 0
$
flush_timeout: 5s
$
$
service:
$
telemetry:
$
metrics:
$
level: none
$
$
pipelines:
$
metrics:
$
receivers: [nrsqlserver]
$
processors: [memory_limiter]
$
exporters: [otlp]
$
$
logs:
$
receivers: [nrsqlserver]
$
processors: [memory_limiter]
$
exporters: [otlp]
$
EOF

Parámetro de configuración

ParámetroDescripción
<YOUR_MSSQL_CONTAINER_NAME>El nombre (o nombre de host de Docker que se puede resolver por DNS) del contenedor de SQL Server en ejecución.
<YOUR_DB_USERNAME>El inicio de sesión de monitoreo que creó en Crear el usuario de monitoreo y otorgar permisos.
<YOUR_DB_PASSWORD>La contraseña del inicio de sesión de monitoreo que creó en Crear el usuario de monitoreo y otorgar permisos.
<YOUR_NEWRELIC_OTLP_ENDPOINT>El extremo OTLP de New Relic (solo host, sin esquema ni puerto; :4318 se añade automáticamente). Para obtener más información, consulte Extremos OTLP de New Relic.
<YOUR_NEWRELIC_LICENSE_KEY>Su clave de licencia de New Relic.

configuración completa

Esta configuración se enfoca en el monitoreo esencial de la base de datos para el entorno de Docker. Para habilitar un monitoreo integral con todas las métricas disponibles, consulte la referencia de configuración.

Iniciar el contenedor del NRDOT Collector

Ejecute el recolector en la misma red de Docker que el contenedor de SQL Server:

bash
$
docker run -d \
>
--name nrdot-collector \
>
--network <YOUR_DOCKER_NETWORK> \
>
-v "$PWD/mssql-config.yaml:/etc/nrdot-collector/mssql-config.yaml" \
>
newrelic/nrdot-collector:latest \
>
--config /etc/nrdot-collector/mssql-config.yaml

Confirme que el contenedor del recolector se esté ejecutando:

bash
$
docker ps --filter name=nrdot-collector

Si no se está ejecutando, revise los logs en busca de errores. Las causas más comunes son problemas de sangría de YAML en mssql-config.yaml o un contenedor de SQL Server inalcanzable:

bash
$
docker logs nrdot-collector

Sugerencia

Después de cambiar mssql-config.yaml, reinicie el contenedor para aplicar los cambios:

bash
$
docker restart nrdot-collector

Encuentra y utiliza tus datos

Una vez que sus datos se estén recopilando, puede acceder al monitoreo integral de bases de datos SQL Server a través de la UI de New Relic.

Para encontrar su entidad de base de datos SQL Server en New Relic:

  1. Vaya a one.newrelic.com > All capabilities > Databases.
  2. En el menú desplegable Entity type, seleccione MSSQL instance y luego haga clic en Apply.
  3. Seleccione su base de datos SQL Server de la lista de entidades.

Referencia de métricas

Obtenga información sobre las métricas disponibles recopiladas por NRDOT Collector.

Resolución de problemas

Aprenda a solucionar problemas de la configuración de monitoreo de MSSQL en New Relic.

Configurar la correlación de APM y base de datos

Aprenda a correlacionar el rendimiento de la aplicación con las operaciones de la base de datos en New Relic.

Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.