SQL Insights を有効にする (プレビュー)

適用対象:Azure SQL データベースAzure SQL Managed Instance

この記事では、SQL Insights (プレビュー) を有効にして SQL のデプロイを監視する方法について説明します。 監視は、お使いの SQL デプロイに接続し、動的管理ビュー (DMV) を使用して監視データを収集する Azure 仮想マシンから実行されます。 監視プロファイルを使用して、どのようなデータセットを収集するかと、収集の頻度を制御できます。

Note

Resource Manager テンプレートを使用して、監視プロファイルと仮想マシンを作成することによって SQL Insights (プレビュー) を有効にする方法については、「SQL Insights (プレビュー) 用 Resource Manager テンプレートのサンプル」を参照してください。

SQL Insights (プレビュー) を有効にする方法については、この Data Exposed エピソードを参照することもできます。

Log Analytics ワークスペースの作成

SQL Insights のデータは、1 つ以上の Log Analytics ワークスペースに格納されます。 SQL Insights を有効にする前に、ワークスペースを作成するか、既存のワークスペースを選択する必要があります。 1 つのワークスペースを複数の監視プロファイルで使用できますが、ワークスペースとプロファイルは同じ Azure リージョン内に置く必要があります。 SQL Insights の機能を有効にしてアクセスするには、ワークスペース内で Log Analytics 共同作成者ロールを持っている必要があります。

監視ユーザーを作成する

監視対象にする SQL デプロイ上にユーザー (ログイン) が必要です。 異なる種類の SQL デプロイについて、下記の手順に従ってください。

以下の手順では、監視できる SQL の種類ごとのプロセスについて説明します。 一度に複数の SQL リソースでスクリプトを使用して、これを実現するには、次の README ファイルスクリプトの例を参照してください。

Azure SQL Database

Note

SQL Insights (プレビュー) では、次の Azure SQL Database シナリオはサポートされていません。

  • エラスティック プール: エラスティック プールのメトリックを収集することはできません。 エラスティック プール内のデータベースのメトリックを収集することはできません。
  • 低サービス レベル: Basic、S0、S1 のサービス目標に基づくデータベースのメトリックを収集できません

SQL Insights (プレビュー) では、次の Azure SQL Database シナリオに対するサポートが制限されています。

  • サーバーレス サービス レベル: サーバーレス コンピューティング サービス レベルを使用するデータベースのメトリックは収集できます。 ただし、メトリックを収集するプロセスによって自動一時停止の延期期間タイマーがリセットされ、データベースが自動一時停止状態に入れなくなります。

SQL Server Management Studio、Azure portal のクエリ エディター (プレビュー)、またはその他の SQL クライアント ツールを使用して、Azure SQL データベースに接続します。

次のスクリプトを実行し、必要なアクセス許可を持つユーザーを作成します。 user をユーザー名に、mystrongpassword を強力なパスワードに置き換えます。

CREATE USER [user] WITH PASSWORD = N'mystrongpassword'; 
GO 
GRANT VIEW DATABASE STATE TO [user]; 
GO 

Screenshot of the Query Editor with a create telegraf user script.

ユーザーが作成されたことを確認します。

Screenshot of the Query Editor query window verifying the telegraf user script.

select name as username,
       create_date,
       modify_date,
       type_desc as type,
       authentication_type_desc as authentication_type
from sys.database_principals
where type not in ('A', 'G', 'R', 'X')
       and sid is not null
order by username

Azure SQL Managed Instance

Azure SQL Managed Instance に接続し、SQL Server Management Studio または同様のツールを使用して次のスクリプトを実行して、必要なアクセス許可を持つ監視ユーザーを作成します。 user をユーザー名に、mystrongpassword を強力なパスワードに置き換えます。

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

SQL Server

Azure 仮想マシン上の SQL Server に接続し、SQL Server Management Studio または同様のツールを使用して次のスクリプトを実行し、必要なアクセス許可を持つ監視ユーザーを作成します。 user をユーザー名に、mystrongpassword を強力なパスワードに置き換えます。

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

ユーザーが作成されたことを確認します。

select name as username,
       create_date,
       modify_date,
       type_desc as type
from sys.server_principals
where type not in ('A', 'G', 'R', 'X')
       and sid is not null
order by username

Azure 仮想マシンを作成する

SQL を監視するためには、データの収集に使用される Azure 仮想マシンを 1 つ以上作成する必要があります。

Note

