Avance
Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras!
Esta función se proporciona actualmente como parte de una vista previa de conformidad con nuestras políticas de prelanzamiento.
New Relic ahora permite a su equipo monitorear el rendimiento de su base de datos Microsoft SQL Server utilizando New Relic Distribution of OpenTelemetry (NRDOT) con las capacidades de monitoreo de bases de datos de New Relic. Esta integración proporciona información detallada sobre las métricas de la base de datos, el rendimiento de las consultas y el estado del sistema mediante el recopilador NRDOT.
Este enfoque basado en NRDOT complementa nuestra actual On-Host Integration (OHI) al aprovechar los estándares de OpenTelemetry para el monitoreo de bases de datos, lo que facilita la integración con su stack de observabilidad existente.
Requisitos previos
Antes de comenzar, cerciorar de tener lo siguiente:
Clave de licenciade New Relic válida
Versiones de base de datos compatibles: SQL Server 2017 o posterior
Configuración de la base de datos SQL Server:
- Acceso administrativo a su instancia de SQL Server (rol
sysadmino equivalente) - Microsoft SQL Server que admite instancias administradas en las instalaciones
- Conectividad de red entre el colector NRDOT y su SQL Server
- SQL Server Management Studio (SSMS) o la utilidad
sqlcmd - Nombre de host o dirección IP del servidor
- Número de puerto (generalmente 1433) o puerto personalizado
- Autenticación de dominio de Windows o de SQL Server
- Preferencia de SSL
- Acceso administrativo a su instancia de SQL Server (rol
Requisitos del sistema:
- Sistema Windows o Linux para ejecutar el colector NRDOT
- Conectividad de red al endpoint OTLP de New Relic
Configurar el NRDOT Collector para el monitoreo de Microsoft SQL Server
Puede utilizar el colector NRDOT para monitorear sus bases de datos de Microsoft SQL Server. El colector NRDOT es una distribución preconfigurada que incluye componentes específicos de New Relic.
Para instalar y configurar el NRDOT Collector, siga estos pasos:
Configurar el colector NRDOT
Instale el colector según su sistema operativo y arquitectura.
Importante
Se recomienda instalar el NRDOT Collector en el mismo host que su instancia de SQL Server para ver métricas a nivel de infraestructura para el monitoreo del rendimiento de consultas.
Configurar el usuario de la base de datos
Ejecute el siguiente script como root user/sysadmin para crear el usuario de monitoreo de newrelic y otorgar permisos globales de lectura.
Configurar el Colector NRDOT
Reemplace su config.yaml con el siguiente contenido:
Ventanas:
C:\Program Files (x86)\NRDOT Collector Host\config.yamlLinux:
/etc/nrdot-collector-host/config.yamlImportante
Si es un usuario actual de NRDOT Collector, asegúrese de fusionar la configuración anterior con su archivo
config.yamlexistente. Esto incluye agregar los nuevos receptores, procesadores y exportadores para el monitoreo de bases de datos MSSQL, mientras conserva sus configuraciones actuales.# NRDOT Collector Configuration for New Relic SQL Server Integration# SQL Server On-Premises/VM Configurationextensions:health_check:receivers:otlp:protocols:grpc:http:hostmetrics:# Default collection interval is 60s. Lower if you need finer granularity.collection_interval: 60sscrapers:cpu:metrics:system.cpu.time:enabled: falsesystem.cpu.utilization:enabled: trueload:memory:metrics:system.memory.utilization:enabled: truepaging:metrics:system.paging.utilization:enabled: falsesystem.paging.faults:enabled: falsefilesystem:metrics:system.filesystem.utilization:enabled: truedisk:metrics:system.disk.merged:enabled: falsesystem.disk.pending_operations:enabled: falsesystem.disk.weighted_io_time:enabled: falsenetwork:metrics:system.network.connections:enabled: false# Uncomment to enable process metrics, which can be noisy but valuable.# processes:# process:# metrics:# process.cpu.utilization:# enabled: true# process.cpu.time:# enabled: falsefilelog:include:- /var/log/alternatives.log- /var/log/cloud-init.log- /var/log/auth.log- /var/log/dpkg.log- /var/log/syslog- /var/log/messages- /var/log/secure- /var/log/yum.lognewrelicsqlserver:hostname: "<YOUR_DB_HOST>"port: "<YOUR_DB_PORT>"username: "<USERNAME>"password: "<PASSWORD>"monitored_databases: []# timeout: 30s# collection_interval: 15s# query_monitoring_fetch_interval: 15# query_monitoring_response_time_threshold: 100# query_monitoring_count_threshold: 30# interval_calculator_cache_ttl_minutes: 10# Metric Category Toggles - Enable/disable entire categories of metrics# enable_instance_metrics: true# enable_database_metrics: true# enable_user_connection_metrics: true# enable_wait_time_metrics: true# enable_failover_cluster_metrics: true# enable_database_principals_metrics: true# enable_database_role_membership_metrics: true# enable_security_metrics: true# enable_lock_metrics: true# enable_thread_pool_metrics: true# enable_tempdb_metrics: trueprocessors:# group system.cpu metrics by cpumetricstransform:transforms:- include: system.cpu.utilizationaction: updateoperations:- action: aggregate_labelslabel_set: [ state ]aggregation_type: mean- include: system.paging.operationsaction: updateoperations:- action: aggregate_labelslabel_set: [ direction ]aggregation_type: sum# remove system.cpu metrics for statesfilter/exclude_cpu_utilization:metrics:datapoint:- 'metric.name == "system.cpu.utilization" and attributes["state"] == "interrupt"'- 'metric.name == "system.cpu.utilization" and attributes["state"] == "nice"'- 'metric.name == "system.cpu.utilization" and attributes["state"] == "softirq"'filter/exclude_memory_utilization:metrics:datapoint:- 'metric.name == "system.memory.utilization" and attributes["state"] == "slab_unreclaimable"'- 'metric.name == "system.memory.utilization" and attributes["state"] == "inactive"'- 'metric.name == "system.memory.utilization" and attributes["state"] == "cached"'- 'metric.name == "system.memory.utilization" and attributes["state"] == "buffered"'- 'metric.name == "system.memory.utilization" and attributes["state"] == "slab_reclaimable"'filter/exclude_memory_usage:metrics:datapoint:- 'metric.name == "system.memory.usage" and attributes["state"] == "slab_unreclaimable"'- 'metric.name == "system.memory.usage" and attributes["state"] == "inactive"'filter/exclude_filesystem_utilization:metrics:datapoint:- 'metric.name == "system.filesystem.utilization" and attributes["type"] == "squashfs"'filter/exclude_filesystem_usage:metrics:datapoint:- 'metric.name == "system.filesystem.usage" and attributes["type"] == "squashfs"'- 'metric.name == "system.filesystem.usage" and attributes["state"] == "reserved"'filter/exclude_filesystem_inodes_usage:metrics:datapoint:- 'metric.name == "system.filesystem.inodes.usage" and attributes["type"] == "squashfs"'- 'metric.name == "system.filesystem.inodes.usage" and attributes["state"] == "reserved"'filter/exclude_system_disk:metrics:datapoint:- 'metric.name == "system.disk.operations" and IsMatch(attributes["device"], "^loop.*") == true'- 'metric.name == "system.disk.merged" and IsMatch(attributes["device"], "^loop.*") == true'- 'metric.name == "system.disk.io" and IsMatch(attributes["device"], "^loop.*") == true'- 'metric.name == "system.disk.io_time" and IsMatch(attributes["device"], "^loop.*") == true'- 'metric.name == "system.disk.operation_time" and IsMatch(attributes["device"], "^loop.*") == true'filter/exclude_system_paging:metrics:datapoint:- 'metric.name == "system.paging.usage" and attributes["state"] == "cached"'- 'metric.name == "system.paging.operations" and attributes["type"] == "cached"'filter/exclude_network:metrics:datapoint:- 'IsMatch(metric.name, "^system.network.*") == true and attributes["device"] == "lo"'attributes/exclude_system_paging:include:match_type: strictmetric_names:- system.paging.operationsactions:- key: typeaction: delete# Transform to clear description and unit fieldstransform/clear_metadata:metric_statements:- context: metricstatements:- set(metric.description, "")- set(metric.unit, "")# Filter to only include execution plan and event metrics (for logs conversion)filter/exec_plan_include:metrics:include:match_type: strictmetric_names:- sqlserver.slowquery.query_details- sqlserver.execution.plan- sqlserver.blocking_query.details- sqlserver.activequery.query_details# Filter to exclude execution plan and event metrics (from main metrics pipeline)filter/exec_plan_exclude:metrics:exclude:match_type: strictmetric_names:- sqlserver.slowquery.query_details- sqlserver.execution.plan- sqlserver.blocking_query.details- sqlserver.activequery.query_detailscumulativetodelta:max_staleness: 5minclude:match_type: strictmetrics:# Wait stats (sys.dm_os_wait_stats)- sqlserver.wait_stats.latch.wait_time_ms- sqlserver.wait_stats.latch.waiting_tasks_count- sqlserver.wait_stats.wait_time_ms- sqlserver.wait_stats.waiting_tasks_count# Instance stats (sys.dm_os_performance_counters)- sqlserver.stats.sql_compilations_per_sec- sqlserver.stats.sql_recompilations_per_sec- sqlserver.stats.lock_waits_per_sec- sqlserver.stats.deadlocks_per_sec- sqlserver.stats.user_errors_per_sec- sqlserver.stats.kill_connection_errors_per_sec- sqlserver.access.page_splits_per_sec- sqlserver.buffer.checkpoint_pages_per_sec- sqlserver.bufferpool.batch_requests_per_sec- sqlserver.instance.transactions_per_sec- sqlserver.instance.forced_parameterizations_per_sec- sqlserver.instance.full_scans_rate- sqlserver.instance.lock_timeouts_rate# Database log (sys.dm_os_performance_counters)- sqlserver.database.log.flushes_per_sec- sqlserver.database.log.bytes_flushed_per_sec- sqlserver.database.log.flush_waits_per_sec# Failover cluster- sqlserver.failover_cluster.log_bytes_received_per_sec# User connections- sqlserver.user_connections.authentication.logins_per_secdeltatorate:metrics:- sqlserver.wait_stats.latch.wait_time_ms- sqlserver.wait_stats.latch.waiting_tasks_count- sqlserver.wait_stats.wait_time_ms- sqlserver.wait_stats.waiting_tasks_count- sqlserver.stats.sql_compilations_per_sec- sqlserver.stats.sql_recompilations_per_sec- sqlserver.stats.lock_waits_per_sec- sqlserver.stats.deadlocks_per_sec- sqlserver.stats.user_errors_per_sec- sqlserver.stats.kill_connection_errors_per_sec- sqlserver.access.page_splits_per_sec- sqlserver.buffer.checkpoint_pages_per_sec- sqlserver.bufferpool.batch_requests_per_sec- sqlserver.instance.transactions_per_sec- sqlserver.instance.forced_parameterizations_per_sec- sqlserver.instance.full_scans_rate- sqlserver.instance.lock_timeouts_rate- sqlserver.database.log.flushes_per_sec- sqlserver.database.log.bytes_flushed_per_sec- sqlserver.database.log.flush_waits_per_sec- sqlserver.failover_cluster.log_bytes_received_per_sec- sqlserver.user_connections.authentication.logins_per_sectransform/host:metric_statements:- context: metricstatements:- set(metric.description, "")- set(metric.unit, "")transform:trace_statements:- context: spanstatements:- truncate_all(span.attributes, 4095)- truncate_all(resource.attributes, 4095)log_statements:- context: logstatements:- truncate_all(log.attributes, 4095)- truncate_all(resource.attributes, 4095)# used to prevent out of memory situations on the collectormemory_limiter:check_interval: 1slimit_mib: ${env:NEW_RELIC_MEMORY_LIMIT_MIB:-100}batch:resourcedetection:detectors: ["system"]system:hostname_sources: ["os"]resource_attributes:host.id:enabled: trueresourcedetection/db_safe:detectors: ["system"]override: falsesystem:hostname_sources: ["os"]resource_attributes:host.id:enabled: trueresourcedetection/cloud:detectors: ["gcp", "ec2", "azure"]timeout: 2soverride: trueresourcedetection/env:detectors: ["env"]timeout: 2soverride: trueconnectors:metricsaslogs:include_resource_attributes: trueinclude_scope_info: trueexporters:otlphttp:endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"headers:api-key: "<YOUR_NEWRELIC_API_KEY>"compression: gzipservice:pipelines:metrics/host:receivers: [hostmetrics]processors:- memory_limiter- metricstransform- filter/exclude_cpu_utilization- filter/exclude_memory_utilization- filter/exclude_memory_usage- filter/exclude_filesystem_utilization- filter/exclude_filesystem_usage- filter/exclude_filesystem_inodes_usage- filter/exclude_system_disk- filter/exclude_network- attributes/exclude_system_paging- transform/host- resourcedetection- resourcedetection/cloud- resourcedetection/db_safe- resourcedetection/env- cumulativetodelta- deltatorate- batchexporters: [otlphttp]traces:receivers: [otlp]processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, batch]exporters: [otlphttp]metrics:receivers: [newrelicsqlserver, otlp]processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, filter/exec_plan_exclude, batch]exporters: [otlphttp]logs:receivers: [metricsaslogs, otlp]processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, batch]exporters: [otlphttp]metrics/exec_plan_to_logs:receivers: [newrelicsqlserver, otlp]processors: [memory_limiter, transform, resourcedetection, resourcedetection/cloud, resourcedetection/env, filter/exec_plan_include, batch]exporters: [metricsaslogs]extensions: [health_check]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave para el receptor
newrelicsqlserver:Parámetro
Descripción
<YOUR_DB_HOST>Ingrese el nombre de host o la dirección IP de SQL Server
<YOUR_DB_PORT>Ingrese el número de puerto de SQL Server. El valor predeterminado está establecido en 1433.
<USERNAME>Ingrese su nombre de usuario de la base de datos para la autenticación
<PASSWORD>Ingrese su contraseña de la base de datos para la autenticación
<YOUR_NEWRELIC_OTLP_ENDPOINT>Ingrese el endpoint OTLP de New Relic. Para obtener más información, consulta la documentación de los endpoints OTLP de New Relic.
<YOUR_NEWRELIC_API_KEY>Ingrese su clave de API de New Relic.
query_monitoring_response_time_thresholdTiempo de respuesta mínimo en milisegundos para considerar una consulta como lenta. El valor predeterminado está establecido en
100ms.
query_monitoring_count_thresholdRecuento mínimo de ejecuciones para incluir una consulta en el monitoreo. El valor predeterminado está establecido en
30.
query_monitoring_fetch_intervalIntervalo en segundos para obtener datos de monitoreo de consultas. El valor predeterminado está establecido en
15segundos.
collection_intervalIntervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
15s.
Reiniciar el colector NRDOT
Después de actualizar la configuración, reinicie el servicio de colector NRDOT:
Para Windows, para reiniciar el servicio NRDOT Collector, ejecute:
bash$net stop nrdot-collector-host$net start nrdot-collector-hostPara Linux, para reiniciar el servicio NRDOT Collector, ejecute:
bash$sudo systemctl restart nrdot-collector-hostSugerencia
Siempre reinicie el servicio de recopilador NRDOT después de realizar cambios de configuración para garantizar que los nuevos ajustes surtan efecto.
(Opcional) Configurar la correlación de APM y base de datos
Para correlacionar el rendimiento de su aplicación con las operaciones de la base de datos, puede configurar la identificación del servicio de base de datos. Esta función le permite ver exactamente qué aplicaciones están generando workloads de base de datos específicas. Para obtener más información, consulte configurar la identificación de servicios de base de datos para obtener la correlación entre APM y la base de datos en New Relic.
Importante
Para ver los datos de rendimiento de la base de datos en APM, ambas entidades deben estar en la misma cuenta de New Relic. Si las entidades están en diferentes cuentas de New Relic, debe tener acceso a ambas cuentas para ver los datos.
(Opcional) Configurar la gestión de secretos
La función de gestión de secretos le permite administrar de forma segura información confidencial, como las credenciales de bases de datos. Esto ayuda a mejorar la seguridad de su configuración de monitoreo al evitar la codificación rígida de datos sensibles en los archivos de configuración. Para obtener más información, consulta gestión de secretos.
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:
- Vaya a https://one.newrelic.com > All Capabilities > Databases.
- Establezca los criterios de búsqueda como
instrumentation.provider = opentelemetry. - Seleccione su base de datos SQL Server de la lista de entidades.
Comandos admitidos del colector NRDOT
Para administrar el servicio NRDOT Collector, ver los logs o verificar el estado del servicio, utilice los siguientes comandos disponibles según su sistema operativo.
Resolución de problemas
Si encuentra algún problema de conectividad de red con el NRDOT Collector, ejecute los siguientes comandos para probar la conectividad con su instancia de SQL Server en el puerto 1433:
Para Windows, ejecute:
bash$Test-NetConnection -ComputerName <YOUR_IP_ADDRESS> -Port <YOUR_PORT_NUMBER>Para Linux, ejecute:
bash$nc -zv <YOUR_IP_ADDRESS> <YOUR_PORT_NUMBER>
Métricas disponibles
Monitoree el rendimiento de su base de datos SQL Server con métricas organizadas por banderas de configuración. Las métricas predeterminadas se recopilan automáticamente para la funcionalidad de la UI de New Relic. También puede utilizar las métricas adicionales proporcionadas para obtener información más avanzada y profunda cuando habilite scrapers específicos.
Métrica predeterminada
Estas métricas son esenciales para las funciones de monitoreo de SQL Server de New Relic y se recopilan automáticamente independientemente de su configuración.
Métricas adicionales
Habilite estas métricas adicionales según sea necesario para obtener información más detallada sobre el rendimiento y el estado de su base de datos SQL Server.
Que sigue
Después de configurar el monitoreo de bases de datos SQL Server con NRDOT:
- Crea dashboards personalizados para visualizar las métricas de tu base de datos
- Configura alertas para umbrales críticos de rendimiento de la base de datos
- Explora tus datos con las capacidades de consulta de New Relic