Visualização
Ainda estamos trabalhando nesse recurso, mas adoraríamos que você experimentasse!
Atualmente, esse recurso é fornecido como parte de uma prévia, de acordo com nossas políticas de pré-lançamento.
A New Relic agora permite que sua equipe monitore o desempenho do banco de dados Microsoft SQL Server usando a New Relic Distribution of OpenTelemetry (NRDOT) com os recursos de monitoramento de banco de dados da New Relic. Esta integração fornece insights abrangentes sobre métricas de banco de dados, desempenho de consultas e saúde do sistema usando o coletor NRDOT.
Essa abordagem baseada em NRDOT complementa nossa Integração On-Host (OHI) existente, utilizando padrões OpenTelemetry para monitoramento de banco de dados, facilitando a integração com sua stack de observabilidade existente.
Pré-requisitos
Antes de começar, certifique-se de ter o seguinte:
Chave de licençada New Relic válida
Versões de banco de dados suportadas: SQL Server 2017 ou posterior
Configuração do banco de dados SQL Server:
- Acesso administrativo à sua instância do SQL Server (função
sysadminou equivalente) - Microsoft SQL Server que suporta instâncias gerenciadas on-premises
- Conectividade de rede entre o coletor NRDOT e o seu SQL Server
- SQL Server Management Studio (SSMS) ou utilitário
sqlcmd - Nome do host ou endereço IP do servidor
- Número da porta (geralmente 1433) ou porta personalizada
- Autenticação de domínio do Windows ou do SQL Server
- Preferência de SSL
- Acesso administrativo à sua instância do SQL Server (função
Requisitos do sistema:
- Sistema Windows ou Linux para executar o coletor NRDOT
- Conectividade de rede para o endpoint OTLP da New Relic
Configurar o Coletor NRDOT para o monitoramento do Microsoft SQL Server
Você pode usar o coletor NRDOT para monitorar seus bancos de dados Microsoft SQL Server. O coletor NRDOT é uma distribuição pré-configurada que inclui componentes específicos da New Relic.
Para instalar e configurar o NRDOT Collector, siga estas etapas:
Configurar o Coletor NRDOT
Instale o coletor com base no seu sistema operacional e arquitetura.
Importante
Recomenda-se instalar o NRDOT Collector no mesmo host que sua instância do SQL Server para visualizar métricas de nível de infraestrutura para monitoramento de desempenho de consultas.
Configurar usuário do banco de dados
Execute o seguinte script como um root user/sysadmin para criar o usuário de monitoramento newrelic e conceder permissões globais de leitura.
Configurar o NRDOT Collector
Substitua seu config.yaml pelo conteúdo abaixo:
Windows:
C:\Program Files (x86)\NRDOT Collector Host\config.yamlLinux:
/etc/nrdot-collector-host/config.yamlImportante
Se você já é usuário do NRDOT Collector, certifique-se de mesclar a configuração acima com seu arquivo
config.yamlexistente. Isso inclui adicionar os novos receptores, processadores e exportadores para o monitoramento de banco de dados MSSQL, mantendo suas configurações atuais.# 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 configuração
A tabela a seguir descreve os principais parâmetros de configuração para o receptor
newrelicsqlserver:Parâmetro
Descrição
<YOUR_DB_HOST>Insira o nome do host ou endereço IP do SQL Server
<YOUR_DB_PORT>Insira o número da porta do SQL Server. O valor padrão está definido como 1433.
<USERNAME>Insira seu nome de usuário do banco de dados para autenticação
<PASSWORD>Insira a senha do seu banco de dados para autenticação
<YOUR_NEWRELIC_OTLP_ENDPOINT>Insira o endpoint OTLP da New Relic. Para mais informações, consulte a documentação dos endpoints OTLP da New Relic.
<YOUR_NEWRELIC_API_KEY>Insira sua chave de API da New Relic.
query_monitoring_response_time_thresholdTempo mínimo de resposta em milissegundos para considerar uma consulta como lenta. O valor padrão é definido como
100ms.
query_monitoring_count_thresholdContagem mínima de execuções para incluir uma consulta no monitoramento. O valor padrão está definido como
30.
query_monitoring_fetch_intervalIntervalo em segundos para buscar dados de monitoramento de consultas. O valor padrão está definido como
15segundos.
collection_intervalIntervalo em segundos para coletar métricas. O valor padrão está definido como
15s.
Reiniciar o coletor NRDOT
Após atualizar sua configuração, reinicie o serviço do coletor NRDOT:
Para Windows, para reiniciar o serviço NRDOT Collector, execute:
bash$net stop nrdot-collector-host$net start nrdot-collector-hostPara Linux, para reiniciar o serviço NRDOT Collector, execute:
bash$sudo systemctl restart nrdot-collector-hostDica
Sempre reinicie o serviço do coletor NRDOT após fazer alterações na configuração para garantir que as novas configurações entrem em vigor.
(Opcional) Configurar a correlação entre APM e banco de dados
Para correlacionar o desempenho da sua aplicação com as operações de banco de dados, você pode configurar a identificação de serviço de banco de dados. Este recurso permite visualizar exatamente quais aplicativos estão gerando workloads específicas de banco de dados. Para mais informações, consulte configurar a identificação de serviço de banco de dados para obter a correlação APM-banco de dados no New Relic.
Importante
Para visualizar dados de desempenho do banco de dados no APM, ambas as entidades devem estar na mesma conta New Relic. Se as entidades estiverem em contas diferentes da New Relic, você deve ter acesso a ambas as contas para visualizar os dados.
(Opcional) Configurar o gerenciamento de segredos
O recurso de gerenciamento de segredos permite gerenciar com segurança informações confidenciais, como credenciais de banco de dados. Isso ajuda a aprimorar a segurança do seu ambiente de monitoramento ao evitar a inserção direta de dados sensíveis nos arquivos de configuração. Para mais informações, consulte gerenciamento de segredos.
Encontre e use seus dados
Assim que seus dados estiverem sendo coletados, você poderá acessar o monitoramento abrangente do banco de dados SQL Server por meio da interface do New Relic.
Para encontrar sua entidade de banco de dados SQL Server no New Relic:
- Vá para https://one.newrelic.com > All Capabilities > Databases.
- Defina os critérios de pesquisa como
instrumentation.provider = opentelemetry. - Selecione seu banco de dados SQL Server na lista de entidades.
Comandos suportados pelo coletor NRDOT
Para gerenciar o serviço NRDOT Collector, visualizar logs ou verificar o status do serviço, use os seguintes comandos disponíveis com base no seu sistema operacional.
Resolução de problemas
Se você encontrar problemas de conectividade de rede com o NRDOT Collector, execute os seguintes comandos para testar a conectividade com sua instância do SQL Server na porta 1433:
Para Windows, execute:
bash$Test-NetConnection -ComputerName <YOUR_IP_ADDRESS> -Port <YOUR_PORT_NUMBER>Para Linux, execute:
bash$nc -zv <YOUR_IP_ADDRESS> <YOUR_PORT_NUMBER>
Métricas disponíveis
Monitore o desempenho do seu banco de dados SQL Server com métricas organizadas por flags de configuração. As métricas padrão são coletadas automaticamente para a funcionalidade da interface do New Relic. Você também pode usar as métricas adicionais fornecidas para obter insights avançados e mais profundos ao ativar scrapers específicos.
Métrica padrão
Essas métricas são essenciais para os recursos de monitoramento do SQL Server da New Relic e são coletadas automaticamente, independentemente da sua configuração.
Métricas adicionais
Habilite estas métricas adicionais conforme necessário para obter insights mais aprofundados sobre o desempenho e a saúde do seu banco de dados SQL Server.
Qual é o próximo
Após configurar o monitoramento de banco de dados SQL Server com o NRDOT:
- Crie dashboards personalizados para visualizar suas métricas de banco de dados
- Configure alertas para limites críticos de desempenho do banco de dados
- Explore seus dados usando os recursos de consulta do New Relic