Set up Microsoft SQL Server monitoring using the NRDOT Collector on Windows self-hosted environments including physical servers, virtual machines, and standalone Windows installations, using SQL Server authentication. To monitor in a Windows RDS environment, refer to Windows RDS instrumentation.
To install this through the New Relic UI instead, go to one.newrelic.com > Integrations & Agents > MSSQL (OpenTelemetry) . Follow the on-screen instructions to set up the integration. This page covers manual installation only.
This page covers SQL Server authentication. If your environment uses a different authentication method, see Windows Domain Authentication or gMSA.
Prerequisites
Before monitoring your Microsoft SQL Server with NRDOT, make sure your environment meets these requirements:
- A New Relic account with a valid license key.
- Network connectivity to the New Relic OTLP endpoint for your region.
- SQL Server requirements:
- SQL Server 2017 or later.
- Administrative access to SQL Server (
sysadminrole or equivalent). - Network connectivity between the collector and SQL Server on port
1433or a custom port. - SQL Server Management Studio (SSMS) or the
sqlcmdutility. - Windows domain or SQL Server authentication.
Install NRDOT Collector
Download and install the NRDOT Collector using PowerShell:
$[Net.ServicePointManager]::SecurityProtocol = 'tls12, tls'; $NRDOT_VERSION = (Invoke-RestMethod -Uri "https://api.github.com/repos/newrelic/nrdot-collector-releases/releases/latest").tag_name; $WebClient = New-Object System.Net.WebClient; $WebClient.Headers.Add("User-Agent", "Mozilla/5.0"); $WebClient.DownloadFile("https://github.com/newrelic/nrdot-collector-releases/releases/download/$NRDOT_VERSION/nrdot-collector_${NRDOT_VERSION}_windows_x64.msi", "$env:TEMP\nrdot-collector.msi"); Start-Process msiexec.exe -ArgumentList "/i `"$env:TEMP\nrdot-collector.msi`" /qn /norestart /L*V `"$env:TEMP\nrdot_install.log`"" -Wait; Get-Service nrdot-collector -ErrorAction SilentlyContinueCreate monitoring user
Run this script as root user/sysadmin user to create the newrelic monitoring user and grant the necessary permissions for collecting SQL Server metrics.
In your SQL Server Management Studio (SSMS), run the following script to create the newrelic monitoring user. Replace <YOUR_PASSWORD> with your desired password:
USE [master];GOCREATE LOGIN [newrelic] WITH PASSWORD = '<YOUR_PASSWORD>';GO
GRANT VIEW SERVER STATE TO [newrelic];GRANT VIEW ANY DEFINITION TO [newrelic];GRANT VIEW ANY DATABASE TO [newrelic];GO
DECLARE @name SYSNAME;DECLARE db_cursor CURSOR READ_ONLY FORWARD_ONLY FORSELECT [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 = 0BEGIN BEGIN TRY EXEC('USE [' + @name + ']; IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''newrelic'') BEGIN CREATE USER [newrelic] FOR LOGIN [newrelic]; END; GRANT VIEW DATABASE STATE TO [newrelic];'); END TRY BEGIN CATCH PRINT 'Error on ' + @name + ': ' + ERROR_MESSAGE(); END CATCH FETCH NEXT FROM db_cursor INTO @name;ENDCLOSE db_cursor;DEALLOCATE db_cursor;GODica
To securely manage sensitive information, such as database credentials, store them in secret management tools.
Configure NRDOT Collector
Create a configuration file named as
mssql-config.yamlin PowerShell as an Administrator:bash$New-Item -Path "C:\Program Files\nrdot-collector\mssql-config.yaml" -ItemType FileAdd your environment-specific values to the following configuration and copy it to the
mssql-config.yamlfile created in the previous step:full configuration
This configuration focuses on essential database monitoring for your SQL Server environment. To enable comprehensive monitoring with all available metrics, refer to the configuration reference.
1receivers:2 nrsqlserver:3 collection_interval: 15s4 username: newrelic5 password: YOUR_PASSWORD6 server: sqlserver.example.com7 port: 14338
9 # Enable comprehensive database metrics10 metrics:11 sqlserver.database.count:12 enabled: true13 sqlserver.database.io:14 enabled: true15 sqlserver.database.latency:16 enabled: true17 sqlserver.database.operations:18 enabled: true19 sqlserver.database.tempdb.space:20 enabled: true21 sqlserver.database.tempdb.version_store.size:22 enabled: true23 sqlserver.deadlock.rate:24 enabled: true25 sqlserver.os.wait.duration:26 enabled: true27 sqlserver.processes.blocked:28 enabled: true29 sqlserver.memory.grants.pending.count:30 enabled: true31 sqlserver.database.file.size:32 enabled: true33 sqlserver.memory.area:34 enabled: true35
36 # Enable query sample, top query, query plan, and top procedure log collection37 events:38 db.server.query_sample:39 enabled: true40 db.server.top_query:41 enabled: true42 db.server.query_plan:43 enabled: true44 db.server.top_procedure:45 enabled: true46
47 # Top query collection configuration48 top_query_collection:49 lookback_time: 60s50 max_query_sample_count: 100051 top_query_count: 25052 collection_interval: 60s53 collect_full_query_text: true54 allowed_comment_keys:55 - nr_service_guid56
57 # Query sample collection configuration58 query_sample_collection:59 max_rows_per_query: 10060 collect_full_query_text: true61 allowed_comment_keys:62 - nr_service_guid63
64 # Top stored procedure collection configuration65 top_procedure_collection:66 max_procedure_sample_count: 100067 top_procedure_count: 25068 collection_interval: 60s69
70 resource_attributes:71 db.system.version:72 enabled: true73 sqlserver.db.edition:74 enabled: true75
76processors:77 memory_limiter:78 check_interval: ${env:NR_MEM_LIMITER_CHECK_INTERVAL:-1s}79 limit_mib: ${env:NR_MEM_LIMITER_LIMIT_MIB:-200}80 spike_limit_mib: ${env:NR_MEM_LIMITER_SPIKE_MIB:-50}81
82exporters:83 otlp:84 endpoint: https://otlp.nr-data.net:431885 headers:86 api-key: YOUR_LICENSE_KEY87 tls:88 insecure: false89 compression: gzip90
91 sending_queue:92 enabled: true93 sizer: bytes94 queue_size: 100_000_00095 num_consumers: 1096 batch:97 sizer: bytes98 max_size: 1_000_00099 min_size: 0100 flush_timeout: 5s101
102service:103 telemetry:104 metrics:105 level: none106
107 pipelines:108 metrics:109 receivers: [nrsqlserver]110 processors: [memory_limiter]111 exporters: [otlp]112
113 logs:114 receivers: [nrsqlserver]115 processors: [memory_limiter]116 exporters: [otlp]Dica
The
logspipeline doesn't carry collector debug or internal agent logs. It transmits SQL Server query telemetry, including query text, execution plans, and sample data. Thenrsqlserverreceiver captures this telemetry throughdb.server.query_sample,db.server.top_query,db.server.query_plan, anddb.server.top_procedureevents emitted as OpenTelemetry log records.The
db.server.top_procedureevent requires SQL Server 2017 CU3 or later, which introduced support forsys.dm_exec_procedure_stats.total_spills. On earlier versions, this event doesn't emit data and logs an error. Other events remain unaffected. Accessingsys.dm_exec_procedure_statsrequiresVIEW SERVER STATE(orVIEW SERVER PERFORMANCE STATE, depending on the SQL Server version). Additionally,VIEW ANY DEFINITIONis required forOBJECT_NAMEandOBJECT_SCHEMA_NAMEto resolve correctly across all user databases, andCONNECT SQLis needed to set up initial sessions. The monitoring user created in Create monitoring user includes all 3 permissions.
Update Windows Service Registry
Update the Windows Service Registry to use the new
mssql-config.yamlfile using one of the following methods:For PowerShell: Run the following command as Administrator:
bash$Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\nrdot-collector" -Name "ImagePath" -Value '"C:\Program Files\nrdot-collector\nrdot-collector.exe" --config "C:\Program Files\nrdot-collector\mssql-config.yaml"'For Command Prompt: If PowerShell isn't available, use Command Prompt instead and run the following command as Administrator:
bash$sc config "nrdot-collector" binPath= "\"C:\Program Files\nrdot-collector\nrdot-collector.exe\" --config \"C:\Program Files\nrdot-collector\mssql-config.yaml\""
Validate the NRDOT Collector configuration to ensure it's correctly formatted and will work properly.
bash$& "C:\Program Files\nrdot-collector\nrdot-collector.exe" validate --config="C:\Program Files\nrdot-collector\mssql-config.yaml"Dica
To correlate your application performance with database operations, you can set up database service identification. For more information, refer to set up database service identification.
Restart NRDOT Collector
After updating your configuration, restart the NRDOT Collector service:
$net stop nrdot-collector$net start nrdot-collectorDica
Always restart the NRDOT Collector service after making configuration changes to ensure the new settings take effect.
Find and use your data
Once your data is being collected, you can access comprehensive SQL Server database monitoring through New Relic UI.
To find your SQL Server database entity in New Relic:
Go to https://one.newrelic.com > All Capabilities > Databases.
From the Entity type dropdown, select MSSQL instance, then click Apply.
Select your SQL Server database from the list of entities.
After setting up SQL Server monitoring with NRDOT, you can:
- Create custom dashboards to visualize your database metrics
- Set up alerts for critical database performance thresholds
- Explore your data using New Relic query capabilities