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
sqlcmddisponible en su interior. Las imágenesmssql-serverde Microsoft lo incluyen en/opt/mssql-tools18/bino/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.
$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:
$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:
$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:
$docker network create <YOUR_DOCKER_NETWORK> 2>/dev/null || true$docker network connect <YOUR_DOCKER_NETWORK> <YOUR_MSSQL_CONTAINER_NAME> 2>/dev/null || trueSugerencia
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:
$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]$EOFParámetro de configuración
| Parámetro | Descripció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:
$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.yamlConfirme que el contenedor del recolector se esté ejecutando:
$docker ps --filter name=nrdot-collectorSi 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:
$docker logs nrdot-collectorSugerencia
Después de cambiar mssql-config.yaml, reinicie el contenedor para aplicar los cambios:
$docker restart nrdot-collectorEncuentra 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:
- Vaya a one.newrelic.com > All capabilities > Databases.
- En el menú desplegable Entity type, seleccione MSSQL instance y luego haga clic en Apply.
- Seleccione su base de datos SQL Server de la lista de entidades.
Documentación relacionada
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.