Microsoft SQLServerの監視

最終更新日: 11 年 2023 月 XNUMX 日

LogicMonitorは、Windows、Linux、Dockerコンテナーで実行されているか、Azureでホストされているかに関係なく、Microsoft SQLServerデータベースインフラストラクチャを監視する準備ができています。

LogicMonitorのSQL サーバー 主に SQL データベース クエリを使用して、内部 SQL 監視テーブルをポーリングします。 接続は、Windows 認証または SQL Server 認証を使用して JDBC 接続文字列を介して行われます。

注: LogicMonitorは、SQLServer上のWindowsServerフェールオーバークラスター(WSFC)を監視できます。 見る Windows Serverフェールオーバークラスター(SQL Server上)の監視 SQLServerモニタリングとWSFCモニタリングを並行して使用する方法の詳細については。

要件

  • WMI (Windows 上の SQL Server 用)。 LogicMonitor は、WMI プロトコルを使用して、自動化された SQL 名前付きインスタンスの検出と SQL サービス (ブラウザ、レポート サービス、エージェントなど) の検出を行います。
  • SNMP (Linux 上の SQL Server 用)。 LogicMonitor は、SQL Server の自動検出に SNMP プロトコルを使用します。
  • LogicMonitor の Microsoft SQL Server パッケージは、Windows または SQL Server 認証を使用して、SQL Server 2005 ~ 2022 と互換性があります。

注: SQL Serverには多くの潜在的な構成があるため、LogicMonitorはすべての環境ですぐに使用できる互換性を提供できない場合があります。 ソリューションのいくつかの側面を手動で構成する必要がある場合があります。

モニタリングへのリソースの追加

SQLServerホストを監視に追加します。 監視にリソースを追加する方法の詳細については、を参照してください。 デバイスの追加.

Credentials

LogicMonitorは、SQL Serverの各インスタンスに正常にアクセスするために、適切な資格情報を提供できる必要があります。 これらの資格情報は、次の最小SQLServerアクセス​​許可を持つユーザーアカウントに属している必要があります。

/* make sure to put your complete username in the form of DOMAIN\USERNAME
If the user already exists for a database there will be errors displayed.  These can be ignored
*/
DECLARE @username VARCHAR(100)
 
--Enter username here
select @username = '<MonitorUserName>'
 
DECLARE @dbname VARCHAR(50)  
DECLARE @statement NVARCHAR(max)
Use master;
SELECT @statement = 'CREATE USER ['+@username+'] FOR LOGIN ['+@username+'];
GRANT VIEW ANY DEFINITION TO ['+@username+'];
GRANT VIEW SERVER STATE TO ['+ @username+'];
GRANT VIEW ANY DATABASE TO ['+ @username + '];
USE MSDB;
CREATE USER ['+ @username + '] FOR LOGIN ['+ @username + '];
GRANT SELECT ON SYSJOBS TO ['+ @username + '];
GRANT SELECT ON SYSJOBHISTORY TO ['+ @username + '];
GRANT SELECT ON SYSJOBACTIVITY TO ['+ @username + '];'
exec sp_executesql @statement
 
/* this section will create access for Microsoft_SQLServer_Storage datasource only. 
Not needed if not using this module.
*/
 
DECLARE db_cursor CURSOR
LOCAL FAST_FORWARD
FOR 
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb','distribution') -- ignore system databases
OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @dbname 
WHILE @@FETCH_STATUS = 0 
BEGIN 
SELECT @statement = 'use ['+@dbname +'];'+ 'CREATE USER ['+@username+']
FOR LOGIN ['+@username+']; '
exec sp_executesql @statement
FETCH NEXT FROM db_cursor INTO @dbname 
END 
CLOSE db_cursor 
DEALLOCATE db_cursor

推奨事項: システム管理者権限を持つユーザーアカウントを監視に使用しないでください。

次に説明するように、LogicMonitorがSQL Serverとの接続に使用するユーザーアカウントは、SQL Serverが実行されているオペレーティングシステムに応じて、WindowsまたはSQLServerのいずれかによって認証されます。

統合セキュリティ(Windows)

