Preview
We're still working on this feature, but we'd love for you to try it out!
This feature is currently provided as part of a preview pursuant to our pre-release policies.
Get comprehensive insights into your SQL Server performance with database monitoring, query analysis, and system health metrics using the New Relic Distribution of OpenTelemetry (NRDOT) collector.
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 the CLI install path only.
Conseil
If you're using SQL Server in an Linux RDS environment, refer to Linux instrumentation for RDS.
Prerequisites
- New Relic account with a valid license key
- New Relic OTLP endpoint for your region
- SQL Server requirements, you'll need:
- SQL Server 2017 or later
- Administrative access to SQL Server (
sysadminrole or equivalent) - Network connectivity between collector and SQL Server on port
1433or custom port sqlcmdutility installed on your Linux system
- Network connectivity to New Relic OTLP endpoint
Enroll to preview
This integration is available as part of the New Relic public preview program. Contact your Organization Manager to opt in from the Previews & Trials page.
Install NRDOT Collector
Download and install the NRDOT package for your Linux distribution. Replace <NRDOT_VERSION> with the latest release tag from the nrdot-collector-releases page.
Conseil
We recommend installing the NRDOT Collector on the same host as the SQL Server instance to view infrastructure-level metrics for query performance monitoring.
Create monitoring user
Run this script as root user to create the newrelic monitoring user and grant the necessary permissions for collecting SQL Server metrics.
Create a configuration file named as
nr-grant-permission.sql.Paste the following SQL script to create the
newrelicmonitoring user and replace<YOUR_PASSWORD>with your desired password:USE [master];GOCREATE LOGIN [newrelic] WITH PASSWORD = '<YOUR_PASSWORD>';GO-- Instance-level permissionsGRANT VIEW SERVER STATE TO [newrelic];GRANT VIEW ANY DEFINITION TO [newrelic];GRANT VIEW ANY DATABASE TO [newrelic];GO-- Grant read access privileges to all user databasesDECLARE @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; -- Only online databasesOPEN db_cursor;FETCH NEXT FROM db_cursor INTO @name;WHILE @@FETCH_STATUS = 0BEGINBEGIN TRYEXEC('USE [' + @name + '];IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''newrelic'')BEGINCREATE USER [newrelic] FOR LOGIN [newrelic];END;GRANT VIEW DATABASE STATE TO [newrelic];');END TRYBEGIN CATCHPRINT 'Error on ' + @name + ': ' + ERROR_MESSAGE();END CATCHFETCH NEXT FROM db_cursor INTO @name;ENDCLOSE db_cursor;DEALLOCATE db_cursor;GOExecute the script using
sqlcmd. Replace<YOUR_SA_PASSWORD>with your SQL Server administrator password:bash$sqlcmd -S <YOUR_DB_ENDPOINT> -U sa -P '<YOUR_SA_PASSWORD>' -C -i nr-grant-permission.sql(Optional) Verify the user is created successfully with the correct permissions:
bash$sqlcmd -S <YOUR_DB_ENDPOINT> -U sa -P '<YOUR_SA_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 = 'newrelic';"Expected Output:
bash$User Permission_Granted$-------------------------------------------------------------------------------------$newrelic CONNECT SQL$newrelic VIEW ANY DEFINITION$newrelic VIEW ANY DATABASE$newrelic VIEW SERVER STATEThis output confirms that your user has been created successfully with the required server-level permissions.
Conseil
To securely manage sensitive information, such as database credentials store them in secret management tools.
Configure NRDOT Collector
Choose your configuration option based on your monitoring requirements:
Create a configuration file named as
mssql-config.yaml:bash$sudo nano /etc/nrdot-collector/mssql-config.yamlAdd the following configuration to the
mssql-config.yamlfile created in the previous step:full configuration
This minimal configuration focuses only on database monitoring without host infrastructure metrics. To enable with full-feature monitoring, refer to the configuration reference.
1receivers:2 nrsqlserver:3 collection_interval: 15s4 # Direct connection to SQL Server5 username: newrelic6 password: YOUR_PASSWORD7 server: sqlserver.example.com8 port: 14339
10 # Enable comprehensive database metrics11 metrics:12 sqlserver.database.count:13 enabled: true14 sqlserver.database.io:15 enabled: true16 sqlserver.database.latency:17 enabled: true18 sqlserver.database.operations:19 enabled: true20 sqlserver.database.tempdb.space:21 enabled: true22 sqlserver.database.tempdb.version_store.size:23 enabled: true24 sqlserver.deadlock.rate:25 enabled: true26 sqlserver.os.wait.duration:27 enabled: true28 sqlserver.processes.blocked:29 enabled: true30 sqlserver.memory.grants.pending.count:31 enabled: true32 sqlserver.database.file.size:33 enabled: true34 sqlserver.memory.area:35 enabled: true36
37 # Enable top query and query sample log collection38 events:39 db.server.query_sample:40 enabled: true41 db.server.top_query:42 enabled: true43
44 # Top query collection configuration45 top_query_collection:46 lookback_time: 60s47 max_query_sample_count: 100048 top_query_count: 25049 collection_interval: 60s50
51 collect_full_query_text: true52 allowed_comment_keys:53 - nr_service_guid54
55 # Query sample collection configuration56 query_sample_collection:57 max_rows_per_query: 10058
59processors:60 memory_limiter:61 check_interval: ${env:NR_MEM_LIMITER_CHECK_INTERVAL:-1s}62 limit_mib: ${env:NR_MEM_LIMITER_LIMIT_MIB:-200}63 spike_limit_mib: ${env:NR_MEM_LIMITER_SPIKE_MIB:-50}64
65 batch:66
67exporters:68 otlp:69 endpoint: https://otlp.nr-data.net:431870 headers:71 api-key: YOUR_LICENSE_KEY72 tls:73 insecure: false74 compression: gzip75
76service:77 telemetry:78 metrics:79 level: none80
81 pipelines:82 metrics:83 receivers: [nrsqlserver]84 processors: [memory_limiter, batch]85 exporters: [otlp]86
87 logs:88 receivers: [nrsqlserver]89 processors: [memory_limiter, batch]90 exporters: [otlp]Update NRDOT Collector configuration
After configuring your YAML file with the interactive inputs above, complete the NRDOT Collector setup:
Edit the service configuration file:
bash$sudo nano /etc/nrdot-collector/nrdot-collector.confUpdate the configuration path to point to your new
mssql-config.yamlfile:bash$OTELCOL_CONFIG="/etc/nrdot-collector/mssql-config.yaml"(Optional) Validate the NRDOT Collector configuration:
bash$sudo /usr/bin/nrdot-collector validate --config=/etc/nrdot-collector/mssql-config.yamlConseil
To correlate your application performance with database operations, you can set up database service identification. For more information, refer to database service identification setup guide.
Restart NRDOT Collector
After updating your configuration, restart the NRDOT Collector service:
$sudo systemctl restart nrdot-collectorConseil
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 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