다음을 통해 공유


Azure Storage에서 event_file 대상으로 이벤트 세션 만들기

적용 대상: Azure SQL Database 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 Database, 탄력적 풀 또는 관리형 인스턴스의 중복성과 일치하는 중복 유형이 있습니다.
    • 로컬 중복된 Azure SQL 리소스의 경우 LRS, GRS 또는 RA-GRS를 사용합니다. 영역 중복된 Azure SQL 리소스의 경우 ZRS, GZRS 또는 RA-GZRS를 사용합니다. 자세한 내용은 Azure Storage 중복성을 참조하세요.
  • Hot Blob 액세스 계층을 사용합니다.
  • Azure SQL Database, 탄력적 풀 또는 관리형 인스턴스와 동일한 Azure 지역에 있습니다.

다음으로, Azure Portal을 사용하여 이 스토리지 계정에서 컨테이너를 생성합니다. PowerShell을 사용하거나 Azure CLI를 사용하여 컨테이너를 생성할 수도 있습니다.

사용하는 스토리지 계정컨테이너의 이름을 기록합니다.

SAS 토큰 만들기

이벤트 세션을 실행하는 데이터베이스 엔진에는 스토리지 컨테이너에 대한 특정 액세스 권한이 필요합니다. 컨테이너에 대한 SAS 토큰을 생성하여 이 액세스 권한을 부여합니다. 이 토큰은 다음 요구 사항을 충족해야 합니다.

  • rwl(Read, Write, List) 권한을 보유함
  • 이벤트 세션의 수명을 포함하는 시작 시간 및 만료 시간을 보유함
  • IP 주소 제한 사항이 없음

Azure Portal에서 이전에 생성한 스토리지 계정 및 컨테이너를 찾습니다. 컨테이너를 선택하고 설정 > 공유 액세스 토큰으로 이동합니다. 권한Read, Write, List로 설정하고 시작만료 날짜 및 시간을 설정합니다. 생성하는 SAS 토큰은 이 시간 간격 내에서만 작동합니다.

SAS 토큰 및 URL 생성 단추를 선택합니다. SAS 토큰은 Blob SAS 토큰 상자에 있습니다. 다음 단계에서 사용하도록 복사할 수 잇습니다.

Important

SAS 토큰은 이 컨테이너에 대한 읽기 및 쓰기 액세스를 제공합니다. 비밀번호 또는 다른 비밀과 같은 방식으로 처리합니다.

예제 컨테이너에 대해 생성된 SAS 토큰을 포함하는 Azure Storage 컨테이너에 대한 공유 액세스 토큰 화면의 스크린샷.

SAS 토큰을 저장할 자격 증명 만들기

Azure SQL Database에서 데이터베이스 범위 자격 증명을 사용하여 SAS 토큰을 저장합니다. Azure SQL Managed Instance에서는 서버 범위 자격 증명을 사용합니다.

SAS 토큰을 데이터베이스 범위 자격 증명에 저장합니다. SSMS 또는 ADS와 같은 클라이언트 도구를 사용하여 새 쿼리 창을 열고, 이벤트 세션을 생성하는 데이터베이스에 연결하고, 다음 T-SQL 일괄 처리를 붙여넣습니다. master 데이터베이스가 아닌, 사용자 데이터베이스에 연결해야 합니다.

참고 항목

다음 T-SQL 일괄 처리를 실행하려면 데이터베이스 소유자(dbo), db_owner 데이터베이스 역할의 구성원 및 논리 서버 관리자가 보유하는 CONTROL 데이터베이스 권한이 필요합니다.