デフォルトでは、LogicMonitorは統合セキュリティが使用されていると想定し、SQL認証ではなくWindows認証を使用してSQLServerへの接続を試みます。 LogicMonitorは、コレクターのユーザーに関連付けられているWindows資格情報を使用します。 したがって、コレクターのユーザーには、前述の最小限のSQLServerアクセス​​許可が必要です。 Collectorに関連付けられているユーザーを、統合セキュリティを備えた代替ユーザーに更新する方法はありません。

統合セキュリティが構成されていない場合は、次のセクションで説明するように、JDBC資格情報を介して接続を許可できます。 それ以外の場合、JDBC資格情報は、コレクターのプロパティとして存在する場合でも無視されます。

条件付き要件:

  • SQL Server ブラウザー サービス。 ポートを指定しなくても、コレクタが SQL Server インスタンスと通信できるようにします。 これは、次の条件のいずれかが存在する場合にのみ必要です。
    • SQL Serverインスタンスは非標準ポート(デフォルトの1434以外のポート)でリッスンしており、を使用してこれらのポートを定義しないことを選択しました。 jdbc.mssql.ポート プロパティ(このプロパティについては、以下で説明します リソースへのプロパティの割り当て このサポート記事のセクション)。
    • SQL Serverインスタンスは、動的ポートでリッスンするように設定されています。

JDBCクレデンシャル

Azure、Docker、またはLinux(または統合セキュリティが利用できない場合はWindows)での直接SQL認証には、JDBCクレデンシャルが必要です。 これらの資格情報はプロパティとして構成されます(jdbc.mssql.user & jdbc.mssql.pass)ホスト上。 個々のSQLインスタンスに異なる認証がある場合は、 mssql。 。ユーザー & mssql。 。パス 代わりにプロパティが使用されます。 SQL Serverホストでの割り当てに使用できるこれらのプロパティおよびその他のプロパティの詳細については、このサポート記事の次のセクションを参照してください。

SQLServerリソースへのプロパティの割り当て

次のプロパティは、LogicMonitor内のSQLServerリソースに設定できます。 LogicMonitorは、SQLServerの構成に必要なすべてのプロパティの自動検出に努めています。 ただし、プロパティを手動で入力したり、自動検出されたプロパティを上書きしたりする必要があるユースケースがあります。 プロパティの割り当ての詳細については、を参照してください。 リソースとインスタンスのプロパティ.

プロパティ説明必須?
mssql.onlyAlwaysOnデータベース複数のリスナーを持つリソースを AlwaysOn 可用性グループとして識別するには、true に設定します。 デフォルトは false です。オプション
jdbc.mssql.user

jdbc.mssql.pass
SQLServerのユーザー名とパスワード。 これをWindowsユーザーアカウントにすることはできません。 このアカウントには、前に説明した最小限のSQLServerアクセス​​許可が必要です。 資格情報を提供する このサポート記事のセクション。サーバーインスタンスごとに一意の認証を必要としないLinux、Azure、およびDockerオペレーティングシステムに必要です(インスタンスごとの認証が必要な場合は、 mssql。 。ユーザー & mssql。 。パス 代わりにプロパティ)。 (統合セキュリティが構成されていない場合はWindowsオペレーティングシステムに必要です。統合セキュリティが構成されている場合、ここに入力した値はそれを上書きします。)
jdbc.mssql.ポートSQLServerで使用されるポート番号。 複数のポートはコンマで指定する必要があります(たとえば、「1434、2266、51000」)。Dockerコンテナがインスタンスの検出として使用される場合は、Dockerのすべてのポートを含むこのプロパティに依存する必要があります。 他のオペレーティングシステムの場合、SQLブラウザが実行されていると、接続文字列にポートが自動的に割り当てられます。 SQLブラウザが実行されておらず、このプロパティにポートが指定されていない場合、デフォルトのUDPポートである1434が使用されます。
auto.sql_server_instances
or
mssql.sql_server_instances
SQL Serverインスタンス名が自動的に検出された場合、それらは「自動」に割り当てられます。 プロパティのバージョン。 インスタンス名を手動で割り当てる必要がある場合は、「mssql」を使用してください。 プロパティのバージョン。 手動で割り当てられたインスタンス値(に割り当てられたインスタンス値 mssql.sql_server_instances)自動的に割り当てられたもの(に割り当てられたもの)を上書きします auto.sql_server_instances)。 複数のインスタンス名はコンマで区切る必要があります(たとえば、「MSSQLServer、Inventory、Finance」)。 このプロパティは、LinuxおよびDockerインスタンスには無効です。 これらのインスタンスは、名前ではなくポートを使用します。必須
自動。 .mssql_url
or
mssql。 .mssql_url
インスタンスのJDBC接続文字列。 SQL ServerインスタンスのJDBC文字列が自動的に検出されると、それらは「自動」に割り当てられます。 プロパティのバージョン。 URLを手動で割り当てる必要がある場合は、「mssql」を使用してください。 プロパティのバージョン。 手動で割り当てられたインスタンス値は、自動的に割り当てられたインスタンス値を上書きします。 JDBC接続文字列は、次のようにフォーマットする必要があります。 jdbc:sqlserver:// [serverName [\ instanceName] [:portNumber]] [; property = value [; property = value]]。 見る Microsoftのドキュメンテーションシステム JDBC接続文字列の構築の詳細については。必須
mssql。 。ユーザー

