Configurez le monitoring SQL Server à l’aide du Collector NRDOT en tant que conteneur frère d’une instance SQL Server déjà en cours d’exécution dans Docker.
Installation guidée
Pour installer ceci via l’UI de New Relic à la place, accédez à one.newrelic.com > Integrations & Agents > Microsoft SQL Server (Database 360) . Suivez les instructions à l’écran pour configurer l’intégration. Cette page couvre uniquement l’installation manuelle.
Conseil
Vous cherchez à automatiser cela à grande échelle, ou plutôt à l'exécuter sur Kubernetes ? Se reporter à l’ installation Ansible, à l’installation Chef, ou à l’ installation du chart Helm.
Prérequis
- Docker installé sur l’hôte.
- Un conteneur SQL Server déjà en cours d’exécution (SQL Server 2017 ou version ultérieure), avec l’utilitaire
sqlcmddisponible à l’intérieur. Les imagesmssql-serverde Microsoft l’incluent sous/opt/mssql-tools18/binou/opt/mssql-tools/bin. - Un identifiant de connexion dans le rôle de serveur
sysadmin(ou équivalent) avec son mot de passe. - Une clé de licence New Relic.
- Connectivité réseau depuis le conteneur du collecteur vers les points de terminaison OTLP de New Relic.
Créer l’utilisateur de monitoring et accorder les autorisations
Exécutez le script d’octroi de droits dans votre conteneur SQL Server avec docker exec. Remplacez <YOUR_MSSQL_CONTAINER_NAME>, <YOUR_ADMIN_USERNAME>, <YOUR_ADMIN_PASSWORD>, <YOUR_DB_USERNAME> et <YOUR_DB_PASSWORD> par vos propres valeurs. Ajustez le chemin sqlcmd (/opt/mssql-tools18/bin/sqlcmd ou /opt/mssql-tools/bin/sqlcmd) pour qu’il corresponde à votre image.
$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$"Conseil
Ce script crée uniquement des utilisateurs et des droits au niveau de la base de données pour les bases de données qui sont ONLINE au moment de son exécution, à l’exclusion de master, msdb, model, rdsadmin, et distribution. Réexécutez-le chaque fois que vous ajoutez une nouvelle base de données que vous souhaitez monitorer.
(Facultatif) Vérifiez l’identifiant et ses permissions au niveau du serveur :
$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>';"(Facultatif) Vérifiez que l'utilisateur de monitoring peut s'authentifier et voir chaque base de données :
$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;"S’assurer de la connectivité réseau de Docker
Créez un réseau partagé défini par l’utilisateur (si vous n’en avez pas déjà un) et connectez-y votre conteneur SQL Server, afin que le conteneur du collecteur puisse le résoudre par son nom :
$docker network create <YOUR_DOCKER_NETWORK> 2>/dev/null || true$docker network connect <YOUR_DOCKER_NETWORK> <YOUR_MSSQL_CONTAINER_NAME> 2>/dev/null || trueConseil
Les deux commandes peuvent être réexécutées en toute sécurité : || true ignore les erreurs « already exists » ou « already connected » d’une exécution précédente.
Créez la configuration du Collector NRDOT
Cette configuration se concentre sur le monitoring essentiel de SQL Server avec le récepteur nrsqlserver. Exécutez ce qui suit sur l'hôte Docker pour générer mssql-config.yaml dans votre répertoire courant :
$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]$EOFParamètres de configuration
| paramètres | Description |
|---|---|
<YOUR_MSSQL_CONTAINER_NAME> | Le nom (ou le nom d’hôte résolvable par le DNS Docker) de votre conteneur SQL Server en cours d’exécution. |
<YOUR_DB_USERNAME> | L’identifiant de monitoring que vous avez créé dans Créer l’utilisateur de monitoring et accorder des droits. |
<YOUR_DB_PASSWORD> | Le mot de passe de l’identifiant de monitoring que vous avez créé dans Créer l’utilisateur de monitoring et accorder les autorisations. |
<YOUR_NEWRELIC_OTLP_ENDPOINT> | Votre point de terminaison OTLP New Relic (hôte uniquement, aucun schéma ni port ; :4318 est ajouté pour vous). Pour plus d’informations, consultez les points de terminaison OTLP New Relic. |
<YOUR_NEWRELIC_LICENSE_KEY> | Votre clé de licence New Relic. |
configuration complète
Cette configuration se concentre sur le monitoring essentiel de la base de données pour votre environnement Docker. Pour activer un monitoring complet avec toutes les métriques disponibles, reportez-vous à la référence de configuration.
Démarrer le conteneur NRDOT Collector
Exécutez le collecteur sur le même réseau Docker que votre conteneur 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.yamlConfirmez que le conteneur du collecteur est en cours d'exécution :
$docker ps --filter name=nrdot-collectorS’il ne s’exécute pas, vérifiez ses logs pour détecter des erreurs. Les causes les plus courantes sont des problèmes d’indentation YAML dans mssql-config.yaml ou un conteneur SQL Server inaccessible :
$docker logs nrdot-collectorConseil
Après avoir modifié mssql-config.yaml, redémarrez le conteneur pour appliquer vos modifications :
$docker restart nrdot-collectorTrouvez et utilisez vos données
Une fois vos données collectées, vous pouvez accéder à un monitoring complet de la base de données SQL Server via l'UI de New Relic.
Pour trouver votre entité de base de données SQL Server dans New Relic :
- Allez à one.newrelic.com > All capabilities > Databases.
- Dans la liste déroulante Entity type, sélectionnez MSSQL instance, puis cliquez sur Apply.
- Sélectionnez votre base de données SQL Server dans la liste des entités.
Documentation associée
Référence des métriques
Découvrez les métriques disponibles collectées par le collecteur NRDOT.
Dépannage
Découvrez comment dépanner votre configuration de monitoring MSSQL dans New Relic.
Configurer la corrélation APM-base de données
Découvrez comment corréler les performances des applications avec les opérations de base de données dans New Relic.