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 を有効にします。

以下のセクションでは、両方を行うステップを順番に説明します。

[設定] ペインで [Azure 接続] タブが開いているスクリーンショット。

前提条件

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" リソース プロバイダーが有効になっている必要があります。 次の手順に従ってそのプロセスを実行します。

  1. Azure portal にサインインして、Log Analytics で使用し、Log Analytics ワークスペースを格納するサブスクリプションを選択します。 次の図で示すように、 [設定] セクションで [リソース プロバイダー] を選択します。

    [設定] メニュー オプションのスクリーンショット。[リソース プロバイダー] が選択されています。

  2. [リソース プロバイダー][microsoft.insights] を探します。 次に、 [登録] を選択します。

    Microsoft.insights が登録されているメイン ペインの [リソース プロバイダー] のスクリーンショット。

アクセス許可を設定する

  1. 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 にワークスペース ログを送信できるようになります。

  1. Power BI 管理ポータル[テナント設定] > [監査と使用状況の設定] の順に移動し、[ワークスペース管理者の Azure Log Analytics 接続] を展開します。 ワークスペース管理者が Log Analytics を有効にするには、スライダーを [有効] に設定し、必要なセキュリティ グループを [適用先] で指定します。次の画像をご覧ください。

    管理ポータルの [テナント設定] のスクリーンショット。ワークスペース管理者向けの Azure Log Analytics 接続が展開され、有効になっています。

Premium ワークスペースでログを構成する

  1. Premium ワークスペースでは、ワークスペース管理者は Log Analytics を有効にすることができます。 そのためには、次の画像に示すように [設定] に移動します。

    Premium ワークスペースの [設定] ペインのスクリーンショット。

  2. [設定] ペインで [Azure 接続] を選択してから、次の画像に示すように [Log Analytics] を展開します。

    [設定] ペインの [Azure 接続] タブが開き、[Log Analytics] が展開されているスクリーンショット。

  3. Azure サブスクリプション、リソース グループ、前のセクションで構成した Log Analytics ワークスペースを選択します。 [保存] を選択します。 正常に完了すると、展開されたテナントレベルの [Log Analytics] セクションは次の画像のようになります。

    [設定] ペインの [Azure 接続] タブが開き、サンプル情報が表示されているスクリーンショット。

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 イベント

DiscoverCommandQuery 要求ごとに、要求の最後に 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 の統合について、さらに詳しく学習するときに役に立ちます。