뉴렐릭은 이제 뉴렐릭의 데이터베이스 모니터링 기능과 함께 뉴렐릭 NRDOT(Distribution of OpenTelemetry)를 사용하여 Microsoft SQL Server 데이터베이스 성능을 모니터링할 수 있는 권한을 팀에 부여합니다. 이 통합은 NRDOT 수집기를 사용하여 데이터베이스 지표, 쿼리 성능 및 시스템 상태에 대한 포괄적인 인사이트를 제공합니다.
이 NRDOT 기반 접근 방식은 모니터링을 위한 OpenTelemetry 데이터베이스 표준을 활용하여 기존 온호스트 통합(OHI)을 보완하고 기존 옵저버빌리티 그리드와 통합을 더 쉽게 만듭니다.
전제 조건
시작하기 전에 다음 사항이 있는지 확인하세요.
유효한 뉴렐릭 클러스터
지원되는 데이터베이스 버전: SQL Server 2017 이상
SQL Server 데이터베이스 설정:
- SQL Server 인스턴스에 대한 관리자 액세스 권한(
sysadmin역할 또는 그에 상응하는 권한)이 필요합니다. - 온프레미스 관리형 인스턴스를 지원하는 Microsoft SQL Server
- NRDOT 수집기와 SQL Server 간의 네트워크 연결
- SQL Server Management Studio(SSMS) 또는
sqlcmd유틸리티 - 서버 호스트명 또는 IP 주소
- 포트 번호(일반적으로 1433) 또는 사용자 지정 포트
- Windows 도메인 또는 SQL Server 인증
- SSL 기본 설정
- SQL Server 인스턴스에 대한 관리자 액세스 권한(
시스템 요구사항:
- NRDOT 수집기를 실행하려면 Windows 또는 Linux 시스템이 필요합니다.
- 뉴렐릭의 OTLP 엔드포인트에 대한 네트워크 연결
Microsoft SQL Server 모니터링을 위해 NRDOT Collector를 설정하세요.
NRDOT 수집기를 사용하여 Microsoft SQL Server 데이터베이스를 모니터링할 수 있습니다. NRDOT 수집기는 뉴럴릭 관련 구성 요소를 포함하는 사전 구성된 배포판입니다.
NRDOT Collector 설치 및 구성하려면 다음 단계를 따르십시오.
NRDOT Collector설정하세요
귀하의 운영 시스템과 그에 맞춰 수집기를 설치하세요.
중요
쿼리 성능 모니터링을 위한 인프라 수준 메트릭을 보려면 NRDOT Collector를 SQL Server 인스턴스와 동일한 호스트에 설치하는 것이 좋습니다.
데이터베이스 사용자 구성
다음 스크립트를 root user/sysadmin 사용자 권한으로 실행하여 newrelic 모니터링 사용자를 생성하고 전역 읽기 권한을 부여하십시오.
NRDOT Collector구성
config.yaml 부분을 아래 내용으로 바꾸세요:
Windows:
C:\Program Files (x86)\NRDOT Collector Host\config.yaml리눅스:
/etc/nrdot-collector-host/config.yaml중요
기존 NRDOT Collector 사용자라면 위의 설정을 기존
config.yaml파일과 병합하십시오. 여기에는 현재 설정을 유지하면서 MSSQL 데이터베이스 모니터링을 위한 새로운 수신자, 프로세서 및 내보내기를 추가하는 작업이 포함됩니다.# 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]구성 매개변수
다음 표에서는
newrelicsqlserver수신자에 대한 주요 설정 초기화에 대해 설명합니다.매개변수
설명
<YOUR_DB_HOST>SQL Server 호스트명 또는 IP 주소를 입력하십시오.
<YOUR_DB_PORT>SQL Server 포트 번호를 입력하십시오. 기본값은 1433으로 설정되어 있습니다.
<USERNAME>인증을 위해 데이터베이스 사용자 이름을 입력하세요.
<PASSWORD>인증을 위해 데이터베이스 비밀번호를 입력하세요.
<YOUR_NEWRELIC_OTLP_ENDPOINT>뉴렐릭 OTLP 엔드포인트를 입력하세요. 자세한 내용은 뉴렐릭 OTLP 엔드포인트 문서를 참조하세요.
<YOUR_NEWRELIC_API_KEY>뉴렐릭 API 키를 입력하세요.
query_monitoring_response_time_threshold쿼리가 느리다고 간주되는 최소 응답 시간(밀리초)입니다. 기본값은
100ms로 설정되어 있습니다.
query_monitoring_count_threshold모니터링에 쿼리를 포함하기 위한 최소 실행 횟수입니다. 기본값은
30으로 설정되어 있습니다.
query_monitoring_fetch_interval쿼리 모니터링 데이터를 가져오는 간격(초). 기본값은
15초로 설정되어 있습니다.
collection_interval수집 간격(초). 기본값은
15s으로 설정되어 있습니다.
NRDOT 수집기 재시작
설정을 업데이트한 후 NRDOT 수집기 서비스를 다시 시작하십시오.
Windows에서 NRDOT Collector 서비스를 다시 시작하려면 다음 명령을 실행하십시오.
bash$net stop nrdot-collector-host$net start nrdot-collector-hostLinux에서 NRDOT Collector 서비스를 다시 시작하려면 다음 명령을 실행하십시오.
bash$sudo systemctl restart nrdot-collector-host팁
설정을 변경한 후에는 반드시 NRDOT 수집기 서비스를 다시 시작하여 새 설정이 적용되도록 하십시오.
(선택 사항) APM-데이터베이스 상관 관계 설정
애플리케이션 성능과 데이터베이스 작업 간의 상관관계를 파악하려면 데이터베이스 서비스 식별을 설정할 수 있습니다. 이를 통해 특정 데이터베이스워크로드 기능을 생성하는 기능을 정확하게 확인할 수 있습니다. 자세한 내용은 뉴렐릭에서 APM- 데이터베이스 상관 관계를 가져오기 위한 데이터베이스 서비스 식별 설정을 참조하세요.
중요
APM 에서 데이터베이스 성능 데이터를 보려면 두 가지 모두 동일한 뉴렐릭 계정에 있어야 합니다. 만약 데이터가 서로 다른 뉴럴릭 계정에 있다면, 데이터를 보려면 두 계정 모두에 접근 권한이 있어야 합니다.
(선택 사항) 비밀 관리 구성
비밀 관리 기능을 사용하면 데이터베이스 자격 증명과 같은 중요한 정보를 안전하게 관리할 수 있습니다. 이렇게 하면 구성 파일에 민감한 데이터를 하드코딩하는 것을 방지하여 모니터링 설정의 보안을 강화할 수 있습니다. 자세한 내용은 비밀 관리 부분 을 참조하십시오.
데이터 찾기 및 사용
데이터가 수집되면 뉴렐릭의 UI 통해 포괄적인 SQL Server 데이터베이스 모니터링에 액세스할 수 있습니다.
뉴렐릭에서 SQL Server 데이터베이스를 찾으려면 다음을 수행하세요.
- https://one.newrelic.com > All Capabilities > Databases 으)로 이동합니다.
- 검색 기준을
instrumentation.provider = opentelemetry으로 설정합니다. - 모임 목록에서 SQL Server 데이터베이스를 선택합니다.
NRDOT 수집기 지원 명령
NRDOT Collector 서비스를 관리하거나, 로그를 보거나, 서비스 상태를 확인하려면 운영 체제에 따라 다음 명령어를 사용하십시오.
문제점 해결
NRDOT Collector에서 네트워크 연결 문제가 발생하는 경우 다음 명령을 실행하여 1433번 포트의 SQL Server 인스턴스에 대한 연결을 테스트하십시오.
Windows의 경우 다음 명령을 실행하세요.
bash$Test-NetConnection -ComputerName <YOUR_IP_ADDRESS> -Port <YOUR_PORT_NUMBER>리눅스에서는 다음 명령을 실행하세요:
bash$nc -zv <YOUR_IP_ADDRESS> <YOUR_PORT_NUMBER>
사용 가능한 지표
설정 플래그로 구성된 지표로 SQL Server 데이터베이스 성능을 모니터링하세요. 뉴럴릭 UI 기능을 위해 기본 설정이 자동으로 수집됩니다. 제공된 추가 정보를 활용하여 특정 스크래퍼를 활성화하면 더욱 고급스럽고 심층적인 인사이트 정보를 얻을 수 있습니다.
기본 측정항목
이러한 지표는 뉴렐릭의 SQL Server 모니터링 기능에 필수적이며 설정에 관계없이 자동으로 수집됩니다.
추가 지표
SQL Server 데이터베이스 성능 및 상태에 대한 심층적인 인사이트를 위해 필요에 따라 이러한 추가 지표를 활성화합니다.
무엇 향후 계획
NRDOT을 사용하여 SQL Server 데이터베이스 모니터링을 설정한 후:
- 사용자 정의 대시보드를 만들어 데이터베이스 지표를 시각화하세요.
- 중요한 데이터베이스 성능에 대한 알림 설정, 참조 값
- 뉴렐릭의 쿼리 기능을 사용하여 데이터 탐색