分析 Application Insights 中的 Azure Functions 遙測

Azure Functions 與 Application Insights 整合,讓您更能監視函式應用程式。 Application Insights 會收集函式應用程式所產生的遙測資料,包括應用程式寫入記錄的資訊。 建立函式應用程式時,通常會啟用 Application Insights 整合。 如果您的函式應用程式沒有檢測金鑰集,您必須先啟用 Application Insights 整合

根據預設,從函式應用程式收集的資料會儲存在 Application Insights 中。 在 Azure 入口網站中,Application Insights 提供一組廣泛的遙測資料視覺效果。 您可以深入了解錯誤記錄和查詢事件和計量。 本文提供如何檢視和查詢您所收集資料的基本範例。 若要深入了解如何在 Application Insights 中探索函式應用程式資料,請參閱什麼是 Application Insights?

若要檢視函數應用程式的 Application Insights 資料,您必須至少擁有函數應用程式的參與者角色權限。 您也需要擁有 Application Insights 執行個體的監視讀者權限。 根據預設,您會擁有您所建立的任何函數應用程式和 Application Insights 執行個體的這些權限。

若要深入了解資料保留和潛在的儲存體成本,請參閱 Application Insights 中的資料收集、保留和儲存體

在監視索引標籤中檢視遙測

藉由啟用 Application Insights 整合,您可以在 [監視器] 索引標籤中檢視遙測資料。

  1. 在函式應用程式頁面中,選取在設定 Application Insights 之後至少執行過一次的函式。 然後,從左窗格中選取 [監視器]。 定期選取 [重新整理],直到函式引動過程的清單出現為止。

    Invocations list

    注意

    當遙測用戶端將資料分批傳輸到伺服器時,可能需要五分鐘的時間,清單才會出現。 此延遲不適用即時計量資料流。 當您載入頁面時,該服務會連線到 Functions 主機,以便將記錄直接串流處理到頁面。

  2. 若要查看特定函式引動過程的記錄,請選取該引動過程的 [日期 (UTC)] 資料行連結。 該引動過程的記錄輸出會顯示在新頁面中。

    Invocation details

  3. 選擇 [在 Application Insights 中執行],以檢視可在 Azure 記錄中擷取 Azure 監視器記錄資料的查詢來源。 如果這是您第一次在訂用帳戶中使用 Azure Log Analytics,系統就會要求您進行啟用。

  4. 啟用 Log Analytics 之後,即會顯示下列查詢。 您可以看到查詢結果限制為過去 30 天 (where timestamp > ago(30d)),而結果會顯示不超過 20 個資料列 (take 20)。 相反地,您函式的引動過程詳細資料清單適用於過去 30 天且無任何限制。

    Application Insights Analytics invocation list

如需詳細資訊,請參閱本文稍後的查詢遙測資料

在 Application Insights 中檢視遙測

若要從 Azure 入口網站中的函式應用程式開啟 Application Insights:

  1. 瀏覽至入口網站中的函式應用程式。

  2. 在左側頁面的 [設定] 底下,選取[Application Insights]

  3. 如果這是您第一次使用 Application Insights 搭配您的訂用帳戶,將提示您啟用它。 若要這樣做,請選取 [開啟 Application Insights],然後在下一個頁面上選取 [套用]

Open Application Insights from the function app Overview page

如需如何使用 Application Insights 的相關資訊,請參閱 Application Insights 文件。 本節示範一些如何在 Application Insights 中檢視資料的範例。 如果您已經熟悉 Application Insights,即可直接前往關於如何設定和自訂遙測資料的小節

Application Insights Overview tab

評估函式中的行為、效能和錯誤時,Application Insights 的下列區域很實用:

調查 描述
失敗 根據函式失敗和伺服器例外狀況,建立圖表和警示。 作業名稱是函式名稱。 除非您實作自訂遙測來取得相依性,否則不會顯示相依性中的失敗。
效能 藉由檢視每個雲端角色執行個體的資源使用率和輸送量,來分析效能問題。 如果要對函式拖累基礎資源的案例進行偵錯,此效能資料非常有用。
計量 建立以計量為基礎的圖表和警示。 計量包括函式引動過程的數目、執行時間和成功率。
即時計量 檢視以近乎即時方式建立的計量資料。