監視プロファイルでは、監視対象の種類が異なる SQL から、どのようなデータを収集するかを指定します。 それぞれの監視仮想マシンに関連付けることができる監視プロファイルは 1 つだけです。 複数の監視プロファイルが必要な場合は、それぞれのために仮想マシンを作成する必要があります。

Azure 仮想マシンの要件

Azure 仮想マシンには、次の要件があります。

  • オペレーティング システム: Ubuntu 18.04 (Azure Marketplace イメージを使用)。 カスタム イメージはサポートされていません。 このバージョンの Ubuntu の拡張セキュリティ メンテナンス (ESM) を取得するには、Ubuntu Pro 18.04 LTS マーケットプレース イメージを使用することをお勧めします。 詳細については、「Azure での Linux およびオープンソース テクノロジのサポート」を参照してください。
  • Azure 仮想マシンの推奨最小サイズ: Standard_B2s (2 CPU、4 GiB メモリ)
  • Azure Monitor エージェントでサポートされている任意の Azure リージョンにデプロイされ、すべての Azure Monitor エージェントの前提条件を満たします。

Note

仮想マシン サイズが Standard_B2s (2 CPU、4 GiB メモリ) の場合、最大 100 の接続文字列がサポートされます。 1 つの仮想マシンに 100 を超える接続を割り当ててはいけません。

SQL リソースのネットワーク設定によっては、仮想マシンを SQL リソースと同じ仮想ネットワークに配置して、監視データを収集するためのネットワーク接続を確立することが必要になる場合があります。

ネットワークの設定を構成する

どの種類の SQL にも、監視仮想マシンが SQL に安全にアクセスするための方法が用意されています。 以下のセクションでは、SQL デプロイの種類に基づくオプションについて説明します。

Azure SQL データベース

SQL Insights では、そのパブリック エンドポイントおよび仮想ネットワークからの Azure SQL Database へのアクセスをサポートしています。

パブリック エンドポイント経由でアクセスする場合は、 [ファイアウォールの設定] ページと [IP ファイアウォールの設定] セクションに規則を追加します。 仮想ネットワークからのアクセスを指定する場合は、仮想ネットワークのファイアウォール規則を設定し、Azure Monitor エージェントが必要とするサービス タグを設定できます。 この記事では、これら 2 種類のファイアウォール規則の違いについて説明します。

Screenshot of an Azure SQL Database page in the Azure portal. The Set server firewall button is highlighted.

Screenshot of an Azure SQL Database Firewall settings page in the Azure portal. Firewall settings.

Azure SQL Managed Instance

監視仮想マシンの場所が SQL MI リソースと同じ VNet 内になる場合は、「同じ vnet 内で接続する」を参照してください。 監視仮想マシンの場所が SQL MI リソースとは異なる VNet 内になる場合は、「異なる vnet 内で接続する」を参照してください。

SQL Server

監視仮想マシンが SQL 仮想マシンのリソースと同じ VNet にある場合は、「仮想ネットワーク内で SQL Server に接続する方法」を参照してください。 監視仮想マシンが SQL 仮想マシンのリソースと異なる VNet にある場合は、「インターネット経由で SQL Server に接続する」を参照してください。

Azure Key Vault に監視パスワードを格納する

セキュリティのベスト プラクティスとして、SQL ユーザー (ログイン) パスワードは、監視プロファイルの接続文字列に直接入力するのではなく、Key Vault に保存することを強くお勧めします。

SQL 監視のプロファイルを設定するときには、使用する予定の Key Vault リソースに対する以下のいずれかのアクセス許可が必要になります。

  • Microsoft.Authorization/roleAssignments/write
  • Microsoft.Authorization/roleAssignments/delete

これらのアクセス許可がある場合、指定した Key Vault を使用する SQL Monitoring プロファイルの作成の一部として、新しい Key Vault アクセス ポリシーが自動的に作成されます。

重要

監視 VM から Key Vault にアクセスできるよう、ネットワークとセキュリティの構成を確認する必要があります。 詳細については、「ファイアウォールの内側にある Azure Key Vault にアクセスする」および「Azure Key Vault のネットワーク設定を構成する」を参照してください。

SQL 監視プロファイルを作成する

Azure portal で、[Azure Monitor] メニューの [Insights] セクションから [SQL (プレビュー)] を選択し、SQL Insights (プレビュー) を開きます。 [新しいプロファイルの作成] を選択します。

Screenshot of the Azure Monitor page in Azure portal. The create new profile button is highlighted.

