Power BI용 Azure Log Analytics 구성
Power BI는 Azure Log Analytics와 통합되어 관리자 및 Premium 작업 영역 소유자가 Power BI 구독에 대한 Log Analytics 연결을 구성할 수 있도록 합니다. 이 문서에서는 Log Analytics와 Power BI 간의 통합이 작동하는 방식과 이러한 통합을 사용자 환경에 맞게 구성하는 방법을 설명합니다.
Azure Log Analytics가 Power BI에서 작동하도록 하는 두 가지 요소가 있습니다.
- Azure Portal에서 Azure 구독을 구성합니다.
- Power BI 관리 포털에서 Power BI용 Log Analytics를 사용하도록 설정합니다.
다음 섹션에서는 두 작업을 모두 수행하는 단계를 안내합니다.
필수 조건
Power BI에서 Log Analytics 통합을 구성하려면 먼저 Azure Portal에서 Log Analytics 작업 영역을 만들어야 합니다. 또한 Azure에서 Power BI 서비스가 로그를 쓸 수 있는 권한을 부여해야 합니다. 정확한 요구 사항은 다음과 같습니다.
- Azure 구독에 대한 기여자 액세스.
- Power BI 로그 데이터를 수집하는 'microsoft insights' 리소스 공급자를 Azure 구독에 등록합니다.
- Power BI에서 Log Analytics 통합을 설정하는 사용자는 Log Analytics 작업 영역의 Log Analytics 기여자 역할에 속해야 합니다. 소유자 역할을 지정할 수 없는 경우 FAQ에서 해결 방법을 참조하세요.
'microsoft.insights' 리소스 공급자 사용
Log Analytics를 사용하려면 Azure 구독 수준에서 'microsoft insights' 리소스 공급자를 사용하도록 설정해야 합니다. 다음 단계에서 이 프로세스를 안내합니다.
Azure Portal에 로그인하고 Log Analytics에서 사용하려고 하며 Log Analytics 작업 영역을 포함하는 구독을 선택합니다. 설정 섹션에서 다음 이미지와 같이 리소스 공급자를 선택합니다.
리소스 공급자에서 microsoft.insights를 검색합니다. 그런 다음 등록을 선택합니다.
권한 설정
Log Analytics 통합을 구성하는 사용자에게 Log Analytics 작업 영역의 Log Analytics 기여자 역할이 있는지 확인합니다. Azure Portal에서 구독에 대해 액세스 제어(IAM)를 선택하고 패널의 맨 위에 있는 선택 옵션에서 역할 할당을 선택하는 경우, 현재 사용자에게는 Log Analytics를 구성하는 사용자에 대한 Log Analytics 기여자 항목이 하나 표시되어야 합니다.
이러한 단계를 완료하면 Azure Log Analytics 구성 부분이 완료된 것입니다. 다음 섹션에서는 Power BI 관리 포털에서 구성을 계속하고 완료하는 방법을 보여 줍니다.
관리 포털에서 작업 영역 수준 로깅 허용
Power BI 관리자는 Power BI Premium 작업 영역에 대해 Azure Log Analytics를 사용하도록 설정하기 위해 다음 단계를 완료해야 합니다. 이 설정을 통해 Power BI Premium 작업 영역 관리자는 필수 구성 요소가 충족될 경우 Azure Log Analytics에 작업 영역 로그를 보낼 수 있습니다.
Power BI 관리 포털에서 테넌트 설정 > 감사 및 사용 설정으로 이동하고 작업 영역 관리자를 위한 Azure Log Analytics 연결을 확장합니다. 작업 영역 관리자가 Log Analytics를 사용하도록 설정하도록 허용하려면 다음 이미지와 같이 슬라이더를 사용으로 설정하고 다음에 적용에서 필요한 보안 그룹을 지정합니다.
Premium 작업 영역에서 로깅 구성
Premium 작업 영역에서 작업 영역 관리자는 Log Analytics를 사용하도록 설정할 수 있습니다. 이렇게 하려면 다음 이미지와 같이 설정으로 이동합니다.
설정 창에서 Azure 연결을 선택하고 다음 그림과 같이 Log Analytics를 확장합니다.
Azure 구독, 리소스 그룹을 선택한 다음, 이전 섹션에서 구성된 Log Analytics 작업 영역을 선택합니다. 그런 다음, 저장을 선택합니다. 성공적으로 완료되면 확장된 테넌트 수준 Log Analytics 섹션은 다음 이미지와 유사합니다.
Azure Log Analytics 연결 끊기
Azure로의 로그 전송을 중지하도록 Azure Log Analytics와의 연결을 끊을 수 있습니다. 연결을 끊으려면 Power BI 작업 영역 설정에서 Log Analytics 설정으로 이동합니다. Azure에서 연결 끊기를 선택합니다. 그런 다음 저장을 선택하여 연결을 끊습니다.
참고 항목
Azure Log Analytics에서 Power BI 작업 영역의 연결을 끊어도 로그는 삭제되지 않습니다. 데이터는 그대로 유지되며 사용자가 설정한 스토리지 및 보존 정책을 따릅니다.
사용 시나리오
Azure Log Analytics 및 Power BI는 다양한 방식으로 조직의 실제 문제를 해결하는 데 도움이 되고 있습니다. 다음을 고려하십시오.
- 용량, 작업 영역, 보고서 또는 사용자별로 높거나 비정상적인 Analysis Services 엔진 활동 기간을 식별합니다.
- 외부 DirectQuery 작업을 포함하여 쿼리 성능 및 추세를 분석합니다.
- 의미 체계 모델 새로 고침 기간, 겹침 및 처리 단계를 분석합니다.
- Premium XMLA 엔드포인트를 사용하여 보낸 사용자 지정 작업을 분석합니다.
Power BI Community에서 로깅을 사용하는 방법 및 로깅이 조직에 어떤 방식으로 도움이 되는지에 대한 피드백을 보내주세요.
오류 조건 및 해결 방법
다음 표에서는 일반적인 오류, 오류를 트리거한 이벤트나 구성 및 권장 해결 방법 모음을 제공합니다.
트리거 조건 | Type | Message |
---|---|---|
Log Analytics 작업 영역에 쓸 수 있는 권한이 없습니다. | 오류 - 계속할 수 없음 | Power BI에 연결하려면 이 Log Analytics 작업 영역에 대해 쓰기 권한이 있어야 합니다. 이 문제를 해결하려면 Azure 구독을 관리하는 조직의 담당자에게 문의하세요. |
Log Analytics 작업 영역 계정에 쓸 수 있는 권한이 없습니다. | 오류 - 계속할 수 없음 | Power BI에 연결하려면 이 Log Analytics 작업 영역에 대해 쓰기 권한이 있어야 합니다. |
Azure 구독에 대한 액세스 권한이 없습니다. | 오류 - 계속할 수 없음 | Azure 구독에 대한 액세스 권한이 없습니다. 조직에서 Azure 구독을 관리하는 사용자에게 액세스 이상의 권한을 기여자에게 부여하도록 요청합니다. |
해당 구독 내의 Azure Log Analytics 작업 영역에 액세스할 수 없습니다. | 오류 - 계속할 수 없음 | Azure Log Analytics 작업 영역에 대한 액세스 권한이 없습니다. 조직에서 Azure 구독을 관리하는 사용자에게 Log Analytics 소유자 또는 기여자 역할에 자신에게 추가하도록 요청합니다. |
연결하려고 할 때 작업 영역 수준 Log Analytics가 사용하지 않도록 설정됨 | 정보 | 작업 영역 관리자에게 자체 Log Analytics 작업 영역을 연결할 수 있는 권한을 부여해 달라고 테넌트 관리자에게 요청합니다. |
연결을 끊으려고 할 때 작업 영역 수준 Log Analytics가 사용하지 않도록 설정됨 | 정보 | 테넌트 관리자가 자신의 Azure Log Analytics 작업 영역을 연결하기 위한 작업 영역 관리자의 권한을 취소했습니다. 연결을 끊으면 다른 연결에 연결할 수 없습니다. |
이벤트 및 스키마
Azure Log Analytics를 사용하도록 설정하면 다음 이벤트 범주를 기록하기 시작합니다. 이러한 이벤트에 대한 자세한 내용은 Analysis Services 추적 이벤트를 참조하세요.
- AggregateTableRewriteQuery
- 명령어
- 교착 상태
- DirectQuery
- Discover
- 오류
- ProgressReport
- 쿼리
- 세션 초기화
- VertiPaqSEQuery
- 알림
다음 표에서는 스키마에 대해 설명합니다.
속성 | 기존 Azure Analysis Services 속성 | 설명 |
---|---|---|
TimeGenerated | 로그가 생성된 시간의 타임스탬프(UTC)입니다. | |
OperationName | EventClass_s | 로그 레코드와 연결된 Analysis Services 추적 이벤트입니다. 각 범주별로 가능한 이벤트에 대한 자세한 내용은 AS 추적 이벤트 설명서 페이지를 참조하세요. |
CorrelationId | 상관 관계가 있는 이벤트의 ID입니다. 여러 테이블 간의 상관 관계가 지정된 이벤트를 식별하는 데 사용할 수 있습니다. | |
PowerBIWorkspaceId | 작업 중인 아티팩트를 포함하는 작업 영역의 고유 식별자입니다. | |
PremiumCapacityId | 작업 중인 아티팩트를 호스트하는 Premium 용량의 고유 식별자입니다. | |
ApplicationContext | ApplicationContext_s | 요청을 실행하는 애플리케이션에 대한 세부 정보를 제공하는 고유 식별자의 속성 모음입니다. 보고서 ID를 예로 들 수 있습니다. |
ApplicationName | ApplicationName_s | 서버에 대한 연결을 만든 클라이언트 애플리케이션의 이름을 포함합니다. 이 열은 표시된 프로그램 이름이 아닌 애플리케이션에서 전달되는 값으로 채워집니다. |
ArtifactId | 데이터를 로깅하는 리소스의 고유 식별자입니다. | |
ArtifactKind | 작업을 로깅하는 아티팩트 유형(예: 의미 체계 모델)입니다. | |
CpuTimeMs | CPUTime_s | 이벤트에 의해 사용된 CPU 시간(밀리초)입니다. |
ArtifactName | DatabaseName_s | 이 작업을 로깅하는 Power BI 아티팩트의 이름입니다. |
LogAnalyticsCategory | 고유한 | 로그 레코드와 연결된 Analysis Services 추적 이벤트 범주입니다. 가능한 이벤트 범주에 대한 자세한 내용은 AS 추적 이벤트 설명서 페이지를 참조하세요. |
DatasetMode | 의미 체계 모델의 모드입니다. 가져오기, DirectQuery 또는 복합 모드가 있습니다. | |
DurationMs | Duration_s | 이벤트에 소요된 시간(밀리초)입니다. |
사용자 | User_s | 실행 중인 작업과 연결된 사용자입니다. 서버에서 최종 사용자 ID를 가장해야 할 때 사용합니다. |
ExecutingUser | EffectiveUsername_s | 작업을 실행하는 사용자입니다. |
OperationDetailName | EventSubclass_s | 로그 레코드와 연결된 Analysis Services 추적 이벤트에 대한 자세한 내용을 확인하세요. 사용 가능한 값(예: Command Begin)에 대한 자세한 내용은 추적 이벤트 설명서 페이지의 '하위 클래스' 속성을 참조하세요. |
XmlaObjectPath | ObjectPath_s | 개체 경로입니다. 개체의 부모로 시작되는 쉼표로 구분된 부모 목록입니다. |
PowerBIWorkspaceName | 아티팩트가 포함된 Power BI 작업 영역의 이름입니다. | |
StatusCode | Error_s | 작업의 상태 코드입니다. 성공 및 실패를 포함합니다. |
ProgressCounter | ProgressTotal_s | 진행률 카운터입니다. |
XmlaProperties | RequestProperties_s | XMLA 요청의 속성입니다. |
XmlaSessionId | SPID_s | Analysis Services 세션 식별자입니다. |
수준 | Severity_s | 로깅되는 작업의 심각도 수준을 포함합니다. 성공, 정보, 경고 또는 오류가 있습니다. |
ID | 사용자 및 클레임에 대한 정보입니다. | |
상태 | 작업의 상태입니다. | |
EventText | TextData_s | 작업과 관련된 자세한 정보(예: DAX 쿼리)를 포함합니다. |
CustomerTenantId | 고객의 Power BI 테넌트 식별자입니다. | |
XmlaRequestId | RootActivityId_g | 요청의 고유 식별자입니다. |
ReplicaId | QSO(쿼리 스케일 아웃)를 사용할 때 복제본을 식별할 수 있는 복제본 식별자입니다. 읽기-쓰기 복제본에는 항상 ReplicaId='AAA'가 있고 읽기 전용 복제본에는 'AAB'부터 시작하는 ReplicaId가 있습니다. QSO를 사용하지 않는 의미 체계 모델의 경우 ReplicaId는 항상 'AAA'입니다. |
ExecutionMetrics 이벤트
모든 Discover, Command, Query 요청에 대해 요청이 끝날 때 ExecutionMetrics라는 이벤트가 생성됩니다. 이 이벤트에는 요청에 대한 실행 메트릭이 포함되어 있어 보다 효과적으로 진단하고 문제를 해결하는 데 도움이 될 수 있습니다. ExecutionMetrics 추적은 가장 가까운 [Discover|Command|Query]End 이벤트와 상관 관계가 있습니다.
다음 KQL 쿼리는 마지막 날 의미 체계 모델의 모든 새로 고침 작업에 대한 ExecutionMetrics 이벤트를 검색합니다.
let commands = PowerBIDatasetsWorkspace
| where TimeGenerated > ago(1d)
| where ArtifactId =~ "[Semantic Model Id]"
| where OperationName in ("CommandEnd")
| where EventText contains "<Refresh"
| project TimeGenerated, ArtifactId, CommandOperationName = OperationName, XmlaRequestId, CorrelationId, CommandText = EventText;
let executionMetrics = PowerBIDatasetsWorkspace
| where OperationName == "ExecutionMetrics"
| project TimeGenerated, XmlaRequestId, CorrelationId, EventText;
commands
| join kind=leftouter executionMetrics on XmlaRequestId
다음 KQL 쿼리는 마지막 날 제한된 이벤트를 작업 영역, 항목, 사용자별로 검색합니다.
let executionMetrics = PowerBIDatasetsWorkspace
| where TimeGenerated > ago(1d)
| where OperationName == "ExecutionMetrics"
| extend eventTextJson = parse_json(EventText)
| extend capacityThrottlingMs=toint(eventTextJson.capacityThrottlingMs)
| where capacityThrottlingMs > 0;
let commands = PowerBIDatasetsWorkspace
| where OperationName in ("CommandEnd", "QueryEnd", "DiscoverEnd")
| project
TimeGenerated,
ExecutingUser,
ArtifactId,
PowerBIWorkspaceId,
CommandOperationName = OperationName,
XmlaRequestId,
CorrelationId,
CommandText = EventText;
commands
| join kind=inner executionMetrics on XmlaRequestId
| project
TimeGenerated,
ArtifactId,
PowerBIWorkspaceId,
ExecutingUser,
CommandOperationName,
XmlaRequestId,
EventText,
CommandText,
capacityThrottlingMs
| summarize countThrottling = count(), avgThrottlingDuration = avg(capacityThrottlingMs) by PowerBIWorkspaceId, ArtifactId, ExecutingUser, CommandOperationName
통계는 EventText 속성에 JSON 텍스트로 표시됩니다. 다음 예를 참조하세요.
{
"timeStart": "2024-03-20T12:39:59.681Z",
"timeEnd": "2024-03-20T13:01:14.241Z",
"durationMs": 1274559,
"vertipaqJobCpuTimeMs": 156,
"mEngineCpuTimeMs": 9617484,
"totalCpuTimeMs": 9618469,
"executionDelayMs": 10,
"approximatePeakMemConsumptionKB": 1683409,
"mEnginePeakMemoryKB": 1676816,
"tabularConnectionTimeoutMs": 18000000,
"refreshParallelism": 16,
"vertipaqTotalRows": 114,
"intendedUsage": 2
}
다음 표에서는 가능한 모든 속성을 설명합니다. 내용은 요청과 의미 체계 모델에 따라 달라지므로 모든 속성이 각 이벤트에서 내보내지는 것은 아닙니다.
속성 | 설명 |
---|---|
timeStart | 요청이 시작된 시점의 타임스탬프(UTC)입니다. |
timeEnd | 요청이 종료된 시점의 타임스탬프(UTC)입니다. |
durationMs | 실행의 총 지속 시간입니다. |
datasourceConnectionThrottleTimeMs | 데이터 원본 연결 제한에 도달한 후의 총 제한 시간입니다. 여기에서 최대 동시 연결에 대해 자세히 알아보세요. |
externalQueryExecutionTimeMs | 요청 중에 모든 외부 데이터 원본 쿼리를 실행하는 데 소요된 총 시간입니다. |
directQueryConnectionTimeMs | 요청 중에 새 DirectQuery 연결을 만드는 데 소요된 총 시간입니다. |
directQueryIterationTimeMs | DirectQuery 쿼리에서 반환된 결과를 반복하는 데 소요된 총 시간입니다. |
directQueryTotalTimeMs | 요청 중에 모든 DirectQuery 쿼리를 실행하고 읽는 데 소요된 총 시간입니다. |
executionDelayMs | Analysis Services 엔진 스레드 풀 스레드 가용성을 기다리는 데 소요된 총 시간입니다. |
totalCpuTimeMs | 요청의 총 CPU 시간입니다. |
vertipaqJobCpuTimeMs | Vertipaq 엔진에서 소요된 총 CPU 시간입니다. |
mEngineCpuTimeMs | PowerQuery 엔진에서 소요된 총 CPU 시간입니다. |
queryProcessingCpuTimeMs | Analysis Services 쿼리 스레드 풀 스레드의 작업에서 소요된 총 CPU 시간입니다. |
approximatePeakMemoryConsumptionKB | 요청 중 대략적인 최대 총 메모리 사용량입니다. |
mEnginePeakMemoryKB | 모든 PowerQuery 엔진 매시업 컨테이너에서의 대략적인 최대 메모리 커밋 크기(킬로바이트)입니다. |
directQueryTimeoutMs | DirectQuery 쿼리와 관련된 시간 제한입니다. |
externalQueryTimeoutMs | 외부 데이터 원본에 대한 쿼리와 관련된 시간 제한입니다. |
tabularConnectionTimeoutMs | 외부 테이블 형식 데이터 원본 연결(예: SQL)과 관련된 시간 제한입니다. |
refreshParallelism | 요청에 사용되는 유효한 MaxParallelism입니다. |
vertipaqTotalRows | 새로 고침 작업 중 Vertipaq 엔진에서 처리한 총 행 수입니다. |
queryResultRows | DAX 쿼리의 결과로 반환된 총 행 수입니다. |
directQueryTotalRows | 다양한 DirectQuery 쿼리에서 읽은 총 행 수입니다. |
directQueryRequestCount | DAX 엔진에서 실행한 총 DirectQuery 스토리지 엔진 쿼리 수입니다. |
errorCount | 현재 요청에 대한 총 오류 수입니다. |
qsoReplicaVersion | FILETIME 형식으로 표현되는 QSO 지원 의미 체계 모델의 복제본 버전입니다. |
intendedUsage | 용도: 기본값(0), 예약 또는 API 새로 고침(1), 요청 시 새로 고침(2), 대시보드 타일/쿼리 캐시 새로 고침(3) |
commandType | 클라이언트에서 요청한 Analysis Services 명령 유형(예: Batch, Statement, Backup,...) |
discoverType | 클라이언트에서 요청한 검색 유형입니다. 검색 유형 목록은 EventSubclass를 참조하세요. |
queryDialect | 서버를 쿼리하는 데 사용된 언어 클라이언트 유형: 알 수 없음(-1), MDX(0), DMX(1), SQL(2), DAX(3), JSON (4) |
capacityThrottlingMs | 용량 제한으로 인해 요청이 지연된 총 시간입니다. 여기에서 제한에 대해 자세히 알아보세요. |
- 모든 기간 및 CPU 시간은 밀리초 단위로 표시됩니다.
- 위 표에 설명된 것 이외의 추가 속성이 있을 수 있으며, 이러한 속성은 문서화되지 않은 것으로 간주되어야 하고 변경될 수 있습니다.
샘플 Log Analytics 쿼리
다음 샘플 쿼리 모음은 Power BI에서 Azure Log Analytics를 사용할 때 유용할 수 있습니다. Azure Portal에서 직접 실행하거나 API를 통해 실행하여 일반적으로 약 5~10분 전의 최신 데이터를 쿼리할 수 있습니다.
// log count per day for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| summarize count() by format_datetime(TimeGenerated, 'yyyy-MM-dd')
// average query duration by day for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| where OperationName == 'QueryEnd'
| summarize avg(DurationMs) by format_datetime(TimeGenerated, 'yyyy-MM-dd')
//query duration percentiles for a single day in 1 hour bins
PowerBIDatasetsWorkspace
| where TimeGenerated >= todatetime('2021-04-28') and TimeGenerated <= todatetime('2021-04-29')
| where OperationName == 'QueryEnd'
| summarize percentiles(DurationMs, 0.5, 0.9) by bin(TimeGenerated, 1h)
// refresh durations by workspace and semantic model for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| where OperationName == 'CommandEnd'
| where ExecutingUser contains 'Power BI Service'
| where EventText contains 'refresh'
| project PowerBIWorkspaceName, DatasetName = ArtifactName, DurationMs
// query count, distinctUsers, avgCPU, avgDuration by workspace for last 30d
PowerBIDatasetsWorkspace
| where TimeGenerated > ago(30d)
| where OperationName == "QueryEnd"
| summarize QueryCount=count()
, Users = dcount(ExecutingUser)
, AvgCPU = avg(CpuTimeMs)
, AvgDuration = avg(DurationMs)
by PowerBIWorkspaceId
샘플 Power BI 보고서 템플릿
GitHub에서 오픈 소스 Power BI 보고서 템플릿을 사용하여 Azure Log Analytics Power BI 데이터에 대한 인사이트를 탐색하고 가져옵니다.
관련 콘텐츠
다음 문서는 Power BI에 관해 설명하고 Power BI와 Azure Log Analytics와의 통합에 대해 유용한 정보를 제공합니다.