PDF

NetCrunch における Telegraf 経由の SQL Server Monitoring

このトピックでは、Telegraf を構成して Microsoft SQL Server のメトリックを収集し、JSON ベースのテレメトリデータを使用して NetCrunch Telemetry Node エンドポイントに転送する方法について説明します。SQL Server のログイン設定、接続文字列、Telegraf の入力構成、およびサポートされるメトリックタイプについて説明します。

概要

Telegraf は SQL Server input plugin を介して SQL Server のメトリックを収集します。この plugin は、SQL Server が提供する Dynamic Management Views を使用してパフォーマンスメトリックを収集します。収集されたメトリックは、HTTP output plugin を使用して NetCrunch Telemetry Node に送信されます。

サポートされる環境は次のとおりです。

  • SQL Server on premises
  • Azure SQL Database
  • Azure SQL Managed Instance
  • Azure SQL Elastic Pool
  • 1 台のホスト上にある複数の SQL Server インスタンス

NetCrunch による SQL Server Telemetry のサポート

NetCrunch は、Telemetry Node エンドポイントを介して受信した SQL Server メトリックを受け取ります。Telemetry Node は JSON データを受け入れ、受信した値をカウンターまたはアラートステータスとして保存します。

エンドポイント、その URL 形式、および認証方法については、 Monitoring with Telegraf で一度説明しています。以下では、Telemetry Node がすでに存在することを前提とします — テレメトリノード を参照してください。

データフロー

  1. SQL Server が Dynamic Management Views (DMVs) を介してクエリされます。
  2. Telegraf が返されたメトリックを収集します。
  3. Telegraf が HTTP POST を使用して、JSON データを NetCrunch Telemetry Node エンドポイントに送信します。
  4. NetCrunch が値をカウンターまたはステータスオブジェクトとして保存します。

SQL Server の構成

Monitoring Login の作成

Telegraf に必要な権限を持つ専用のログインを作成します。

SQL Server on premises

USE master; GO CREATE LOGIN [telegraf] WITH PASSWORD = N'StrongPassword123!'; GO GRANT VIEW SERVER STATE TO [telegraf]; GO GRANT VIEW ANY DEFINITION TO [telegraf]; GO

Azure SQL Database

CREATE USER [telegraf] WITH PASSWORD = N'StrongPassword123!'; GO GRANT VIEW DATABASE STATE TO [telegraf]; GO

Windows Authentication on premises

まず、service SID を有効にします。

sc.exe sidtype "telegraf" unrestricted

次に、ログインを作成します。

USE master; GO CREATE LOGIN [NT SERVICE\telegraf] FROM WINDOWS; GO GRANT VIEW SERVER STATE TO [NT SERVICE\telegraf]; GO GRANT VIEW ANY DEFINITION TO [NT SERVICE\telegraf]; GO

Telegraf の構成

Telegraf の構成ファイル:

  • Linux: /etc/telegraf/telegraf.conf
  • Windows: C:\Program Files\Telegraf\telegraf.conf

基本構成

[agent] interval = "30s" flush_interval = "30s" metric_buffer_limit = 10000 debug = false quiet = false

[[inputs.sqlserver]] servers = [ "Server=127.0.0.1;Port=1433;User Id=telegraf;Password=StrongPassword123!;app name=telegraf;" ] database_type = "SQLServer"

