グループ管理サービスアカウント(gMSA)を使用して、AWS RDS for SQL Serverインスタンスをモニターするために、Windows環境でNRDOT Collectorを使用してMicrosoft SQL Serverの監視を設定します。セルフホスト環境でモニターするには、Windowsセルフホスト計装を参照してください。
ガイド付きインストレーション
代わりにNew Relic UIからこれをインストールするには、one.newrelic.com > Integrations & Agents > Microsoft SQL Server (Database 360) に移動してください。画面上の指示に従って、インテグレーションをセットアップします。このページでは、手動インストレーションについてのみ説明します。
このページでは、gMSA認証について説明します。お使いの環境で別の認証方法を使用している場合は、SQL Server認証またはWindowsドメイン認証をご覧ください。
前提条件
gMSA認証を使用してNRDOTでMicrosoft SQL Serverを監視する前に、次のことを確認してください:
有効なライセンスキーを持つNew Relicアカウント。
ご利用のリージョンのNew Relic OTLPエンドポイントへのネットワーク接続。
SQL Serverの要件:
- Amazon RDS上のSQL Server 2017以降。
- RDSマスターユーザーの認証情報、または
rds_superuserロールを持つSQL Serverログインの認証情報。 - ポート
1433またはカスタムポートでの接続を許可するように構成されたRDSセキュリティグループ。 - SQL Server Management Studio(SSMS)または
sqlcmdユーティリティ。 - AWS Active Directoryサービスに関連付けられたRDSインスタンス。
RDS SQL ServerのエンドポイントURL。AWS RDSコンソールの「Connectivity & security」で確認できます。詳細については、AWS RDSのドキュメントを参照してください。
gMSAをサポートするActive Directory環境。
gMSAアカウントの使用を許可された、ドメインに参加しているWindows EC2インスタンス。
NRDOT Collectorをインストールする
PowerShellを使用してNRDOT Collectorをダウンロードし、インストールします:
[Net.ServicePointManager]::SecurityProtocol = 'tls12, tls'$NRDOT_VERSION = (Invoke-RestMethod -Uri "https://api.github.com/repos/newrelic/nrdot-collector-releases/releases/latest").tag_name$WebClient = New-Object System.Net.WebClient$WebClient.Headers.Add("User-Agent", "Mozilla/5.0")$WebClient.DownloadFile("https://github.com/newrelic/nrdot-collector-releases/releases/download/$NRDOT_VERSION/nrdot-collector_${NRDOT_VERSION}_windows_x64.msi", "$env:TEMP\nrdot-collector.msi")Start-Process msiexec.exe -ArgumentList "/i `"$env:TEMP\nrdot-collector.msi`" /qn /norestart /L*V `"$env:TEMP\nrdot_install.log`"" -WaitGet-Service nrdot-collector -ErrorAction SilentlyContinue監視ユーザーを作成する
管理者権限を持つSQL Server Management Studio(SSMS)またはsqlcmdを使用して、RDS SQL Serverインスタンスに接続します。
SQL Server Management Studio(SSMS)で次のスクリプトを実行し、gMSAアカウントのログインを作成して、必要な権限を付与します。<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>のすべての出現箇所を、実際のドメインとアカウント名に置き換えます。
USE [master];GO
CREATE LOGIN [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$] FROM WINDOWS;GO
GRANT VIEW ANY DATABASE TO [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$];GRANT VIEW SERVER STATE TO [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$];GRANT VIEW ANY DEFINITION TO [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$];GO-- Grant access to all databases DECLARE @name SYSNAME;DECLARE db_cursor CURSOR READ_ONLY FORWARD_ONLY FOR SELECT [name] FROM [master].[sys].[databases] WHERE [name] NOT IN ('master','msdb','model','rdsadmin','distribution') AND [state] = 0;OPEN db_cursor;FETCH NEXT FROM db_cursor INTO @name;WHILE @@FETCH_STATUS = 0BEGIN BEGIN TRY EXEC('USE [' + @name + ']; IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = ''<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$'') BEGIN CREATE USER [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$] FOR LOGIN [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$]; END; GRANT VIEW DATABASE STATE TO [<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$];'); END TRY BEGIN CATCH PRINT 'Error on ' + @name + ': ' + ERROR_MESSAGE(); END CATCH FETCH NEXT FROM db_cursor INTO @name;ENDCLOSE db_cursor;DEALLOCATE db_cursor;GOヒント
データベースの認証情報などの機密情報を安全に管理するには、シークレット管理ツールに保存してください。
gMSAアカウントとして実行する
PowerShellを使用して、gMSAアカウントとして実行するようにNRDOT Collectorサービスを設定します。<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$をドメインとgMSAアカウント名に置き換えます。gMSAアカウントには必須であるため、最後に$を含める必要があります:
# Stop the NRDOT Collector serviceStop-Service nrdot-collector
# Configure service to use gMSA account# Use cmd /c to avoid PowerShell treating $ as a variablecmd /c 'sc config nrdot-collector obj= "<YOUR_DOMAIN>\<YOUR_GMSA_USERNAME>$" password= ""'
# Verify the configurationGet-WmiObject Win32_Service -Filter "Name='nrdot-collector'" | Select Name, StartName
# Start the NRDOT Collector service Start-Service nrdot-collector重要
gMSAアカウントはパスワードを必要としません。サービスを設定する際は、空のままにしてください。
NRDOT Collectorを構成する
アドミニストレーターとしてPowerShellで
mssql-config.yamlという名前の設定ファイルを作成してください:New-Item -Path "C:\Program Files\nrdot-collector\mssql-config.yaml" -ItemType File前の手順で作成した
mssql-config.yamlファイルに以下の設定を追加します:
完全な設定
この設定は、RDS環境の基本的なデータベース監視に焦点を当てています。利用可能なすべてのメトリクスを使用して包括的な監視を有効にするには、設定リファレンスを参照してください。
1receivers:2nrsqlserver:3 collection_interval: 15s4 datasource: "server=mydb-instance.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com;port=1433;integrated security=true;encrypt=true;TrustServerCertificate=true;"5
6 # Enable comprehensive database metrics7 metrics:8 sqlserver.database.count:9 enabled: true10 sqlserver.database.io:11 enabled: true12 sqlserver.database.latency:13 enabled: true14 sqlserver.database.operations:15 enabled: true16 sqlserver.database.tempdb.space:17 enabled: true18 sqlserver.database.tempdb.version_store.size:19 enabled: true20 sqlserver.deadlock.rate:21 enabled: true22 sqlserver.os.wait.duration:23 enabled: true24 sqlserver.processes.blocked:25 enabled: true26 sqlserver.memory.grants.pending.count:27 enabled: true28 sqlserver.database.file.size:29 enabled: true30 sqlserver.memory.area:31 enabled: true32
33 # Enable query sample, top query, query plan, and top procedure log collection34 events:35 db.server.query_sample:36 enabled: true37 db.server.top_query:38 enabled: true39 db.server.query_plan:40 enabled: true41 db.server.top_procedure: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 collect_full_query_text: true51 allowed_comment_keys:52 - nr_service_guid53
54 # Query sample collection configuration55 query_sample_collection:56 max_rows_per_query: 10057 collect_full_query_text: true58 allowed_comment_keys:59 - nr_service_guid60
61 # Top stored procedure collection configuration62 top_procedure_collection:63 max_procedure_sample_count: 100064 top_procedure_count: 25065 collection_interval: 60s66
67 resource_attributes:68 db.system.version:69 enabled: true70 sqlserver.db.edition:71 enabled: true72
73processors:74memory_limiter:75 check_interval: ${env:NR_MEM_LIMITER_CHECK_INTERVAL:-1s}76 limit_mib: ${env:NR_MEM_LIMITER_LIMIT_MIB:-200}77 spike_limit_mib: ${env:NR_MEM_LIMITER_SPIKE_MIB:-50}78
79exporters:80otlp:81 endpoint: https://otlp.nr-data.net:431882 headers:83 api-key: YOUR_LICENSE_KEY84 tls:85 insecure: false86 compression: gzip87
88 sending_queue:89 enabled: true90 sizer: bytes91 queue_size: 100_000_00092 num_consumers: 1093 batch:94 sizer: bytes95 max_size: 1_000_00096 min_size: 097 flush_timeout: 5s98
99service:100telemetry:101 metrics:102 level: none103
104pipelines:105 metrics:106 receivers: [nrsqlserver]107 processors: [memory_limiter]108 exporters: [otlp]109
110 logs:111 receivers: [nrsqlserver]112 processors: [memory_limiter]113 exporters: [otlp]ヒント
logsパイプラインは、コレクターのデバッグログや内部エージェントのログを転送しません。クエリテキスト、実行プラン、およびサンプルデータを含む、SQL Serverのクエリテレメトリーを送信します。nrsqlserverレシーバーは、OpenTelemetryのログレコードとして出力されるdb.server.query_sample、db.server.top_query、db.server.query_plan、およびdb.server.top_procedureイベントを通じて、このテレメトリーをキャプチャします。db.server.top_procedureイベントには、sys.dm_exec_procedure_stats.total_spillsのサポートが導入された SQL Server 2017 CU3 以降が必要です。以前のバージョンでは、このイベントはデータを出力せず、エラーをログに記録します。他のイベントは影響を受けません。sys.dm_exec_procedure_statsにアクセスするには、VIEW SERVER STATE(または SQL Server のバージョンによってはVIEW SERVER PERFORMANCE STATE)が必要です。さらに、すべてのユーザーデータベースでOBJECT_NAMEとOBJECT_SCHEMA_NAMEを正しく解決するにはVIEW ANY DEFINITIONが必要であり、初期セッションを設定するにはCONNECT SQLが必要です。監視ユーザーの作成で作成された gMSA ログインは、すでに3つの権限すべてを持っています。
Windowsサービスレジストリの更新
次のいずれかの方法を使用して、新しい
mssql-config.yamlファイルを使用するようにWindowsサービスレジストリを更新します:PowerShellの場合:アドミニストレーターとして次のコマンドを実行します:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\nrdot-collector" -Name "ImagePath" -Value '"C:\Program Files\nrdot-collector\nrdot-collector.exe" --config "C:\Program Files\nrdot-collector\mssql-config.yaml"'コマンドプロンプトの場合:PowerShellが利用できない場合は、代わりにコマンドプロンプトを使用し、アドミニストレーターとして次のコマンドを実行します:
bash$sc config "nrdot-collector" binPath= "\"C:\Program Files\nrdot-collector\nrdot-collector.exe\" --config \"C:\Program Files\nrdot-collector\mssql-config.yaml\""NRDOT Collectorの設定を検証して、正しくフォーマットされ、適切に機能することを確認します:
$& "C:\Program Files\nrdot-collector\nrdot-collector.exe" validate --config="C:\Program Files\nrdot-collector\mssql-config.yaml"ヒント
アプリケーションパフォーマンスをデータベース操作と関連付けるには、データベースサービス識別を設定できます。詳細については、データベースサービス識別の設定を参照してください。
NRDOT Collectorを再起動します
設定を更新した後、ドメインに参加しているEC2 WindowsインスタンスでNRDOT Collectorサービスを再起動します:
$net stop nrdot-collector$net start nrdot-collectorWindowsサービス(services.msc)を確認して、サービスがgMSAアカウントで実行されていることを検証します。Log On As列には、gMSAアカウント(たとえばCORP\SQL-gMSA$)が表示されます。
データを探す、使う
データの収集が開始されると、New Relic UIを通じて包括的なSQL Serverデータベース監視にアクセスできます。
New Relic で SQL Server データベース エンティティを見つけるには:
https://one.newrelic.com > All Capabilities > Databasesに移動します。
Entity typeドロップダウンからMSSQL instanceを選択し、Applyをクリックします。
エンティティのリストから SQL Server データベースを選択します。
NRDOTを使用してSQL Serverの監視をセットアップした後、次のことができます:
- データベースのメトリクスを視覚化するカスタムダッシュボードを作成する
- クリティカルデータベースパフォーマンス閾値のアラートを設定する
- New Relicのクエリ機能を使用して、データを探索します