mssql。 。パス
SQL Serverインスタンスごとに一意の認証が必要な場合は、これらのプロパティを使用して、インスタンスごとに資格情報を割り当てます。オプション
mssql。 。ポート個々のインスタンスに異なるポートが使用されている場合は、このプロパティを使用して、インスタンスごとにポートを割り当てますオプション
mssql.deletenamesデフォルトでは、インスタンスの履歴を保持するために、古いインスタンス名は削除されません。 設定 mssql.deletenames 〜へ true 使用されなくなった SQL サーバー インスタンスを削除する場合。 

このプロパティを次のように設定する true 次に、プロパティソースを実行します Microsoft_SQLServer_Connections 古いインスタンスをクリーンアップします。 インスタンスがクリーンアップされた後、プロパティを削除します。
オプション
auto.sql_browser_runningLogicMonitorは、SQLブラウザーの存在を確認し、TRUEまたはFALSEの値を自動的に割り当てます。オプション
mssql.integrated_securityPropertySourcesがWindows認証とSQL認証のどちらを使用するかを動的に決定するのを防ぎます。 このプロパティは手動でTRUEまたはFALSEに設定されます。 TRUEの値は、Windows認証のみを使用するようにLogicMonitorに指示します。 値がFALSEの場合、SQL認証のみを使用するようにLogicMonitorに指示します。 このプロパティが使用されていない場合、自動検出は両方の認証方法を試行します。オプション
システム カテゴリIf システム カテゴリ 「MSSQL」が含まれている場合、リソースはSQL Serverと見なされ、適切なデータソースが適用されます。 通常、この値はによって自動割り当てされます addCategory_MSSQL PropertySource。 そうでない場合は、手動で割り当てる必要があります。必須

最新のLogicModuleへの移行

2020年XNUMX月、LogicMonitorのSQL Serverパッケージは、パフォーマンスを向上させ、コレクターとSQLServerの負荷への影響を少なくするための重要な更新を受け取りました。 これらの更新の結果、一部のデータソースは新しい名前で新しいインスタンスを作成する場合があります。 これは、不適合なインスタンス名を作成していた以前のDataSourceバージョンへの修正の結果です。 新しいインスタンスが作成されると、古いインスタンスはデータを収集しなくなりますが、履歴の目的で(手動で削除するまで)その場所に残ります。

さらに、次のデータソースは非推奨になりました。

  • Microsoft_SQLServer_AgentJobs。 このデータソースはに置き換えられました Microsoft_SQLServer_SystemJobs、同じデータをキャプチャします。
  • WinSQLServer-。 このデータソースはに置き換えられました Microsoft_SQLServer_GlobalPerformance、同じデータをキャプチャします。
  • WinSQLServerConnection-。 接続のラウンドトリップ時間を報告するために使用されますが、このデータはほとんど役に立たないことがわかっています。

トラブルシューティング:パフォーマンスカウンターがありません

SQL Serverパフォーマンスオブジェクトとカウンターは、インストールの一部として自動的にインストールされます。 これらのオブジェクトとカウンターが欠落している場合は、インストールプロセスでエラーが発生し、カウンターが正しくインストールされなかった可能性があります。