[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor01@node100/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"

構成パラメーター

Agent Section

  • interval は、メトリックを収集する頻度を制御します
  • flush_interval は、ペイロードを outputs に送信する頻度を制御します
  • metric_buffer_limit は、送信されていないデータを保存する上限を定義します
  • debug は詳細なログ記録を有効にします
  • quiet はエラー以外の出力を抑制します

SQL Server Input

  • servers には接続文字列が含まれます
  • database_type は SQL 環境の種類を選択します
  • query_timeout はクエリ実行のタイムアウトを制御します
  • include_query はクエリセットを選択した名前に限定します
  • exclude_query は選択したクエリをスキップします

HTTP Output

  • url は Telemetry Node エンドポイントを指します
  • method は POST である必要があります
  • data_format は json である必要があります
  • headers は HTTP コンテンツヘッダーを定義します

複数インスタンスの監視

複数の SQL Server インスタンスを監視するには、複数の接続文字列を構成します。

[agent] interval = "30s" flush_interval = "30s" debug = false

[[inputs.sqlserver]] servers = [ "Server=127.0.0.1,1433;User Id=telegraf;Password=StrongPassword123!;", "Server=127.0.0.1,1434;User Id=telegraf;Password=StrongPassword123!;" ] database_type = "SQLServer"

[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor01@node100/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"

この構成では、異なるポート上にある 2 つのインスタンスを監視します。

接続文字列の形式

基本

Server=<host>;Port=<port>;User Id=<user>;Password=<password>;app name=telegraf;

名前付きインスタンス

Server=<host>\<instance>;User Id=<user>;Password=<password>;app name=telegraf;

Windows Authentication

Server=<host>;Port=<port>;app name=telegraf;

接続タイムアウト

Server=<host>;Port=<port>;User Id=<user>;Password=<password>;app name=telegraf;dial timeout=30;

TLS または SSL 接続

Server=<host>;Port=<port>;User Id=<user>;Password=<password>;encrypt=true;certificate=<cert>;hostNameInCertificate=<fqdn>;

収集されるメトリック

SQL Server plugin は、database_type に応じて DMVs からパフォーマンスおよびステータスメトリックを収集します。

SQLServer On Premises

収集されるメトリックには次のものが含まれます。

  • transactions per second、buffer cache hit ratio、log metrics、user connections などの Performance counters
  • wait time、waiting tasks、resource wait details などの Wait statistics
  • Database I O latency and throughput
  • Memory clerks usage
  • Scheduler statistics
  • CPU count、memory、uptime、version、database states などの Server properties
  • Volume space metrics
  • CPU usage metrics
  • Last backup details

AzureSQLDB

収集されるメトリックには次のものが含まれます。

  • Resource utilization
  • Governance limits
  • Database I O statistics
  • Wait statistics
  • Memory clerks
  • Performance counters

AzureSQLManagedInstance

収集されるメトリックには次のものが含まれます。

  • Instance resource statistics
  • Resource governance settings
  • Database I O
  • Wait statistics
  • Memory clerks
  • Performance counters

AzureSQLPool (Elastic Pool)

収集されるメトリックには次のものが含まれます。

  • Elastic pool resource usage
  • Database I O per database
  • Wait statistics
  • Memory clerks
  • Performance counters

高度な構成

選択的なクエリ収集

特定のクエリを含める場合:

[[inputs.sqlserver]] servers = ["Server=127.0.0.1;User Id=telegraf;Password=pass;"] database_type = "SQLServer" include_query = [ "SQLServerPerformanceCounters", "SQLServerDatabaseIO", "SQLServerWaitStatsCategorized" ]

特定のクエリを除外する場合:

[[inputs.sqlserver]] servers = ["Server=127.0.0.1;User Id=telegraf;Password=pass;"] database_type = "SQLServer" exclude_query = [ "SQLServerAvailabilityReplicaStates", "SQLServerDatabaseReplicaStates" ]

Azure Active Directory Authentication

[[inputs.sqlserver]] servers = [ "Server=myserver.database.windows.net;Database=mydb;app name=telegraf;" ] database_type = "AzureSQLDB" auth_method = "AAD" client_id = "<managed-identity-client-id>"

Health Metric

[[inputs.sqlserver]] servers = ["Server=127.0.0.1;User Id=telegraf;Password=pass;"] database_type = "SQLServer" health_metric = true

ユースケース

SQL Server on Premises

SNMP や WMI を必要とせずに、従来の SQL Server インスタンスを監視します。

複数インスタンスサーバー

個別の接続文字列を使用して、複数の SQL Server インスタンスからメトリックを収集します。

Azure SQL Monitoring

Azure SQL Database および Azure SQL Managed Instance のパフォーマンスメトリックを追跡します。

ハイブリッド SQL 環境

オンプレミスおよび Azure SQL リソースが混在する環境を、1 つの構成で監視します。

High Availability Monitoring

可用性グループおよびレプリカの状態を監視します。

まとめ

Telegraf は DMVs を介した SQL Server のパフォーマンス監視をサポートし、メトリックを NetCrunch Telemetry Nodes に転送します。オンプレミスの SQL Server、Azure SQL、managed instances、elastic pools をサポートします。Telegraf は複数のインスタンスを監視でき、SQL および Windows authentication の両方をサポートし、選択的なクエリ収集を可能にするとともに、Azure Active Directory による認証をサポートします。

azure sqldatabasedmvelastic poolmanaged instancemssqlpushsql servertelegraftelemetry node