Power BI 用に Azure Log Analytics を構成する
Power BI と Azure Log Analytics を統合すると、管理者と Premium ワークスペース所有者は、各自の Power BI サブスクリプションに Log Analytics 接続を構成できるようになります。 この記事では、Log Analytics と Power BI の間の統合が動作するしくみ、および環境に合わせてそれを構成する方法について説明します。
Power BI で Azure Log Analytics を動作させるための要素には、次の 2 つがあります。
- Azure portal で Azure サブスクリプションを構成します。
- Power BI 管理ポータルで Power BI の Log Analytics を有効にします。
以下のセクションでは、両方を行うステップを順番に説明します。
前提条件
Power BI からの Log Analytics の統合を構成する前に、Azure portal で Log Analytics ワークスペースを作成する必要があります。 また、Power BI サービスがログを書き込むためのアクセス許可を Azure で付与する必要があります。 正確な要件は次のとおりです。
- Azure サブスクリプションへの共同作成者アクセス。
- Power BI ログ データを収集する Azure サブスクリプションで、"microsoft insights" リソース プロバイダーを登録します。
- 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)] を選び、パネル上部の選択項目から [ロールの割り当て] を選んだ場合、現在のユーザーにはエントリが 1 つ表示されるはずです。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 Log Analytics から切断して、Azure へのログの送信を停止することができます。 切断するには、Power BI ワークスペースの [設定] で Log Analytics の設定に移動します。 [Azure から切断する] を選択します。 次に、[保存] を選択して切断します。
注意
Azure Log Analytics から Power BI ワークスペースを切断しても、ログは削除されません。 データは残っており、そこで設定したストレージと保持のポリシーに従います。
使用シナリオ
Azure Log Analytics と Power BI には、組織で実際に起きる課題を解決するためのさまざまな方法があります。 以下、具体例に沿って説明します。
- 容量、ワークスペース、レポート、またはユーザー別に、Analysis Services エンジンのアクティビティが高い、または異常な期間を特定します。
- 外部の DirectQuery 操作など、クエリのパフォーマンスと傾向を分析します。
- セマンティック モデルの更新期間、重複、処理のステップを分析します。
- Premium XMLA エンドポイントを使用して送信されたカスタム操作を分析します。
ログの使用方法と、それが組織にどのように役立ったかについて、Power BI コミュニティでフィードバックをお送りください。
エラーの状態と解決策
次の表では、一般的なエラー、それらをトリガーしたイベントまたは構成、推奨される解決策をまとめて示します。
トリガーの条件 | Type | メッセージ |
---|---|---|
Log Analytics ワークスペースに書き込むためのアクセス許可がない | エラー - 続行できません | この Log Analytics ワークスペースを Power BI に接続するには、そのワークスペースに対する書き込みアクセス許可が必要です。 お客様の組織で Azure サブスクリプションを管理している担当者に連絡して、この問題を解決してください。 |
Log Analytics ワークスペースのアカウントに書き込むためのアクセス許可がない | エラー - 続行できません | この Log Analytics ワークスペースを Power BI に接続するには、そのワークスペースに対する書き込みアクセス許可が必要です。 |
どの 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
- コマンド
- Deadlock
- DirectQuery
- 発見
- エラー
- ProgressReport
- クエリ
- セッションの初期化
- VertiPaqSEQuery
- Notification
次の表では、スキーマについて説明します。
プロパティ | 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 | セマンティック モデルのモード。 Import、DirectQuery、または Composite。 | |
DurationMs | Duration_s | 操作にかかった時間 (ミリ秒単位)。 |
User | 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 のセッション識別子。 |
Level | Severity_s | ログに記録されている操作の重大度レベルが含まれます。 Success、Informational、Warning、または Error。 |
ID | ユーザーと要求に関する情報。 | |
状態 | 操作の状態。 | |
EventText | TextData_s | 操作に関連付けられている詳細な情報が含まれます (DAX クエリなど)。 |
CustomerTenantId | 顧客の Power BI テナントの識別子。 | |
XmlaRequestId | RootActivityId_g | 要求の一意識別子。 |
ReplicaId | クエリ スケール アウト (QSO) が有効な場合に、レプリカを識別できるレプリカ ID。 読み取り/書き込みレプリカの ReplicaId は常に "AAA" であり、読み取り専用レプリカの ReplicaId は "AAB" 以降です。 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 エンジン マッシュアップ コンテナー全体のピーク メモリ コミット サイズ (KB 単位) の概算。 |
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 | クライアントによって要求された Discover の種類。 検出の種類の一覧については、EventSubclass を参照してください。 |
queryDialect | サーバーのクエリに使用した言語クライアントの種類: 不明 (-1); MDX (0); DMX (1); SQL (2); DAX (3); JSON (4) |
capacityThrottlingMs | 容量の調整が原因で要求が遅延した合計時間。 調整の詳細については、こちらを参照してください。 |
- すべての期間と CPU 時間はミリ秒単位で表示されます。
- 上記の表に記載されているプロパティ以外の追加のプロパティが発生する可能性があり、これらは文書化されていないと見なされ、変更される可能性があります。
Log Analytics KQL クエリの例
次の一連のサンプル クエリは、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 の概要、および Azure Log Analytics の統合について、さらに詳しく学習するときに役に立ちます。