/*
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의 세 가지 모든 항목에서 exampleaccount4xe를 스토리지 계정 이름으로, xe-example-container를 컨테이너 이름으로 바꿉니다.
  • SECRET 절의 작은따옴표 사이의 전체 문자열을 이전 단계에서 복사한 SAS 토큰으로 바꿉니다.

이벤트 세션 만들기, 시작 및 중지

SAS 토큰이 있는 자격 증명이 생성되면 이벤트 세션을 생성할 수 있습니다. 이벤트 세션을 생성할 때 CONTROL 권한은 필요하지 않습니다. 올바른 SAS 토큰이 있는 자격 증명이 이미 있는 경우 더 제한된 권한 집합이 있더라도 이벤트 세션을 생성할 수 있습니다. 필요한 특정 권한에 대한 권한을 참조하세요.

SSMS에서 새 이벤트 세션을 생성하려면 확장 이벤트 노드를 확장합니다. 이 노드는 Azure SQL Database의 데이터베이스 폴더 아래, 그리고 Azure SQL Managed Instance의 관리 폴더 아래에 있습니다. 세션 폴더를 마우스 오른쪽 단추로 클릭하고 새 세션...을 선택합니다. 일반 페이지에서 세션의 이름을 입력합니다(이 예제의 경우 example-session). 이벤트 페이지에서 세션에 추가할 하나 이상의 이벤트를 선택합니다. 이 예제에서는 sql_batch_starting 이벤트를 선택했습니다.

sql_batch_starting 이벤트가 선택된 이벤트 선택 페이지를 보여주는 새 세션 SSMS 대화 상자의 스크린샷.

데이터 스토리지 페이지에서 대상 유형으로 event_file을 선택하고 스토리지 컨테이너 상자에 스토리지 컨테이너 URL을 붙여넣습니다. 이 URL의 끝에 슬래시(/)를 입력하고 파일(Blob) 이름을 입력합니다. 이 예제에서 Blob 이름은 example-session.xel이고 전체 URL은 https://exampleaccount4xe.blob.core.windows.net/xe-example-container/example-session.xel입니다.

참고 항목

SQL Managed Instance의 경우 스토리지 컨테이너 URL을 데이터 스토리지 페이지에 붙여넣는 대신, 스크립트 버튼을 사용하여 세션의 T-SQL 스크립트를 생성합니다. 아래 SQL Managed Instance 예제와 마찬가지로 컨테이너 URL을 filename 인수의 값으로 지정하고 스크립트를 실행하여 세션을 생성합니다.

event_file 대상이 선택되고 입력한 스토리지 URL이 있는 데이터 스토리지 선택 페이지를 보여주는 새 세션 SSMS 대화 상자의 스크린샷.

세션이 구성되었으므로 스크립트 버튼을 선택하여 세션의 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

확인을 선택하여 세션을 생성합니다.

개체 탐색기에서 세션 폴더를 확장하여 생성한 이벤트 세션을 확인합니다. 기본값으로 세션은 생성될 때 시작되지 않습니다. 세션을 시작하려면 세션 이름을 마우스 오른쪽 단추로 클릭하고 세션 시작을 선택합니다. 세션이 실행되면 세션 중지를 선택하여 나중에 중지할 수 있습니다.

이 데이터베이스 또는 관리형 인스턴스에서 T-SQL 일괄 처리가 실행되면 세션은 xe-example-container 스토리지 컨테이너의 example-session.xel Blob에 이벤트를 씁니다.

세션을 중지하려면 개체 탐색기에서 세션을 마우스 오른쪽 단추로 클릭하고 세션 중지를 선택합니다.

이벤트 데이터 보기

SQL Server Management Studio(SSMS) 이벤트 뷰어 UI에서 이벤트 데이터를 볼 수 있습니다. 여기서 필터 및 집계를 사용하여 캡처한 데이터를 분석할 수 있습니다. SSMS에서 이벤트 뷰어를 사용하는 방법에 대한 자세한 내용은 SSMS에서 이벤트 데이터 보기를 참조하세요.

Azure Storage에서 xel 파일 다운로드

SSMS v19.2 이상을 사용하는 경우 이 섹션에 설명된 대로 xel 파일을 다운로드할 필요가 없습니다. 이 버전에서는 SSMS가 Azure Storage에서 직접 각 세션에 대해 xel 파일을 읽습니다. 자세한 내용은 Azure SQL에서 확장 이벤트 개선 블로그를 참조하세요.

스토리지 컨테이너에서 세션에 대한 xel Blob을 다운로드하고 로컬 파일로 저장합니다. Azure Portal에서 사용한 스토리지 계정을 찾고, 데이터 스토리지에서 컨테이너를 선택한 후 이벤트 세션에 대해 생성한 컨테이너를 선택합니다. 세션의 Blob에는 숫자 접미사를 포함한 세션 이름이 이름의 첫 번째 부분으로 포함됩니다. 줄임표(...)를 선택하여 Blob의 컨텍스트 메뉴를 표시하고 다운로드를 선택합니다.

Azure Storage Explorer를 설치하여 한 번의 작업으로 여러 xel Blob를 다운로드할 수 있습니다.

xel 파일이 다운로드되면 SSMS에서 엽니다. SSMS 기본 메뉴에서 파일로 이동하고 열기를 선택합니다. 단일 xel 파일이 있는 경우 파일...을 선택하고 다운로드한 파일을 찾습니다. 동일한 이벤트 세션에서 생성한 여러 xel 파일(롤오버 파일이라고 함)이 있는 경우 확장 이벤트 파일 병합... 대화 상자를 사용하여 이벤트 뷰어에서 모든 파일을 열 수 있습니다.

T-SQL을 사용하여 이벤트 데이터 보기

T-SQL을 사용하여 이벤트 세션 데이터를 읽으려면 sys.fn_xe_file_target_read_file() 함수를 사용합니다. 이벤트 세션이 생성된 데이터베이스 또는 관리형 인스턴스에서 이 기능을 사용하려면 자격 증명을 생성하여 이벤트 Blob를 통해 데이터베이스 엔진에 스토리지 컨테이너에 대한 액세스 권한을 제공합니다.

자세한 연습은 SSMS에서 이벤트 세션 만들기를 참조하세요.