障害が発生したかどうかを確認する最も確実な方法は、 エラー:3409 SQLセットアップログにあります。

カウンターをリセットするには、次の手順を実行します。

  1. を実行してカウンターをアンロードします unlodctr mssql $ 実行コマンドから。
  2. パフォーマンスカウンターが配置されているファイルパスを特定します。 デフォルトのパスは HKLMSYSTEMServicesCurrentcontrolsetServicesMSSQL $ Performance.
  3. を実行してカウンターをリロードします LODCTR 実行コマンドから。

追加のパフォーマンスカウンターのトラブルシューティングは、にあります。 Microsoftのドキュメンテーションシステム.

パッケージ内のLogicModules

SQL Server 用の LogicMonitor パッケージは、次の LogicModule で構成されます。

推奨事項: 完全にカバーするには、すべての LogicModule を LogicMonitor プラットフォームにインポートします。

お名前 説明
addCategory_MSSQLプロパティソースSQLServerを実行していると識別されたリソースのsystem.categoriesプロパティに値として「MSSQL」を追加します。 検証を試みません。

モジュールが仮想ネットワーク名 (VNN) リソースに対して実行されるときに、AlwaysOn リスナー名が自動的に検索されます。 このモジュールは、PowerShell を使用して MSFT 固有のクラスター コマンドを実行し、クラスター内のノードを識別し、リスナー名を識別します。
Microsoft_SQLServer_ConnectionsプロパティソースSQL Server のインスタンス名を検索し、すべてのデータソースが接続に使用する JDBC 接続文字列を作成します。 SQL Server のバージョンとエディションをデバイスに追加します。
Microsoft_SQLServer_SQLAuthConnectionsプロパティソースSQL認証を使用してSQLServerに接続するためにすべてのデータソースで使用されるJDBC接続文字列を作成します。
Azure_SQLServer_JDBCデータソースAzure SQLServerのグローバルパフォーマンスメトリックを監視します。
Microsoft_SQLServer_AlwaysOnAvailabilityGroupsデータソースSQLServerのAlwaysON可用性グループのパフォーマンスメトリックを監視します。
Microsoft_SQLServer_AlwaysOnDatabaseReplicaClusterデータソースクラスター全体のSQLServerデータベースレプリカのフェイルオーバー準備完了状態、データベース参加状態、および保留中の一時停止を監視します。
Microsoft_SQLServer_AlwaysOnDatabaseレプリカデータソースSQL Server AlwaysOnデータベースレプリカの動作状態、同期の状態と状態、ログアクティビティ、スループット、送信、およびキューサイズを監視します。
Microsoft_SQLServer_AlwaysOnAvailabilityReplicasデータソースSQL Server AlwaysOnローカル可用性レプリカの動作、接続、回復、および同期の状態を監視します。
Microsoft_SQLServer_BackupAgeデータソース最後のフル バックアップまたはログ バックアップからの時間数。 バックアップ期間の要件が異なるため、アラートはありません。
Microsoft_SQLServer_ConnectionStatusデータソースコレクターが SQL データベースに接続できるかどうかをチェックします。 select ステートメントの往復時間を報告します。 
Microsoft_SQLServer_DatabaseFilesデータソースバイトに変換された各データベースで使用されるスペースの量。 影響の大きい SQL コマンドを使用し、XNUMX 時間に XNUMX 回以上実行しないでください。
Microsoft_SQLServer_データベースデータソースSQL Serverで見つかったデータベースごとに、アクティブなセッション、ログ操作、スループット、キャッシュ、待機時間、ファイル/ログサイズなどを監視します。
Microsoft_SQLServer_DatabaseStorageデータソースデータベースのストレージ統計。 監視ユーザーには PUBLIC 権限が必要です。 この権限は、新しいデータベースに自動的に割り当てることはできません。
Microsoft_SQLServer_GlobalPerformanceデータソースSQLServerインスタンスのグローバルパフォーマンスメトリックを監視します。
Microsoft_SQLServer_MonitorUserデータソースLM 監視ユーザーが SQL インスタンスで保持しているアクティブ セッションと非アクティブ セッションの数を表示します。 監視ユーザーが開いている接続が多すぎる場合に警告します。
Microsoft_SQLServer_SystemJobsデータソースSQLServer上のすべてのシステムジョブを監視します。
Microsoft_SQLServer_トラブルシューティングデータソース少数のMicrosoftSQLクエリを実行して、すべてのメトリックを取得するための適切なアクセス許可が構成されていることを確認します。
WinSQLサービス -データソース実行中のSQLサービスのすべてのステータスを表示します。 SQLエージェントなどのサービスのXNUMXつがダウンした場合に、アラートを構成できます。
Microsoft_SQLServer_DatabaseNames構成ソースデータベースが作成、削除、または名前変更されたときに警告します