このプロファイルには、SQL システムから収集する情報が格納されます。 これには、以下のための特定の設定があります。

  • Azure SQL データベース
  • Azure SQL Managed Instance
  • 仮想マシンで実行中の SQL Server

たとえば、SQL Production という名前のプロファイルを 1 つ作成し、データ収集の頻度、収集対象のデータ、データ送信先のワークスペースについて異なる設定を持つ、SQL Staging という名前の別のプロファイルを作成できます。

このプロファイルは、選択したサブスクリプションとリソース グループに、データ収集ルールのリソースとして格納されます。 各プロファイルには以下が必要です。

  • 名前。 いったん作成されると編集することはできません。
  • 場所。 これは Azure のリージョンです。
  • 監視データを格納するための Log Analytics ワークスペース。
  • 収集する SQL 監視データの頻度と種類についての収集設定。

Note

プロファイルの場所は、監視データを送信する予定の Log Analytics ワークスペースと同じ場所の中にある必要があります。

A screenshot of the Create new profile details page in the Azure portal.

監視プロファイルの詳細を入力したら、[監視プロファイルの作成] を選びます。 プロファイルがデプロイされるのに、最大で 1 分かかることがあります。 [監視プロファイル] コンボ ボックスに新しいプロファイルが表示されない場合、デプロイがいったん完了すれば、[更新] ボタンを選ぶと表示されるはずです。 新しいプロファイルを選択したら、 [プロファイルの管理] タブを選択して、そのプロファイルに関連付けられる監視コンピューターを追加します。

監視マシンを追加する

[監視マシンの追加] を選んで Add monitoring virtual machine コンテキスト パネルを開き、SQL インスタンスを監視する仮想マシンを選んで、接続文字列を指定します。

サブスクリプションと、監視仮想マシンの名前を選択します。 Key Vault を使用して監視ログインのパスワードを格納する場合 (強く推奨)、Key vault subscriptions でその Key Vault のサブスクリプションを選択し、KeyVault でシークレットを格納する Key Vault を選択します。 Connection strings フィールドに、接続文字列で使用する各パスワードのコンテナー URI とシークレット名を入力します。

たとえば、Key Vault URI 値が https://mykeyvault.vault.azure.net/ で 、シークレット名が sqlPassword1sqlPassword2 の場合、Connection strings フィールドの JSON には以下が含まれます。

{
   "secrets": {
      "telegrafPassword1": {
         "keyvault": "https://mykeyvault.vault.azure.net/",
         "name": "sqlPassword1"
      },
      "telegrafPassword2": {
         "keyvault": "https://mykeyvault.vault.azure.net/",
         "name": "sqlPassword2"
      }
   }
}

Connection strings フィールド内でこれらのシークレットをさらに参照できるようになりました。 次の例では、2 つの接続文字列が、前に定義した telegrafPassword1 シークレットと telegrafPassword2 シークレットを参照します。

{
   "sqlAzureConnections": [
      "Server=mysqlserver.database.windows.net;Port=1433;Database=mydatabase;User Id=telegraf;Password=$telegrafPassword1;"
   ],
   "sqlVmConnections": [
      "Server=mysqlserver1;Port=1433;Database=master;User Id=telegraf;Password=$telegrafPassword2;"
   ]
}

A screenshot of the Azure portal Add monitoring virtual machine page. Choose the VM, specify the KV url (if used) and the secret name. Enter connection strings for each system to monitor. Choose the KV where you created the secret used in the connection strings.

異なる SQL デプロイの接続文字列を識別する方法の詳細については、次のセクションを参照してください。

接続文字列を追加する

接続文字列では、監視データ収集のために SQL にログインするときに SQL Insights (プレビュー) が使用するログイン名を指定します。 監視ユーザーのパスワードを保存するために Key Vault を使おうとしている場合は、Key Vault の URI と、パスワードを含むシークレットの名前を指定します。

接続文字列は、SQL リソースの種類ごとに異なります。

Azure SQL Database

監視マシンからデータベースで使用される IP アドレスとポートへの TCP 接続を、ネットワーク パスに存在するファイアウォールまたはネットワーク セキュリティ グループ (NSG) で許可する必要があります (これらが存在する場合)。 IP アドレスとポートについて詳しくは、「Azure SQL Database 接続アーキテクチャ」を参照してください。

接続文字列を次の形式で入力します。

"sqlAzureConnections": [
   "Server=mysqlserver1.database.windows.net;Port=1433;Database=mydatabase;User Id=$username;Password=$password;",
   "Server=mysqlserver2.database.windows.net;Port=1433;Database=mydatabase;User Id=$username;Password=$password;"
]

[接続文字列] ページと、データベースの適切な ADO.NET エンドポイントから詳細を取得します。

読み取り可能なセカンダリを監視するには、;ApplicationIntent=ReadOnly を接続文字列に追加します。 SQL Insights では、1 つのセカンダリの監視がサポートされています。 収集したデータには、プライマリまたはセカンダリを反映するタグが付けられます。

Azure SQL Managed Instance

監視マシンからマネージド インスタンスで使用される IP アドレスとポートへの TCP 接続を、ネットワーク パスに存在するファイアウォールまたはネットワーク セキュリティ グループ (NSG) で許可する必要があります (これらが存在する場合)。 IP アドレスとポートについて詳しくは、「Azure SQL Managed Instance の接続の種類」を参照してください。

接続文字列を次の形式で入力します。

"sqlManagedInstanceConnections": [
   "Server= mysqlserver1.<dns_zone>.database.windows.net;Port=1433;User Id=$username;Password=$password;",
   "Server= mysqlserver2.<dns_zone>.database.windows.net;Port=1433;User Id=$username;Password=$password;" 
] 

[接続文字列] ページと、マネージド インスタンスの適切な ADO.NET エンドポイントから詳細を取得します。 マネージド インスタンスのパブリック エンドポイントを使用する場合、ポート 1433 を 3342 に置き換えます。

読み取り可能なセカンダリを監視するには、;ApplicationIntent=ReadOnly を接続文字列に追加します。 SQL Insights では、特定のプライマリ データベースに対する単一の高可用性 (HA) セカンダリ レプリカの監視がサポートされています。 収集したデータには、プライマリまたはセカンダリを反映するタグが付けられます。

SQL Server

監視する SQL Server インスタンスで TCP/IP プロトコルが有効になっている必要があります。 監視マシンから SQL Server インスタンスで使用される IP アドレスとポートへの TCP 接続を、ネットワーク パスに存在するファイアウォールまたはネットワーク セキュリティ グループ (NSG) で許可する必要があります (これらが存在する場合)。

(可用性グループまたはフェールオーバー クラスター インスタンスを使用して) 高可用性用として構成されている SQL Server を監視する場合、可用性グループ リスナーまたはフェールオーバー クラスター名を使用して接続するのではなく、クラスター内の各 SQL Server インスタンスを個別に監視することをお勧めします。 これにより、現在のインスタンス ロール (プライマリまたはセカンダリ) に関係なく、監視データが収集されます。

接続文字列を次の形式で入力します。

"sqlVmConnections": [
   "Server=SQLServerInstanceIPAddress1;Port=1433;User Id=$username;Password=$password;",
   "Server=SQLServerInstanceIPAddress2;Port=1433;User Id=$username;Password=$password;"
] 

SQL Server インスタンスがリッスンする IP アドレスを使用します。

SQL Server インスタンスが既定以外のポートでリッスンするように構成されている場合、接続文字列で 1433 をそのポート番号に置き換えます。 Azure 仮想マシンで SQL Server を使っている場合、リソースの [セキュリティ] ページで、使用するポートを確認できます。

A screenshot of the SQL virtual machine Security page in the Azure portal. The SQL virtual machine security page has a Security & networking section with a Port field.

SQL Server インスタンスでは、そのインスタンスへの TCP 接続が少なくとも 1 つある限り、そのインスタンスに接続し、次の T-SQL クエリを実行することで、そのインスタンスがリッスンするすべての IP アドレスとポートを確認できます。

SELECT DISTINCT local_net_address, local_tcp_port
FROM sys.dm_exec_connections
WHERE net_transport = 'TCP'
      AND
      protocol_type = 'TSQL';

作成された監視プロファイル

SQL リソースからデータを収集するように仮想マシンを構成するには、 [監視仮想マシンの追加] を選択します。 [概要] タブには戻らないでください。数分のうちに [状態] 列が [収集中] に変化するはずです。そして、監視対象として選択した SQL リソースのデータが表示されます。

データが表示されない場合は、「SQL Insights (プレビュー) のトラブルシューティング」を参照して問題を特定してください。

A screenshot of the Azure portal page for Azure Monitor for SQL. In the Insights menu, SQL is selected. A profile is shown to have been created.

Note

VM の監視で監視プロファイルまたは接続文字列を更新する必要がある場合は、SQL Insights (プレビュー) の [プロファイルの管理] タブで行うことができます。 更新が保存されると、変更は約 5 分後に適用されます。

次のステップ