New Relicでは、 New Relic Distribution of OpenTelemetry (NRDOT) とNew Relic Relic のデータベース監視機能を使用して、チームが Microsoft SQL Server データベースのパフォーマンスを監視できるようになりました。 この統合により、NRDOT コレクターを使用して、包括的なインサイトをデータベース メトリクス、書き込みパフォーマンス、およびシステムの状態に提供します。
この NRDOT ベースのアプローチは、データベース監視のOpenTelemetry標準を活用することで既存のオンホスト インテグレーション (OHI) を補完し、既存の監視スタックとの統合を容易にします。
前提条件
始める前に、次のものがあることを確認してください。
有効なNew Relicライセンスキー
サポートされているデータベースのバージョン: 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 システム
- New Relicの OTLP エンドポイントへのネットワーク接続
Microsoft SQL Server 監視用の NRDOT Collector を設定する
NRDOT コレクターを使用して、Microsoft SQL Server データベースを監視できます。 NRDOT コレクターは、New Relic 固有のコンポーネントを含む事前構成済みのディストリビューションです。
NRDOT Collector をインストールして構成するには、次の手順に従います。
NRDOT Collectorセットアップ
お使いの OS とアーキテクチャーに基づいてコレクターをインストールします。
重要
パフォーマンス監視のためにインフラレベルのメトリクスを表示するには、SQL Server インスタンスと同じホストに NRDOT Collectorインストールすることをお勧めします。
データベースユーザーを構成する
次のスクリプトをroot user/sysadminとして実行して、 newrelic監視ユーザーを作成し、グローバル読み取り権限を付与します。
NRDOT Collectorを構成する
config.yamlを以下の内容に置き換えます。
ウィンドウズ:
C:\Program Files (x86)\NRDOT Collector Host\config.yamlLinux:
/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>New Relic OTLP エンドポイントを入力します。詳細については、 New Relic OTLP エンドポイントのドキュメントを参照してください。
<YOUR_NEWRELIC_API_KEY>New Relic APIキーを入力します。
query_monitoring_response_time_threshold書き込みが遅いとみなすための最小応答時間 (ミリ秒)。 デフォルト値は
100ミリ秒に設定されています。
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とデータベースの相関関係を設定する
アプリケーションのパフォーマンスをデータベース操作と関連付けるために、データベース サービス ID を設定できます。 この機能を使用すると、特定のデータベース ワークロードを生成しているアプリケーションを正確に確認できます。詳細については、「 New RelicでAPMとデータベースの相関関係を取得するためのデータベース サービス ID のセットアップ」を参照してください。
重要
APM でデータベース パフォーマンス データを表示するには、両方のエンティティが同じ New Relic アカウント内にある必要があります。エンティティが異なる New Relic アカウントにある場合、データを表示するには両方のアカウントにアクセスできる必要があります。
(オプション)シークレット管理を構成する
シークレット管理機能を使用すると、データベース資格情報などの機密情報を安全に管理できます。これにより、構成ファイルに機密データをハードコーディングすることを避け、監視設定のセキュリティを強化できます。詳細については、シークレット管理を参照してください。
データを探す、使う
データが収集されると、New Relic の UI を通じて包括的な SQL Server データベース監視にアクセスできるようになります。
New Relic で SQL Server データベース エンティティを見つけるには:
- https://one.newrelic.com > All Capabilities > Databasesに移動します。
- 検索条件を
instrumentation.provider = opentelemetryに設定します。 - エンティティのリストから SQL Server データベースを選択します。
NRDOT コレクターがサポートするコマンド
NRDOT Collectorサービスを管理したり、ログを表示したり、サービスのステータスを確認したりするには、OS に基づいて次のコマンドを使用します。
トラブルシューティング
NRDOT Collector でネットワーク接続の問題が発生した場合は、次のコマンドを実行して、ポート 1433 上の SQL Server インスタンスへの接続をテストします。
Windows の場合は、次を実行します。
bash$Test-NetConnection -ComputerName <YOUR_IP_ADDRESS> -Port <YOUR_PORT_NUMBER>Linux の場合は、次を実行します。
bash$nc -zv <YOUR_IP_ADDRESS> <YOUR_PORT_NUMBER>
利用可能なメトリクス
設定フラグごとに整理されたメトリクスを使用して、SQL Server データベースのパフォーマンスを監視します。 デフォルトのメトリクスは、 New Relic UI機能のために自動的に収集されます。 特定のスクレイパーを有効にすると、提供される追加のメトリクスを使用して、高度でより深いインサイトを取得することもできます。
デフォルトのメトリクス
これらのメトリクスはNew Relicの SQL Server 監視機能に不可欠であり、設定に関係なく自動的に収集されます。
追加のメトリクス
インサイトを SQL Server データベースのパフォーマンスと健全性にさらに深くするために、必要に応じてこれらの追加のメトリクスを有効にします。
次のステップ
NRDOT を使用して SQL Server データベース監視を設定した後:
- データベースのメトリクスを視覚化するカスタムダッシュボードを作成する
- クリティカルデータベースパフォーマンス閾値のアラートを設定する
- New Relicのクエリ機能を使用してデータを探索する