將您的畫布應用程式連接到
Application Insights
,這是
Azure 監視器
的功能。 Application Insights 包括有助於診斷問題和了解應用程式中使用者行為的分析工具。 使用收集到的資訊來做出更好的業務決策並提高應用程式品質。
您需要存取
Azure 入口網站
。
您需要有
建立 Azure 資源
的權限。
要查看遙測資訊,您的租用戶管理員需要啟用
畫布應用程式深入解析
。 以管理員身分登入
Power Platform 系統管理中心
。 選擇
設定
>
租用戶設定
>
畫布應用程式深入解析
。 在
畫布應用程式深入解析
窗格中,
打開
切換開關並儲存變更。
如需深入了解,請參閱
租用戶設定
。
建立 Application Insights 資源
透過建立 Application Insights 資源來儲存事件,從應用程式傳送系統產生的記錄。
了解如何在 Azure 入口網站中為 Application Insights
建立以工作區為基礎的資源
。
連線您的應用程式到 Application Insights
指定連接字串時,請記住資料可以在租用戶之間傳送。 追蹤事件會傳送至對應於應用程式所設定之連接字串的 App Insights 資源,即使目標 App Insights 執行個體與應用程式位於不同的租用戶也是如此。
匯入現有的 .msapp 檔案時要小心,因為可能存在 App Insights 的連接字串。 匯入後手動開啟應用程式以檢查是否使用了正確的 App Insights 連接字串。
登入
Power Apps
。
打開應用程式來
編輯它
。
在左側導覽樹檢視中選擇
應用程式
物件,然後貼上 Application Insights 資源中的
連接字串
。
執行已發佈的應用程式,以將事件傳送到 Application Insights。 當您在 Power Apps Studio 中預覽應用程式時,事件不會傳送到 Application Insights。
檢視 Application Insights 中的事件
登入
Azure 入口網站
,並開啟
先前建立
的 Application Insights 資源。
在左側導覽窗格中,選擇
使用情況
區段下的
使用者
。
使用者
檢視會顯示應用程式使用情況的詳細資訊,例如:
檢視應用程式的使用者人數
使用者工作階段數目
記錄的事件數目
使用者的作業系統及瀏覽器版本詳細資料
使用者所在的區域與位置
深入了解 Application Insights 中的使用者、工作階段及事件分析
。
選擇使用者工作階段以查看具體詳細資訊,例如工作階段長度和存取的螢幕。
發生哪些錯誤
當使用者瀏覽您的應用程式並採取行動時,追蹤功能會傳送一系列資訊來幫助您診斷問題。 傳送至 Application Insights 的追蹤訊息,其嚴重性會是以下三種之一:
Error
根據情況傳送具有適當嚴重程度的追蹤訊息。 您可以查詢資料,並根據嚴重性採取特定動作。
如果您要記錄任何個人資料,請注意您在各種隱私權法律和法規方面的義務。 如需詳細資訊,請參閱
Microsoft 信任中心
和
服務信任入口網站
。
在您的應用程式中建立一個元件來收集每個螢幕上的意見反應,並將事件記錄到 Application Insights。
登入
Power Apps
。
在左導覽窗格中,選取
Apps
。 從應用程式清單選取
Kudos
應用程式,然後選取
編輯
。
您也可以
建立
新的應用程式,或
編輯
現有的應用程式。
在
樹狀檢視
中選擇
元件
:
選取圖示、選取
其他動作
(
…
),然後選取
重新命名
,使用有意義的名稱 (例如
FrownIcon
和
SmileIcon
) 來重新命名圖示。
選擇
FrownIcon
,選擇
OnSelect
屬性,然後在資料編輯列中輸入下列運算式:
Trace(
"App Feedback",
TraceSeverity.Information,
UserName: User().FullName,
UserEmail: User().Email,
Screen: FeedbackComponent.FeedbackScreen.Name,
FeedbackValue: "-1"
Notify("Thanks for your feedback!");
UserName: User().FullName,
UserEmail: User().Email,
Screen: FeedbackComponent.FeedbackScreen.Name,
FeebackValue: "1"
Notify("Thanks for your feedback!");
將元件新增至應用程式中的其中一個畫面控制項:
使用下列範例查詢來擴充 JSON 自訂維度的屬性並在結果檢視中投影資料欄。
traces
| extend customdims = parse_json(customDimensions)
| where message == "App Feedback"
| project timestamp
, message
, AppName = customdims.['ms-appName']
, AppId = customdims.['ms-appId']
, FeedbackFrom = customdims.UserEmail
, Screen = customdims.Screen
, FeedbackValue = customdims.FeedbackValue
| order by timestamp desc
在 Application Insights 中分析應用程式生命週期資料
工作階段摘要事件每個工作階段記錄一次,包含有關應用程式開啟成功、應用程式開啟最佳與非最佳工作階段以及應用程式開啟效能指標的資訊。
這些事件對於在 Web 瀏覽器中執行的畫布應用程式來說是準確的。 它們不適用於在 Power Apps 行動版中執行的應用程式,而且它們的值對於自訂頁面可能並不總是可用或準確的。
以下是一個範例查詢,展示如何存取工作階段摘要事件和所有可用欄位:
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| extend unsuccessfulReason = tostring(sessionSummary["unsuccessfulReason"])
| extend appLoadResult = tostring(sessionSummary["appLoadResult"])
| extend appLoadNonOptimalReason =
tostring(sessionSummary["appLoadNonOptimalReason"])
| extend timeToAppInteractive = todouble(sessionSummary["timeToAppInteractive"])
| extend timeToAppFullLoad = todouble(sessionSummary["timeToAppFullLoad"])
| project
timestamp,
session_Id,
successfulAppLaunch,
unsuccessfulReason,
appLoadResult,
appLoadNonOptimalReason,
timeToAppInteractive,
timeToAppFullLoad
| limit 5
以下欄位有助於衡量與終端使用者體驗相關的應用程式開啟成功率和效能標記的延遲。
Description
appLoadNonOptimalReason
如果工作階段不是最佳的,這將指出原因。 可能的值:interaction-required、throttled、screen-navigated-away、other
timeToAppInteractive
應用程式工作階段達到互動狀態所需的時間 (以毫秒為單位)。 在此狀態下,使用者可以開始與第一個螢幕進行互動,但資料可能尚未完全載入。
應用程式滿載時間
應用程式工作階段達到完全載入狀態所需的時間 (以毫秒為單位),其中第一個螢幕的所有資料請求均已完成載入。
應用程式打開成功率
此查詢將顯示按天的應用程式開啟成功率。 這可以用來評估使用者可能遇到的問題的峰值或趨勢
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| summarize
sessions_total = dcount(session_Id),
sessions_success = dcountif(session_Id, successfulAppLaunch == true)
by bin(timestamp, 1d)
| extend successRate =
100.0 * (todouble(sessions_success) / todouble(sessions_total))
| project timestamp, successRate
| render timechart
按原因統計的不成功工作階段數
此查詢將顯示按原因/錯誤計算的不成功工作階段的數量。 這可用於偵錯應用程式開啟失敗或評估使用者可能遇到的問題的趨勢。
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| extend unsuccessfulReason = tostring(sessionSummary["unsuccessfulReason"])
| where successfulAppLaunch == false
| summarize
count()
by unsuccessfulReason, bin(timestamp, 1d)
| render timechart
此查詢將顯示按天的應用程式開啟效能指標。 這可用於評估一段時間內或進行變更後的效能趨勢。
我們建議:
使用 timeToAppInteractive 和 timeToAppFullLoad 欄位的第 75 個百分位數,來避免異常值所造成的雜訊。
僅篩選最佳工作階段,以避免預期情況 (例如具有使用者互動的工作階段、應用程式在背景索引標籤中載入的工作階段等) 所導致的資料雜訊。
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend appLoadResult = tostring(sessionSummary["appLoadResult"])
| extend timeToAppInteractive = todouble(sessionSummary["timeToAppInteractive"])
| extend timeToAppFullLoad = todouble(sessionSummary["timeToAppFullLoad"])
| where appLoadResult == "optimal"
| summarize
percentile(timeToAppInteractive, 75),
percentile(timeToAppFullLoad, 75)
by bin(timestamp, 1d)
| render timechart
HTTP 呼叫時的應用程式載入狀態
有一個新的請求標頭 x-ms-app-load-state,用於指示 HTTP 呼叫是否有助於應用程式啟動。 具體來說,這可用於確定哪些 HTTP 呼叫影響了上面的 timeToAppFullLoad。
標頭可以是以下兩個值之一:
Description
下面是一個範例查詢,展示如何存取標頭值並將其投影到 appLoadState 資料欄中:
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| project timestamp, session_Id, appLoadState, name, duration
| limit 5
導致滿載的 HTTP 呼叫次數
此查詢將顯示按天對 timeToAppFullLoad 有貢獻的 HTTP 呼叫的平均次數。 這可用於評估應用程式在啟動時進行的呼叫次數,這些呼叫次數可能會導致效能不佳。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize httpCalls = count() by session_Id, bin(timestamp, 1d)
| summarize avg(httpCalls) by timestamp
| render timechart
導致滿載的 HTTP 呼叫時長
此查詢將顯示按天計入 timeToAppFullLoad 的 HTTP 呼叫的總時長。 這可用於評估 HTTP 呼叫對應用程式啟動效能的整體影響。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize httpCallDuration = sum(duration) by session_Id, bin(timestamp, 1d)
| summarize percentile(httpCallDuration, 80) by timestamp
| render timechart
導致 URL 滿載的 HTTP 呼叫時長
與上方類似,此查詢將顯示按 URL 計算的對 timeToAppFulLoad 有貢獻的 HTTP 呼叫次數和持續時間。 這可用於識別影回應用程式啟動效能的特定慢速 HTTP 呼叫。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize
count(), percentile(duration, 80) by name
監視未處理的錯誤 (實驗性)
[本節包含發佈前文件,日後可能會變更。]
這是實驗性功能。
實驗性功能不供生產時使用,而且可能功能受限。 這些功能是在正式發行前先行推出,讓客戶能夠搶先體驗並提供意見反應。
您無法始終預測或規劃應用程式執行時可能發生的每個錯誤。 未處理的 Power Fx 公式錯誤會以橫幅訊息的形式回報給使用者。 它們還可以報告給 Application Insights 以顯示其頻率和嚴重性,而無需依賴應用程式的使用者報告問題。 您也可以針對發生執行階段錯誤的情況設定即時警示,以便採取更主動的方法。
啟用將錯誤傳遞至 Application Insights
啟用該設定,允許 Power Apps 將未處理的執行階段錯誤傳遞給 Azure Application Insights。
啟用將錯誤傳遞到 Azure Application Insights設定可能會產生儲存 Application Insights 記錄的額外費用。
開啟畫布應用程式進行編輯。
選擇設定>更新>實驗,然後開啟將錯誤傳遞到 Azure Application Insights。
儲存然後發佈您的應用程式。
Application Insights 中的錯誤事件
使用者在應用程式執行階段遇到的未處理 Power Fx 錯誤將報告給追蹤表。 未處理的錯誤可以透過事件訊息 "未處理的錯誤" 來識別,並與其他錯誤事件區分。這些事件的 "severityLevel" 維度為 3 (TraceSeverity.Error)。
customDimension 屬性的「錯誤」維度中會提供詳細的錯誤訊息。 在同一作業期間發生多個錯誤的情況下,這些錯誤會合併到單一追蹤事件的「錯誤」維度中。 錯誤訊息與即時偵錯工作階段期間監視器中報告的錯誤訊息一致。
此範例查詢識別未處理的錯誤並展開追蹤事件中的所有錯誤訊息:
traces
| where message == "Unhandled error"
| extend customdims = parse_json(customDimensions)
| extend errors = parse_json(tostring(customdims.['errors']))
| mv-expand errors
| project timestamp
, itemId //unique identifier for the trace event
, AppName = customdims.['ms-appName']
, AppId = customdims.['ms-appId']
, errors = errors.['Message']
| order by timestamp desc
對於大多數應用程式來說,連接外部資料和服務至關重要。 關聯追蹤產生並傳播上下文訊息,以連結畫布應用程式及其連接中的系統產生的記錄,但受到某些限制。 例如,您的應用程式可能會呼叫自訂連接器,然後呼叫 Azure 函數或其他 REST API。 關聯性追蹤可讓您將應用程式中執行的動作與跨層的基礎 API 呼叫相互關聯。 這對於疑難排解很有用。
畫布應用程式關聯追蹤實現上下文追蹤,遵循 W3C 規範。
啟用關聯性追蹤
啟用此設定可能會產生與儲存 Application Insights 記錄相關的額外費用。
若要啟用關聯追蹤,請開啟畫布應用程式進行編輯。
選擇設定>更新>實驗>,然後開啟啟用 Azure Application Insights 關聯追蹤。
儲存並發佈應用程式。
關聯追蹤僅適用於自訂連接器。 不支援其他連接器類型。
只有在連線服務也連接至 Application Insights 時,才會在 Application Insights 中擷取 HTTP 要求。
使用關聯性追蹤
啟用時,關聯性追蹤會在畫布應用程式 Application Insights 執行個體的相依性資料表中新增系統產生的記錄檔事件。 此事件是在收到網路呼叫的回應時所記錄。 相依性事件會擷取網路呼叫的詳細資料,包括要求和回應標頭、回應狀態碼以及呼叫期間。
將支援的連接器的網路呼叫與「operation_Id」維度上的其他系統產生的記錄連接起來。 以下查詢顯示網路呼叫以及應用程式工作階段期間發出的追蹤事件。
traces | union dependencies | union requests | union pageViews | union customEvents
| project timestamp
, itemType
, name
, operation_Name
, message
, severityLevel
, customDimensions
, operation_Id
, operation_ParentId
| where operation_Id == "0a7729e3e83c4e4d93cb4f51149f73b9" //placeholder operation_Id, replace
| order by timestamp asc
您可以匯出您的 Application Insights 資料和查詢結果到 Power BI 進行分析和資料展示。
登入 Azure 入口網站並開啟您先前設定的 Application Insights 資源。
在左側導覽窗格中選擇監控下的記錄。
在記錄分析查詢視窗中,選擇匯出功能表。
選擇匯出至 Power BI (M 查詢) 下載 Power BI 查詢檔案。
ms-appSessionId
應用程式工作階段識別碼。 在某些情況下可能不會填入此值。 如果可用時,此值會覆寫標準 Application Insights sessionID 維度。
ms-tenantID
發佈應用程式之租用戶的唯一識別碼。
ms-environmentId
發佈應用程式之環境的名稱。
userId
與工作階段相關聯之使用者的唯一識別碼。
ms-duration
衡量使用者從一個畫面瀏覽到另一個畫面所需時間的估算值。 此值會覆寫標準 Application Insights PageView 期間維度。
sessionId
可用於關聯與單一應用程式工作階段關聯的所有事件的工作階段識別碼。 此值一直存在,建議用於了解唯一工作階段計數。 此值取自播放程式的工作階段識別碼,並在播放應用程式時查看工作階段詳細資料時顯示。 工作階段 ID 有時可能會獲得一個預設的、隨機的、唯一 Application Insights 產生的值。 此預設值並不可靠,且與任何特定應用程式的參數無關。
衡量使用者從一個畫面瀏覽到另一個畫面所需時間的估算值。 該值與 ms-duration 維度報告的持續時間相符。
ms-isTest
指示工作階段是否與 Test Studio 測試執行器相關聯。
ms-currentScreenName
使用者導覽的頁面的名稱 (可用於頁面導覽事件)。
ms-targetScreenName
使用者瀏覽至之頁面的名稱 (出現在頁面瀏覽事件)。
不支援的案例
Application Insights 不支援這些情境。
離線玩家事件不會被記錄。
當行動應用程式 (iOS 和 Android) 暫停時,不會記錄來自該應用程式的事件。