查詢遙測資料

Application Insights 分析可讓您在資料庫中,以資料表形式存取所有遙測資料。 分析會提供用於擷取、操作和視覺化資料的查詢語言。

選擇 [記錄] 以探索或查詢記錄的事件。

Analytics example

以下的查詢範例會顯示過去 30 分鐘內每個背景工作角色的要求分佈狀況。

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

可用的資料表會顯示於左側 [結構描述] 索引標籤中。 您可以找到下表中函式引動過程所產生的資料:

資料表 Description
traces 執行階段、縮放控制器和來自您的函式程式碼的追蹤所建立的記錄。
requests 每個函式引動過程一個要求。
exceptions 由執行階段擲回的任何例外狀況。
customMetrics 成功和失敗引動過程的計數、成功率、持續時間。
customEvents 執行階段追蹤的事件,例如:觸發函式的 HTTP 要求。
performanceCounters 函式執行所在的伺服器效能相關資訊。

其他資料表適用於可用性測試,以及用戶端和瀏覽器遙測。 您可以實作自訂遙測,將資料新增至它們。

在每個資料表內,一些 Functions 特有的資料會位於 customDimensions 欄位中。 例如,下列查詢會擷取記錄層級為 Error 的所有追蹤。

traces 
| where customDimensions.LogLevel == "Error"

執行階段會提供 customDimensions.LogLevelcustomDimensions.Category 欄位。 您可以在函式程式碼內撰寫的記錄中提供額外的欄位。 如需 C# 中的範例,請參閱 .NET 類別庫開發人員指南中的結構化記錄

查詢函式叫用

系統會為每個函式叫用指派唯一識別碼。 InvocationId 包含在自訂維度中,可用來關聯特定函式執行產生的所有記錄。

traces
| project customDimensions["InvocationId"], message

遙測相互關聯

來自不同函式的記錄可以使用 operation_Id 相互關聯。 使用下列查詢以傳回特定邏輯作業的所有記錄。

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

取樣百分比

取樣設定可用來減少遙測量。 使用下列查詢來判斷取樣是否正常運作。 如果您看到任何類型的 RetainedPercentage 小於 100,則表示正在對該類型的遙測進行取樣。

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

查詢縮放控制器記錄

這項功能處於預覽狀態。

啟用縮放控制器記錄Application Insights 整合之後,您可以使用 Application Insights 記錄搜尋來查詢發出的縮放控制器記錄。 縮放控制器記錄會儲存在 ScaleControllerLogs 類別下的 traces 集合中。

下列查詢可用來搜尋指定時段內的目前函式應用程式的所有縮放控制器記錄:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

下列查詢會就先前的查詢擴大,以顯示如何只取得指出大規模變更的記錄:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

取用方案特定的計量

取用方案中執行時,單一函式執行的執行成本會以 GB-秒為單位來測量。 執行成本的計算方式是將其記憶體使用量與其執行時間結合。 若要深入了解,請參閱估計取用方案成本

下列遙測查詢為會影響取用方案中執行函式成本的計量特定。

決定記憶體使用量

在 [監視] 下,選取 [記錄 (分析)],並複製下列遙測查詢,然後將其貼入查詢視窗,再選取 [執行]。 此查詢會傳回每個取樣時間的總記憶體使用量。

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

結果與下列範例類似:

時間戳記 [UTC] NAME value
9/12/2019, 1:05:14.947 AM 私用位元組 209,932,288
9/12/2019, 1:06:14.994 AM 私用位元組 212,189,184
9/12/2019, 1:06:30.010 AM 私用位元組 231,714,816
9/12/2019, 1:07:15.040 AM 私用位元組 210,591,744
9/12/2019, 1:12:16.285 AM 私用位元組 216,285,184
9/12/2019, 1:12:31.376 AM 私用位元組 235,806,720

決定持續時間

Azure 監視器會追蹤資源層級的計量,而這對於 Functions 來說就是函式應用程式。 Application Insights 整合會根據每個函式來發出計量。 以下是取得函式平均持續時間的範例分析查詢:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
NAME averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

下一步

深入了解如何監視 Azure Functions: