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 ファイルとスクリプトの例を参照してください。
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
ユーザーが作成されたことを確認します。
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 を監視するためには、データの収集に使用される 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 デプロイの種類に基づくオプションについて説明します。
SQL Insights では、そのパブリック エンドポイントおよび仮想ネットワークからの Azure SQL Database へのアクセスをサポートしています。
パブリック エンドポイント経由でアクセスする場合は、Azure portal の [ファイアウォールの設定] ページと [IP ファイアウォールの設定] セクションに規則を追加します。 仮想ネットワークからのアクセスを指定する場合は、仮想ネットワークのファイアウォール規則を設定し、Azure Monitor エージェントが必要とするサービス タグを設定できます。
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 (プレビュー) を開きます。 [新しいプロファイルの作成] を選択します。
このプロファイルには、SQL システムから収集する情報が格納されます。 これには、以下のための特定の設定があります。
- Azure SQL データベース
- Azure SQL Managed Instance
- Azure VM での SQL Server
たとえば、SQL Production という名前のプロファイルを 1 つ作成し、データ収集の頻度、収集対象のデータ、データ送信先のワークスペースについて異なる設定を持つ、SQL Staging という名前の別のプロファイルを作成できます。
このプロファイルは、選択したサブスクリプションとリソース グループに、データ収集ルールのリソースとして格納されます。 各プロファイルには以下が必要です。
- 名前。 いったん作成されると編集することはできません。
- 場所。 これは Azure のリージョンです。
- 監視データを格納するための Log Analytics ワークスペース。
- 収集する SQL 監視データの頻度と種類についての収集設定。
Note
プロファイルの場所は、監視データを送信する予定の Log Analytics ワークスペースと同じ場所の中にある必要があります。
監視プロファイルの詳細を入力したら、[監視プロファイルの作成] を選びます。 プロファイルがデプロイされるのに、最大で 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/
で 、シークレット名が sqlPassword1
と sqlPassword2
の場合、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;"
]
}
異なる SQL デプロイの接続文字列を識別する方法の詳細については、次のセクションを参照してください。
接続文字列を追加する
接続文字列では、監視データ収集のために SQL にログインするときに SQL Insights (プレビュー) が使用するログイン名を指定します。 監視ユーザーのパスワードを保存するために Key Vault を使おうとしている場合は、Key Vault の URI と、パスワードを含むシークレットの名前を指定します。
接続文字列は、SQL リソースの種類ごとに異なります。
監視マシンからデータベースで使用される 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 つのセカンダリの監視がサポートされています。 収集したデータには、プライマリまたはセカンダリを反映するタグが付けられます。