Azure Storage で event_file ターゲットとのイベント セッションを作成する

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

このチュートリアルの手順の概要は次のとおりです:

  1. Azure Storage アカウントを作成するか、使用するのに適切な既存のアカウントを検索します
  2. このストレージ アカウントにコンテナーを作成する
  3. このコンテナーに必要なアクセス権を持つ SAS トークンを作成する
  4. イベント セッションを作成するデータベースまたはマネージド インスタンスに SAS トークンを格納する資格情報を作成する
  5. イベント セッションを作成、開始、使用する

ストレージ アカウントとコンテナーの作成

Azure Storage でストレージ アカウントを作成する方法の詳細は、「ストレージ アカウントを作成する」を参照してください。 Azure portal、PowerShell、Azure SQL、ARM テンプレート、または Bicep テンプレートを使用してストレージ アカウントを作成する方法について説明します。

次のようなアカウントを使用することをお勧めします:

  • Standard general-purpose v2 アカウントである。
  • 冗長性の種類が、イベント セッションが作成される Azure SQL データベース、エラスティック プール、またはマネージド インスタンスの冗長性に一致する。
    • ローカル冗長 Azure SQL リソースの場合は、LRS、GRS、または RA-GRS を使用します。 ゾーン冗長 Azure SQL リソースの場合は、ZRS、GZRS、または RA-GZRS を使用します。 詳細については、「Azure Storage の冗長性」を参照してください。
  • Hot BLOB アクセス層 を使用します。
  • Azure SQL データベース、エラスティック プール、またはマネージド インスタンスと同じ Azure リージョンにある。

次に、Azure portal を使用してこのストレージ アカウントにコンテナーを作成します。 PowerShell または Azure CLI を使用してコンテナーを作成することもできます。

使用するストレージ アカウントコンテナーの名前をメモします。

SAS トークンを作成する

イベント セッションを実行するデータベース エンジンには、ストレージ コンテナーへの特定のアクセス権が必要です。 このアクセス権を付与するには、コンテナーの SAS トークン を作成します。 トークンは、次の要件を満たしている必要があります:

  • rwl (ReadWriteList) アクセス許可を持つ
  • イベント セッションの有効期間に渡る開始時間と有効期限を持つ
  • IP アドレスの制限がない

Azure portal で、作成したストレージ アカウントとコンテナーを見つけます。 コンテナーを選択し、[設定>共有アクセス トークン] に移動します。 [アクセス許可] を [ReadWriteList] に設定し、[開始時間][有効期限] の日付と時刻を設定します。 作成する SAS トークンは、この時間間隔内でのみ機能します。

[SAS トークンおよび URL を生成] ボタンを選択します。 SAS トークンは、[BLOB SAS トークン] ボックスにあります。 これをコピーして、次の手順で使用できます。

重要

SAS トークンは、このコンテナーへの読み取りと書き込みのアクセスを提供します。 パスワードやその他のシークレットと同様に扱います。

Azure Storage コンテナーの [共有アクセス トークン] 画面のスクリーンショット。サンプル コンテナーの SAS トークンが生成されています。

SAS トークンを格納する資格情報を作成する

Azure SQL データベースでは、データベース スコープの資格情報を使用して SAS トークンを格納します。 Azure SQL Managed Instance では、サーバー スコープの資格情報を使用します。

SAS トークンをデータベース スコープの資格情報に格納します。 SSMS や ADS などのクライアント ツールを使用して、新しいクエリ ウィンドウを開き、イベント セッションを作成するデータベースに接続し、次の T-SQL バッチを貼り付けます。 master データベースではなく、ユーザー データベースに接続されていることを確認します。

Note

次の T-SQL バッチを実行するには、データベース所有者 (CONTROL)、dbo データベース ロールのメンバー、および論理サーバーの管理者が持つ db_owner データベースの所有者 アクセス許可が必要です。

/*
Create a master key to protect the secret of the credential
*/
IF NOT EXISTS (
              SELECT 1
              FROM sys.symmetric_keys
              WHERE name = '##MS_DatabaseMasterKey##'
              )
CREATE MASTER KEY;

/*
(Re-)create a database scoped credential.
The name of the credential must match the URL of the blob container.
*/
IF EXISTS (
          SELECT 1
          FROM sys.database_credentials
          WHERE name = 'https://exampleaccount4xe.blob.core.windows.net/xe-example-container'
          )
    DROP DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container];

/*
The secret is the SAS token for the container. The Read, Write, and List permissions are set.
*/
CREATE DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'sp=rwl&st=2023-10-17T23:28:32Z&se=2023-10-18T07:28:32Z&spr=https&sv=2022-11-02&sr=c&sig=REDACTED';

このバッチを実行する前に、次の変更を行います:

  • https://exampleaccount4xe.blob.core.windows.net/xe-example-container が発生した 3 つのケース全てにおいて、exampleaccount4xe はストレージ アカウント名に置き換えられ、xe-example-container はコンテナー名に置き換えられます。
  • SECRET 句の一重引用符の間の文字列全体を、前の手順でコピーした SAS トークンに置き換えます。

イベント セッションを作成、開始、および停止する

SAS トークンを含む資格情報が作成されたら、イベント セッションを作成できます。 イベント セッションを作成するには、CONTROL アクセス許可は必要ありません。 正しい SAS トークンを持つ資格情報が既に存在する場合は、より制限されたアクセス許可のセットがある場合でも、イベント セッションを作成できます。 特定の必要なアクセス許可については、「アクセス許可」を参照してください。

SSMS で新しいイベント セッションを作成するには、[拡張イベント] ノードを展開します。 このノードは、Azure SQL データベースのデータベース フォルダーの下にあり、Azure SQL Managed Instance の管理フォルダーの下にあります。 [セッション] フォルダーを右クリックし、[新しいセッション...] を選択します。[全般] ページで、セッションの名前を入力します。この例では、example-session です。 [イベント] ページで、セッションに追加する 1 つ以上のイベントを選択します。 この例では、sql_batch_starting イベントが選択されています。

sql_batch_starting イベントが選択されているイベント選択ページを示す [新しいセッション SSMS] ダイアログのスクリーンショット。

[データ ストレージ] ページで、ターゲットの種類として event_file を選択し、[ストレージ URL] ボックスにストレージ コンテナーの URL を貼り付けます。 この URL の末尾にスラッシュ (/) を入力し、その後にファイル (BLOB) 名を入力します。 この例では、BLOB 名は example-session.xel、URL 全体は https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel です。

Note

SQL Managed Instance の場合は、[データ ストレージ] ページにストレージ コンテナーの URL を貼り付ける代わりに、[スクリプト] ボタンを使用してセッションの T-SQL スクリプトを作成します。 次の SQL Managed Instance の例のように、filename 引数の値としてコンテナー URL を指定し、スクリプトを実行してセッションを作成します。

[新しいセッション SSMS] ダイアログのスクリーンショット。データ ストレージの選択ページで event_file ターゲットが選択され、入力されたストレージ URL が表示されています。

セッションが構成されたので、[スクリプト] ボタンを選択して、後で保存するセッションの T-SQL スクリプトを作成できます。 このセッション例のスクリプトを次に示します:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file(SET filename=N'https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel')
GO

[OK] を選択してセッションを作成します。

オブジェクト エクスプローラーで、セッション フォルダーを展開して、作成したイベント セッションを表示します。 既定では、セッションは作成時に開始されません。 セッションを開始するには、セッション名を右クリックし、[セッションの開始] を選択 します。 セッションが実行されたら、同様に [セッションの停止] を選択して、後で停止できます。

このデータベースまたはマネージド インスタンスで T-SQL バッチが実行されると、セッションは example-session.xel ストレージ コンテナー内の xe-example-container BLOB にイベントを書き込みます。

セッションを停止するには、オブジェクト エクスプローラーでセッションを右クリックし、[セッションの停止] を選択します。

イベント データの表示

SQL Server Management Studio (SSMS) イベント ビューアー UI でイベント データを表示できます。ここでは、フィルターと集計を使用してキャプチャしたデータを分析できます。 SSMS でイベント ビューアーを使用する方法の詳細については、「SSMS でのイベント データの表示」を参照してください。

Azure Storage から xel ファイルをダウンロードする

ヒント

SSMS v19.2 以降を使用する場合は、このセクションの説明に従って xel ファイルをダウンロードする必要はありません。 これらのバージョンでは、SSMS は各セッションの xel ファイルを Azure Storage から直接読み取ります。 詳細については、「Azure SQL での拡張イベントの改善」に関するブログを参照してください。

ストレージ コンテナーからセッションの xel BLOB をダウンロードし、ローカル ファイルとして保存します。 Azure portal で、使用したストレージ アカウントを見つけ、[データ ストレージ][コンテナー] を選択し、イベント セッション用に作成したコンテナーを選択します。 セッションの BLOB には、名前の最初の部分としてセッション名があり、サフィックスは数値です。 省略記号 (...) を選択して BLOB のコンテキスト メニューを表示し、[ダウンロード] を選択します。

Azure Storage Explorer をインストールすると、1 回の操作で複数の xel BLOB をダウンロードできます。

xel ファイルがダウンロードされたら、SSMS で開きます。 SSMS メイン メニューの [ファイル] に移動し、[開く] を選択します。 1 つの xel ファイルがある場合は、[ファイル...] を選択し、ダウンロードしたファイルを参照します。 同じイベント セッションによって生成された複数の xel ファイル (ロールオーバー ファイルと呼ばれます) がある場合は、[拡張イベント ファイルのマージ...] ダイアログを使用して、イベント ビューアーでそれらのすべてを開くことができます。

T-SQL を使用してイベント データを表示する

T-SQL を使用してイベント セッション データを読み取る場合は、sys.fn_xe_file_target_read_file() 関数を使用します。 イベント セッションが作成されるデータベースとは別のデータベースまたはマネージド インスタンスでこの関数を使用するには、資格情報を作成して、データベース エンジンにイベント BLOB を含むストレージ コンテナーへのアクセス権を付与します。

詳細なチュートリアルについては、「SSMS でのイベント セッションの作成」を参照してください。