將您的畫布應用程式連接到 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 資源中的連接字串。
Save 並 Publish 您的應用程式。
播放發佈的應用程式,並瀏覽不同的畫面。
當您瀏覽應用程式畫面時,事件會自動記錄到 Application Insights。 其中包括以下使用細節:
- 使用者從哪裡存取應用程式
- 使用者使用哪些裝置
- 使用者使用的瀏覽器類型
重要
執行已發佈的應用程式,以將事件傳送到 Application Insights。 當您在 Power Apps Studio 中預覽應用程式時,事件不會傳送到 Application Insights。
檢視 Application Insights 中的事件
登入 Azure 入口網站,並開啟先前建立的 Application Insights 資源。
在左側導覽窗格中,選擇使用情況區段下的使用者。
注意
使用者檢視會顯示應用程式使用情況的詳細資訊,例如:
- 檢視應用程式的使用者人數
- 使用者工作階段數目
- 記錄的事件數目
- 使用者的作業系統及瀏覽器版本詳細資料
- 使用者所在的區域與位置
選擇使用者工作階段以查看具體詳細資訊,例如工作階段長度和存取的螢幕。
在左側導覽窗格中,選擇使用情況區段下的事件。 您可以查看所有應用程式工作階段中查看的所有螢幕的摘要。
建立自訂追蹤事件
將自訂追蹤寫入 Application Insights,以分析與您的應用程式相關的資訊。 Trace 函數可讓您收集:
- 螢幕上控制項的詳細使用資訊
- 哪些特定使用者正在存取您的應用程式
- 發生哪些錯誤
當使用者瀏覽您的應用程式並採取行動時,追蹤功能會傳送一系列資訊來幫助您診斷問題。 傳送至 Application Insights 的追蹤訊息,其嚴重性會是以下三種之一:
- 資訊
- 警告
- Error
根據情況傳送具有適當嚴重程度的追蹤訊息。 您可以查詢資料,並根據嚴重性採取特定動作。
注意
如果您要記錄任何個人資料,請注意您在各種隱私權法律和法規方面的義務。 如需詳細資訊,請參閱 Microsoft 信任中心和服務信任入口網站。
在您的應用程式中建立一個元件來收集每個螢幕上的意見反應,並將事件記錄到 Application Insights。
登入 Power Apps。
在左導覽窗格中,選取 Apps。 從應用程式清單選取 Kudos 應用程式,然後選取編輯。
在樹狀檢視中選擇元件:
選擇新元件,然後將寬度調整為 200,高度調整為 75:
從功能表選取 Insert,然後選取 Icons 新增 Emoji - Frown 和 Emoji - Smile:
選取 New custom property 建立自訂屬性:
輸入屬性名稱和顯示名稱 (例如,FeedbackScreen)。
輸入屬性描述。
選取 Property type 作為 Input,而 Data type 作為 Screen:
注意
輸入屬性可讓您擷取螢幕名稱及其元件,以將此資訊記錄到 Application Insights。
在樹狀檢視中選擇元件,選擇更多動作 (...),然後選擇重新命名以便為元件賦予有意義的名稱,例如 FeedbackComponent。
選取圖示、選取其他動作 (…),然後選取重新命名,使用有意義的名稱 (例如 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、UserEmail、Screen 和 Feedback (值為 -1) 傳送至 Application Insights。
選取 SmileIcon,選取 OnSelect 屬性,然後在公式列中輸入下列運算式:
Trace( "App Feedback", TraceSeverity.Information, { UserName: User().FullName, UserEmail: User().Email, Screen: FeedbackComponent.FeedbackScreen.Name, FeebackValue: "1" } ); Notify("Thanks for your feedback!");將元件新增至應用程式中的其中一個畫面控制項:
選取 Save,然後選取 Publish 儲存並發佈您的應用程式。
執行已發佈的應用程式,並從其畫面傳送「滿意」或「不滿意」的意見反應。
重要
您必須播放發佈的應用程式才能將事件傳送到 Application Insights。 當您在 Application Insights 預覽應用程式時,事件不會傳送到 Power Apps Studio。
在 Application Insights 中分析自訂資料
您現在可以開始使用 Application Insights 中您的應用程式的 Trace 功能分析傳送的資料。
登入 Azure 入口網站,開啟您先前建立的 Application Insights 資源。
在左側導覽窗格中選擇監控下的記錄。
輸入以下查詢,然後選擇執行,以查看應用程式的意見反應:
traces | where message == "App Feedback" | order by timestamp
選取結果中的一列,然後展開 customDimensions 欄位。
記錄元件中微笑或皺眉圖示的 OnSelect 事件的 Screen、UserName、UserEmail 和 FeedbackValue 的值。 還會記錄每個傳送至 Application Insights 之事件的值,例如 appId、appName 和 appSessionId。
使用下列範例查詢來擴充 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 |
|---|---|
| successfulAppLaunch | 布林值,指示工作階段是否成功啟動應用程式 |
| unsuccessfulReason | 如果工作階段無法啟動應用程式,則表示原因/錯誤。 如果工作階段成功,則該欄位將為空字串。 |
| appLoadResult | 指示工作階段是否最佳。 可能的值:最佳、其他 |
| 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 |
|---|---|
| TTFL | 表示該請求對 timeToAppFullLoad 有所貢獻 |
| PostTTFL | 表示該請求未對 timeToAppFullLoad 做出貢獻 |
下面是一個範例查詢,展示如何存取標頭值並將其投影到 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 執行個體的相依性資料表中新增系統產生的記錄檔事件。 此事件是在收到網路呼叫的回應時所記錄。 相依性事件會擷取網路呼叫的詳細資料,包括要求和回應標頭、回應狀態碼以及呼叫期間。
如果連線服務也已連接至 Application Insights,則擷取要求的其他系統產生的記錄檔會在服務的 Application Insights 執行個體的要求資料表中產生。 有些 Azure 服務 (例如 Azure Functions) 無需在 Azure 入口網站中撰寫任何程式碼即可連接。 畫布應用程式或多個應用程式和連線服務都可以連接至同一個 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
將資料匯出至 Power BI
您可以匯出您的 Application Insights 資料和查詢結果到 Power BI 進行分析和資料展示。
登入 Azure 入口網站並開啟您先前設定的 Application Insights 資源。
在左側導覽窗格中選擇監控下的記錄。
在記錄分析查詢視窗中,選擇匯出功能表。
選擇匯出至 Power BI (M 查詢) 下載 Power BI 查詢檔案。
在文字編輯器中開啟下載的文件,然後將查詢複製到剪貼簿。
開啟 [Power BI]。
在首頁功能區中選擇取得資料,然後選擇空白查詢。
在查詢視窗中,選擇進階編輯器,將查詢貼到視窗中,選擇完成,然後選擇關閉並套用。
在 Power BI 中建立圖表和視覺化效果以表示來自應用程式的意見反應,並做出資料驅動的決策。
預設追蹤事件上下文和維度
在每個追蹤事件中,都會將預設維度新增至 customDimensions 屬性。 這些維度標識了發生事件的應用程式和應用程式工作階段。 如果您使用追蹤功能記錄其他自訂資料,它也會出現在自訂維度中。
| 維度名稱 | 代表 |
|---|---|
| ms-appId | 傳送事件的應用程式的 應用程式識別碼。 |
| ms-appname | 傳送事件的應用程式的應用程式名稱。 |
| 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) 暫停時,不會記錄來自該應用程式的事件。