共用方式為


使用 Azure 監視器 Application Insights 監視 Azure Functions

Azure Functions 提供與 Application Insights 的內建整合來監視函式。 針對 .NET 和 .NETCore 以外的語言,需要其他語言特定的背景工作角色/延伸模組,才能取得分散式追蹤的完整優點。

Application Insights 會收集記錄、效能和錯誤資料,並自動偵測效能異常。 Application Insights 隨附強大的分析工具,以協助您診斷問題,以及了解如何使用您的函式。 您了解應用程式資料時,便可以持續改善效能和可用性。 您甚至可以在本機函式應用程式專案開發期間使用 Application Insights。

所需的 Application Insights 檢測已內建於 Azure Functions 中。 您只需要有效的連接字串,以便將您的函式應用程式連線至 Application Insights 資源。 您在 Azure 中建立函式應用程式資源時,應該將連接字串新增至應用程式設定。 如果您的函式應用程式還沒有連接字串,您可以手動設定。 如需詳細資訊,請參閱監視 Azure Functions 中的執行連接字串

附註

針對檢測金鑰擷取的支援將在 2025 年 3 月 31 日結束。 檢測金鑰擷取將會繼續運作,但我們不再提供該功能的更新或支援。 轉換至連接字串以利用新功能

如需支援自動偵測案例的清單,請參閱支援的環境、語言和資源提供者

Java 應用程式的分散式追蹤

附註

這項功能用來具有 8 到 9 秒的冷啟動影響,這已縮減為小於 1 秒。 如果您是此功能的早期採用者 (例如,在 2023 年 2 月之前),請檢閱緩慢 的啟動時間 以更新至目前版本,並受益於新的更快啟動。

若要從 Java 型 Azure Functions 應用程式檢視比 預設收集更多的資料,請啟用 Application Insights Java 3.x 代理程式。 此代理程式可讓 Application Insights 自動從熱門程式庫和 Azure 軟體開發套件 (SDK) 中收集並相互關聯相依性、記錄和計量。 此遙測可補強 Functions 已擷取的要求遙測。

藉由使用應用程式對應並擁有更完整的端對端交易檢視,您可以更妥善地診斷問題。 其中有系統如何與平均效能和錯誤率的資料互動的拓撲檢視。 其中也有更多資料用於端對端診斷。 您可以使用應用程式對應,找出可靠性問題的根本原因和每個要求的效能瓶頸。

如需更進階的使用案例,您可以藉由新增範圍、更新範圍狀態和新增範圍屬性來修改遙測。 您也可以使用標準 API 傳送自訂遙測。

為 Java Function 應用程式啟用分散式追蹤

在函式應用程式 [概觀] 窗格上,移至 Application Insights。 在 [集合層級] 下,選取 [建議]

顯示如何啟用 AppInsights Java 代理程式的螢幕擷取畫面。

組態

若要針對不在取用方案中的 Azure Function App 設定此功能,請在應用程式設定中新增環境變數。 若要檢閱可用的組態,請參閱組態選項:適用於 Java 的 Azure 監視器 Application Insights

對於取用方案中的 Azure Functions,可用的組態選項僅限於 APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL 和 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL。 若要在取用方案函式上進行其他組態,請部署您自己的代理程式,並參閱 Java Functions 的自訂分散式追蹤代理程式

部署您自己的代理程式會導致取用方案 Functions 的冷啟動時間更長。

疑難排解

如需疑難排解指引,請參閱 在 Azure Functions 上執行的 Java 應用程式問題

Node.js 函式應用程式的分散式追蹤

若要從您的 Azure Functions 上執行的 Node.js 應用程式檢視比使用自動檢測預設收集更多的資料,請使用 Azure 監視器 OpenTelemetry 發行版本手動檢測您的應用程式。

Python 函式應用程式的分散式追蹤

若要從 Requests、urllib3、httpx、PsycoPG2 等服務中收集遙測資料,請使用 Azure Monitor OpenTelemetry Distro。 傳入 Azure Functions 中裝載的 Python 應用程式的追蹤傳入要求不會自動與其中追蹤的遙測相互關聯。 您可以透過直接擷取 TraceContext 來手動達成追蹤相互關聯,如下所示:

import azure.functions as func

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract

# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()

def main(req: func.HttpRequest, context) -> func.HttpResponse:
   ...
   # Store current TraceContext in dictionary format
   carrier = {
      "traceparent": context.trace_context.Traceparent,
      "tracestate": context.trace_context.Tracestate,
   }
   tracer = trace.get_tracer(__name__)
   # Start a span using the current context
   with tracer.start_as_current_span(
      "http_trigger_span",
      context=extract(carrier),
   ):
      ...

後續步驟