AlwaysOn の可用性

AlwaysOn 可用性グループは SQL クラスターを使用し、Windows クラスター仮想ネットワーク名 (VNN) で SQL リスナーを使用する必要があります。

デフォルトでは、AlwaysOn モジュールは XNUMX つのリスナーを使用します。 リスナーが XNUMX つだけ存在する場合、データソースはリスナーのアクティブ ノード上のシステム データベースを監視し、リスナーに割り当てられていない現在アクティブ ノード上のデータベースを監視します。 複数のリスナーがある状況では、リソース プロパティ mssql.onlyAlwaysOnDatabases=true VNN リソースに設定する必要があります。 このリソースが設定されている場合、リスナーに割り当てられている AvailabilityGroup 内のデータベースのみが監視されます。 システム データベースおよび AvailabiltyGroup に割り当てられていないデータベースは監視されません。

接続ステータス

  Microsoft_SQLServer_ConnectionStatus DataSource は、コレクターから SQL Server データベースへの接続を確認するために使用されます。 デフォルトでは、DataSource は警告を発する前に、次の動作を使用して SQL Server データベースへの接続を XNUMX 回試行します。

  • 最初の試行は失敗します。DataSource は XNUMX 秒待ってから再接続を試行します。
  • 12 回目の試行は失敗します。DataSource は XNUMX 秒待ってから再接続を試行します。
  • XNUMX 回目の試行は失敗します。DataSource はアラートを送信します。

ConnectionStatus プロパティを使用して、試行回数と試行間の時間を設定できます。 DataSource がタイムアウトに達したり、収集間隔を超過したりしないようにするには、次の時間制約に留意してください。

  • 収集間隔は 60 秒でタイムアウトになります。

推奨事項: 再試行は収集間隔内に抑えてください。

  • DataSource のタイムアウトはデフォルトで 180 秒ですが、コレクタのプロパティで変更できます。

推奨事項: 接続が遅く信頼性が低い場合は、収集間隔を XNUMX 分以上に変更します。 ほとんどのサーバーでは、デフォルトの収集間隔で十分です。

データベースへの接続が成功すると、DataSource は select ステートメントを実行します。 SELECT getdate() systemDate として返され、返された行数と実行時間をレポートします。 この選択ステートメントは、デバイス プロパティでオーバーライドできます。 プロパティは次の形式です。 mssql.propertyName or mssql.instance.propertyName。 いつ mssql.instance.propertyName を使用すると、プロパティは特定の SQL インスタンス名に使用されます。 インスタンスが指定されていない場合、DataSource はデバイス上の各 SQL インスタンスに同じプロパティを使用します。

接続ステータスのプロパティ

プロパティ名説明デフォルト
mssql.sqltest

or

mssql.instance.sqltest
接続テストが実行されるたびに実行される SQL ステートメント。 の jdbc.mssql.user ステートメントが成功するには、このテーブルにアクセスできる必要があります。SELECT からの名前 master.sys.server_principalsSELECT getdate() as systemDate
mssql.max_retries

or

mssql.instance.max_retries
アラートを生成するまでの再試行回数。 この数値を高く設定しすぎると、DataSource タイムアウトが発生し、アラートが送信されなくなる可能性があります。
組み合わせ max_retries & wait_time
 180 秒未満にする必要があります。
53
mssql.wait_time

or

mssql.instance.wait_time
最初の試行の待機時間 (秒)。 その後の試行は wait_time * retrycount. この数値を高く設定しすぎると、コレクターのタイムアウトが発生したり、アラートを見逃したりする可能性があります。23

サンプルセットアップ

記事上で