Azure Storage에서 event_file 대상으로 이벤트 세션 만들기
적용 대상: Azure SQL Database Azure SQL Managed Instance
이 연습의 개략적인 단계는 다음과 같습니다.
- Azure Storage 계정을 만들거나 사용할 기존 적합한 계정을 찾습니다.
- 이 스토리지 계정에 컨테이너를 만듭니다.
- RBAC 역할 할당 또는 SAS 토큰을 사용하여 컨테이너에 필요한 데이터베이스 엔진 액세스 권한을 부여합니다.
- 이벤트 세션을 만드는 데이터베이스 또는 관리되는 인스턴스에서 자격 증명을 만듭니다.
- 이벤트 세션을 만들고, 시작하고, 사용합니다.
스토리지 계정 및 컨테이너 만들기
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를 사용하여 컨테이너를 생성할 수도 있습니다.
만든 스토리지 계정 및 컨테이너의 이름을 확인합니다. 다음 단계에서 사용합니다.
컨테이너에 대한 액세스 권한 부여
이벤트 데이터를 읽고 쓰려면 데이터베이스 엔진 컨테이너에 대한 특정 액세스 권한이 필요합니다. 선택한 인증 유형에 따라 다음 두 가지 방법 중 하나로 이 액세스 권한을 부여할 수 있습니다.
Microsoft Entra 인증에서 관리 ID를 사용하는 경우 컨테이너에 대한 Storage Blob 데이터 기여자 RBAC 역할을 Azure SQL 논리 서버 또는 Azure SQL 관리형 인스턴스의 관리 ID에 할당합니다.
참고 항목
확장 이벤트 세션에서 관리 ID의 사용은 미리 보기로 제공됩니다.
비밀 기반 인증을 사용하는 경우 컨테이너에 대한 SAS 토큰 을 만듭니다.
이 인증 유형을 사용하려면 스토리지 계정 키 액세스 허용 옵션을 사용하도록 설정해야 합니다. 자세한 내용은 Azure Storage 계정에 대한 공유 키 권한 부여 방지를 참조하세요.
관리 ID를 사용하여 액세스 권한 부여
Azure Portal에서 Azure SQL 논리 서버 또는 Azure SQL 관리형 인스턴스의 ID 페이지로 이동하여 관리 ID가 할당되었는지 확인합니다. 자세한 내용은 Azure SQL Microsoft Entra 관리 ID를 참조하세요.
Azure Portal에서 이벤트 데이터를 저장하려는 스토리지 컨테이너로 이동합니다. IAM(액세스 제어) 페이지에서 추가를 선택하여 스토리지 Blob 데이터 기여자 RBAC 역할을 논리 서버 또는 SQL 관리형 인스턴스의 관리 ID에 할당합니다.
논리 서버 또는 SQL 관리되는 인스턴스에 시스템 할당 관리 ID가 사용하도록 설정된 경우 해당 ID에 역할을 할당합니다. 시스템 할당 ID가 비활성화되어 있지만 하나 이상의 사용자 할당 ID가 있는 경우 주 ID로 지정된 사용자 할당 ID에 역할을 할당합니다.
자세한 내용은 Blob 데이터에 액세스하기 위한 Azure 역할 할당을 참조하세요.
특정 컨테이너 URL에 대한 관리 ID를 사용하여 Azure Storage에 인증하도록 데이터베이스 엔진 지시하는 자격 증명을 만듭니다.
데이터베이스 범위 자격 증명을 만듭니다. SSMS 또는 ADS와 같은 클라이언트 도구를 사용하여 새 쿼리 창을 열고, 이벤트 세션을 생성하는 데이터베이스에 연결하고, 다음 T-SQL 일괄 처리를 붙여넣습니다.
master
데이터베이스가 아닌, 사용자 데이터베이스에 연결해야 합니다.참고 항목
다음 T-SQL 일괄 처리를 실행하려면 데이터베이스 소유자(
dbo
),db_owner
데이터베이스 역할의 구성원 및 논리 서버 관리자가 보유하는CONTROL
데이터베이스 권한이 필요합니다./* (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://<storage-account-name>.blob.core.windows.net/<container-name>' ) DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* When using managed identity, the credential does not contain a secret */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'MANAGED IDENTITY';
이 일괄 처리를 실행하기 전에 다음을 변경합니다.
https://<storage-account-name>.blob.core.windows.net/<container-name>
의 세 가지 모든 항목에서<storage-account-name>
를 스토리지 계정 이름으로,<container-name>
를 컨테이너 이름으로 바꿉니다.
SAS 토큰을 사용하여 액세스 권한 부여
Azure Portal에서 만든 스토리지 계정 및 컨테이너로 이동합니다. 컨테이너를 선택하고 설정 > 공유 액세스 토큰으로 이동합니다.
SAS 토큰은 다음 요구 사항을 충족해야 합니다.
- 사용 권한은 ,
Write
,Delete
List
로Read
설정됩니다. - 시작 시간 및 만료 시간은 이벤트 세션의 수명을 포함해야 합니다. 생성하는 SAS 토큰은 이 시간 간격 내에서만 작동합니다.
- IP 주소 제한 사항이 없습니다.
SAS 토큰 및 URL 생성 단추를 선택합니다. SAS 토큰은 Blob SAS 토큰 상자에 있습니다. 다음 단계에서 사용하도록 복사할 수 잇습니다.
Important
SAS 토큰은 이 컨테이너에 대한 읽기 및 쓰기 액세스를 제공합니다. 비밀번호 또는 다른 비밀과 같은 방식으로 처리합니다.
- 사용 권한은 ,
SAS 토큰을 저장할 자격 증명을 만듭니다.
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://<storage-account-name>.blob.core.windows.net/<container-name>' ) DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* The secret is the SAS token for the container. The Read, Write, and List permissions are set. */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<sas-token>';
이 일괄 처리를 실행하기 전에 다음을 변경합니다.
https://<storage-account-name>.blob.core.windows.net/<container-name>
의 세 가지 모든 항목에서<storage-account-name>
를 스토리지 계정 이름으로,<container-name>
를 컨테이너 이름으로 바꿉니다.SECRET
절에서 이전 단계에서 복사한 SAS 토큰으로 바꿉<sas-token>
니다.
이벤트 세션 만들기, 시작 및 중지
자격 증명이 만들어지면 이벤트 세션을 만들 수 있습니다. 자격 증명을 만드는 것과 달리 이벤트 세션을 만들 때는 권한이 필요하지 CONTROL
않습니다. 자격 증명이 만들어지면 더 제한된 권한이 있더라도 이벤트 세션을 만들 수 있습니다. 필요한 특정 권한에 대한 권한을 참조하세요.
SSMS에서 새 이벤트 세션을 생성하려면 확장 이벤트 노드를 확장합니다. 이 노드는 Azure SQL Database의 데이터베이스 폴더 아래, 그리고 Azure SQL Managed Instance의 관리 폴더 아래에 있습니다. 세션 폴더를 마우스 오른쪽 단추로 클릭하고 새 세션...을 선택합니다. 일반 페이지에서 세션의 이름을 입력합니다(이 예제의 경우 example-session
). 이벤트 페이지에서 세션에 추가할 하나 이상의 이벤트를 선택합니다. 이 예제에서는 sql_batch_starting
이벤트를 선택했습니다.
데이터 스토리지 페이지에서 대상 유형으로 event_file
을 선택하고 스토리지 컨테이너 상자에 스토리지 컨테이너 URL을 붙여넣습니다. 이 URL의 끝에 슬래시(/
)를 입력하고 파일(Blob) 이름을 입력합니다. 이 예제에서 Blob 이름은 example-session.xel
이고 전체 URL은 https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel
입니다.
참고 항목
SQL Managed Instance의 경우 스토리지 컨테이너 URL을 데이터 스토리지 페이지에 붙여넣는 대신, 스크립트 버튼을 사용하여 세션의 T-SQL 스크립트를 생성합니다. 아래 SQL Managed Instance 예제와 마찬가지로 컨테이너 URL을 filename
인수의 값으로 지정하고 스크립트를 실행하여 세션을 생성합니다.
세션이 구성되었으므로 스크립트 버튼을 선택하여 세션의 T-SQL 스크립트를 생성하고 나중에 사용하도록 저장할 수 있습니다. 다음은 예제 세션에 대한 스크립트입니다.
CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file(SET filename=N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel')
GO
확인을 선택하여 세션을 생성합니다.
개체 탐색기에서 세션 폴더를 확장하여 생성한 이벤트 세션을 확인합니다. 기본값으로 세션은 생성될 때 시작되지 않습니다. 세션을 시작하려면 세션 이름을 마우스 오른쪽 단추로 클릭하고 세션 시작을 선택합니다. 세션이 실행되면 세션 중지를 선택하여 나중에 중지할 수 있습니다.
이 데이터베이스 또는 관리되는 인스턴스에서 T-SQL 일괄 처리가 실행되면 세션은 스토리지 컨테이너의 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에서 이벤트 세션 만들기를 참조하세요.