應用程式對應:分級分散式應用程式

應用程式對應代表分散式應用程式的邏輯結構。 應用程式的個別元件是由記錄遙測中的 「roleName」 或 「name」 屬性所決定。 這些元件會以地圖上的圓形表示,並稱為「節點」。節點之間的 HTTP 呼叫會以連接這些節點的箭號表示,稱為「連接器」或「邊緣」。進行呼叫的節點是呼叫的「來源」,而接收節點是呼叫的「目標」。

應用程式對應可協助您找出分散式應用程式所有元件的效能瓶頸或失敗熱點。 對應中的每個節點都代表應用程式元件或其相依性,並具有健康情況 KPI 和警示狀態。 您可以選取任何元件以取得更詳細的診斷,例如 Application Insights 事件。 如果您的應用程式使用 Azure 服務,您也可以選取 Azure 診斷,例如SQL 資料庫 Advisor 建議。

應用程式對應也提供 智慧型檢視 ,以協助快速服務健康情況調查。

什麼是元件?

元件是分散式或微服務應用程式的可獨立部署元件。 開發人員和作業小組可在程式碼層級查看或存取這些應用程式元件所產生的遙測。 例如:

  • 元件與「觀察到」的外部相依性不同,例如 Azure SQL 和Azure 事件中樞,您的小組或組織可能無法存取這些相依性(程式碼或遙測)。
  • 元件會在任意數目的伺服器、角色或容器實例上執行。
  • 元件可以是個別的 Application Insights 資源,即使訂用帳戶不同也一樣。 它們也可以是向單一 Application Insights 資源報告的不同角色。 預覽對應體驗會顯示元件,不論其設定方式為何。

複合應用程式對應

您可以查看跨多個相關應用程式元件層級的完整應用程式拓撲。 元件可以是不同的 Application Insights 資源,或單一資源中的不同角色。 應用程式對應會遵循安裝 Application Insights SDK 的伺服器之間的 HTTP 相依性呼叫來尋找元件。

此體驗一開始會漸進地探索元件。 當您第一次載入應用程式對應時,會觸發一組查詢,以探索與此元件相關的元件。 左上角的按鈕會在探索到元件時,更新應用程式中的元件數目。

當您選取 [ 更新對應元件 ] 時,地圖會以探索到該點的所有元件重新整理。 視應用程式的複雜度而定,此更新可能需要一分鐘的時間才能載入。

如果所有元件都是單一 Application Insights 資源內的角色,則不需要此探索步驟。 這類應用程式一開始會載入所有元件。

Screenshot that shows an example of an application map.

此體驗的其中一個主要目標,是要能夠以視覺化方式顯示含有數百個元件的複雜拓撲。

選取任何元件以查看相關的深入解析,並移至該元件的效能和失敗分級體驗。

Diagram that shows application map details.

調查失敗

選取 [ 調查失敗] 以開啟 [ 失敗] 窗格。

Screenshot that shows the Investigate failures button.

Screenshot that shows the Failures screen.

調查效能

若要針對效能問題進行疑難排解,請選取 [ 調查效能 ]。

Screenshot that shows the Investigate performance button.

Screenshot that shows the Performance screen.

前往詳細資料

[ 移至詳細資料 ] 按鈕會顯示端對端交易體驗,其提供呼叫堆疊層級的檢視。

Screenshot that shows the Go to details button.

Screenshot that shows the End-to-end transaction details screen.

檢視記錄 (Analytics)

若要進一步查詢及調查您的應用程式資料,請選取 [ 記錄中的檢視] [分析]。

Screenshot that shows the View in Logs (Analytics) button.

Screenshot that shows the Logs screen with a line graph that summarizes the average response duration of a request over the past 12 hours.

警示

若要檢視作用中警示和導致觸發警示的基礎規則,請選取 [ 警示 ]。

Screenshot that shows the Alerts button.

Screenshot that shows a list of alerts.

設定或覆寫雲端角色名稱

應用程式對應會 使用雲端角色名稱 屬性來識別地圖上的元件。

請遵循本指南手動設定或覆寫雲端角色名稱,並變更應用程式對應上出現的內容。

注意

Application Insights SDK 或 Agent 會自動將雲端角色名稱屬性新增至Azure App 服務環境中元件發出的遙測。

撰寫自訂 TelemetryInitializer

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace CustomInitializer.Telemetry
{
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
            {
                //set custom role name here
                telemetry.Context.Cloud.RoleName = "Custom RoleName";
                telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
            }
        }
    }
}

ASP.NET 應用程式:使用中 TelemetryConfiguration 中的載入初始化運算式

ApplicationInsights.config 中:

    <ApplicationInsights>
      <TelemetryInitializers>
        <!-- Fully qualified type name, assembly name: -->
        <Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
        ...
      </TelemetryInitializers>
    </ApplicationInsights>

ASP.NET Web 應用程式的替代方法是在 程式碼中具現化初始化運算式,例如: Global.aspx.cs

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

    protected void Application_Start()
    {
        // ...
        TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
    }

注意

使用 或 TelemetryConfiguration.Active 加入 ApplicationInsights.config 初始化運算式對 ASP.NET Core 應用程式無效。

ASP.NET 核心應用程式:將初始化運算式載入至 TelemetryConfiguration

針對 ASP.NET Core 應用程式,若要新增 TelemetryInitializer 實例,請將它新增至相依性插入容器,如下所示。 您可以在 類別的 Startup.cs 方法中 ConfigureServices 執行此步驟。

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

瞭解應用程式對應內容中的雲端角色名稱

若要協助您瞭解雲端角色名稱 的概念 ,請查看具有多個雲端角色名稱的應用程式對應。

Screenshot that shows an application map example.

在顯示的應用程式對應中,綠色方塊中的每個名稱都是此特定分散式應用程式不同層面的雲端角色名稱值。 針對此應用程式,其角色由 、 acmefrontendInventory ManagementPayment Processing Worker Role 組成 Authentication

在此應用程式中,每個雲端角色名稱也會以自己的檢測金鑰來代表不同的唯一 Application Insights 資源。 由於此應用程式的擁有者可以存取這四個不同 Application Insights 資源中的每一個,因此應用程式對應可以結合基礎關聯性的對應。

針對官方定義

   [Description("Name of the role the application is a part of. Maps directly to the role name in azure.")]
    [MaxStringLength("256")]
    705: string      CloudRole = "ai.cloud.role";

    [Description("Name of the instance where the application is running. Computer name for on-premises, instance name for Azure.")]
    [MaxStringLength("256")]
    715: string      CloudRoleInstance = "ai.cloud.roleInstance";

或者, 雲端角色實例 對於雲端角色名稱告訴您問題位於 Web 前端某處的案例很有説明。 但您可能會在 Web 前端執行多個負載平衡的伺服器。 能夠透過 Kusto 查詢更深入地鑽研一層,並瞭解問題是否會影響所有 Web 前端伺服器或實例,或只有一個可能很重要。

智慧型檢視 如果您想要覆寫雲端角色實例的值,可能是您的應用程式在容器化環境中執行的情況。 在此情況下,只要知道個別伺服器可能沒有足夠的資訊來找出特定問題。

如需如何使用遙測初始化運算式覆寫雲端角色名稱屬性的詳細資訊,請參閱 新增屬性:ITelemetryInitializer


應用程式對應篩選

應用程式對應篩選可讓使用者減少套用一或多個篩選所顯示的節點和邊緣數目。 這些篩選可用來減少地圖的範圍,顯示較小且更專注的地圖。

建立應用程式對應篩選

若要建立篩選,請選取應用程式對應工具列中的 [新增篩選] 按鈕。

A screenshot of the Add Filter button.

這會彈出一個對話方塊,其中包含三個區段:1) 選取篩選類型、2) 選擇篩選參數,3) 檢閱。

A screenshot with the Node Filter radio button selected.

A screenshot with the Connector Edge Filter radio button selected.

第一個區段有兩個選項:

  1. 節點篩選
  2. 連線or (edge) 篩選

其他區段中的內容會根據選取的選項而變更。

節點篩選

節點篩選可讓使用者只保留地圖上選取的節點,並隱藏其餘節點。 節點篩選準則會檢查每個節點是否包含屬性(例如其名稱),以及透過指定運算子符合搜尋值的值。 如果節點篩選器移除節點,也會移除其所有連接器(邊緣)。

有三個參數可供節點使用:

  • 包含 的節點」可讓使用者只選取具有相符屬性的節點,或同時在產生的對應中包含來源節點、目標節點或兩者。

    • 「節點和來源、目標」--這表示符合搜尋參數的節點將會包含在產生的對應中,而且也會包含屬於相符節點來源或目標的節點,即使它們沒有符合搜尋的屬性值也一樣。 來源和目標節點統稱為「已連線」節點。

    • 「節點和來源」-與上述相同,但目標節點不會自動包含在結果中。

    • 「節點和目標」--與上述相同,但不會自動包含來源節點。

    • 「僅限節點」--產生的對應中的所有節點都必須有符合的屬性值。

  • Operator 」 是將在每個節點屬性值上執行的檢查類型:

    • contains

    • !contains (不包含)

    • == (等於)

    • != (不等於)

  • 搜尋值 」是必須包含、不包含、等於或不等於節點屬性值的文字。 地圖上節點中找到的部分值會顯示在下拉式清單中。 按一下 [建立] 選項 [...],即可輸入任何任意值。下拉式清單中的 。

例如,在下列螢幕擷取畫面中,篩選準則設定為選取 包含 「-west」 文字 的 Node(s)。 產生的對應中也會包含來源 和 t arget 節點。 在相同的螢幕擷取畫面中,使用者可以選取地圖中找到的其中一個值,或建立與地圖中找到的值不完全相符的選項。

A screenshot with the filter configured to select nodes that contain the text west.

連線or (邊緣) 篩選

連線or 篩選會檢查連接器的屬性以符合值。 從地圖中移除不符合篩選準則的連線器。 節點不會留下任何連接器,就會發生同樣的情況。

連線or 篩選需要三個參數:

  • 篩選連接器依據 」可讓使用者選擇要使用連接器的屬性:

    • 錯誤連接器(反白顯示紅色) 」會根據連接器的色彩來選取連接器(紅色或非紅色)。 無法針對這種類型的篩選輸入值,只有 「==」 或 「!=」 的運算子,這表示 「connector with errors」 和 「connector without errors」。

    • 錯誤率」會使用連接器的平均錯誤率 ---失敗的呼叫數目除以所有呼叫數目---以百分比表示。 例如,值為 「1」 會參考 1% 失敗的呼叫。

    • 平均呼叫持續時間(****ms) 」只會使用:連接器所代表之所有呼叫的平均持續時間,以毫秒為單位。 例如,值為 「1000」 會參考平均 1 秒的呼叫。

    • 呼叫計數 」會使用連接器所代表的呼叫總數。

  • 「Operator」 是將在連接器屬性與下面輸入的值之間套用的比較。 選項變更:「錯誤連接器」具有等於/不等於選項;所有其他都有大於/小於。

  • 「Value」 是篩選準則的比較值。 「錯誤連接器」篩選準則只有一個選項:「錯誤」。其他篩選類型需要數值,並提供下拉式清單,其中包含一些與地圖相關的預先填入專案。

    • 其中有些專案具有指定 「(Pxx)」,其為百分位數層級。 例如,「平均通話持續時間」篩選準則可能會有值 「200 (P90)」,指出所有連接器的 90% (無論所代表的呼叫數目為何)都小於 200 毫秒的通話持續時間。。

    • 當下拉式清單中未顯示特定數位時,可以輸入該數位,然後按一下 [建立] 選項來建立。輸入 「P」 會顯示下拉式清單中的所有百分位數值。

檢閱區段

[檢閱] 區段包含篩選將執行的文字和視覺描述,這在瞭解篩選的運作方式時應該很有説明:

A screenshot of the Review section with node in focus.

A screenshot of the Review section depicting an average call duration greater than 42 milliseconds.

在應用程式對應中使用篩選

篩選互動功能

在 [新增篩選] 快顯視窗中設定篩選準則之後,請選取 [套用] 以建立篩選。 可以套用數個篩選準則,而且它們會依序從左至右運作。 每個篩選可以移除進一步的節點和連接器,但無法將它們新增回地圖。

篩選準則會顯示為應用程式對應上方的四捨五入按鈕:

A screenshot displaying the rounded filter buttons above the application map.

A screenshot of a rounded X button. 按一下篩選上的 將會移除該篩選。 按一下按鈕上的其他地方可讓使用者編輯篩選的值。 當使用者變更篩選中的值時,會套用新的值,讓對應成為變更的預覽。 按一下 [取消] 會將篩選還原為編輯前的篩選。

A screenshot displaying the Configure Connector Filter section with a Cancel button.

重複使用篩選

篩選可以透過兩種方式重複使用:

  • 地圖上方工具列上的 [複製連結] 按鈕會編碼所複製 URL 中的篩選資訊。 此連結可以儲存在瀏覽器的書簽中,或與他人共用。 「複製連結」會保留持續時間值,但不會保留絕對時間,因此稍後顯示的地圖可能與建立連結時觀察到的對應不同。

  • 儀表板釘選 A screenshot displaying the dashboard pin button. 位於 [應用程式對應] 窗格的標題列旁邊。 此按鈕會將地圖釘選到儀表板,以及套用至儀表板的篩選。 此動作對於經常有趣的篩選很有用。 例如,使用者可以釘選套用「錯誤連接器」篩選的對應,而儀表板檢視只會顯示在其 HTTP 呼叫中發生錯誤的節點。

篩選使用案例

有許多篩選組合。 以下是套用至大部分地圖的一些建議,而且在儀表板上釘選可能很有用:

  • 僅顯示使用 「錯誤連接器」篩選以及「智慧型檢視」所顯示之重大的錯誤:
    A screenshot displaying the Last 24 hours and Highlighted Errors filters.A screenshot displaying the Intelligent Overview toggle.

  • 隱藏沒有錯誤的低流量連接器,以快速專注于影響較高的問題: A screenshot displaying the Last 24 hours, calls greater than 876, and highlighted errors filters.

  • 顯示具有高平均持續時間的高流量連接器,以專注于潛在的效能問題: A screenshot displaying the Last 24 hours, calls greater than 3057, and average time greater than 467 filters.

  • 顯示分散式應用程式的特定部分(需要適當的 roleName 命名慣例): A screenshot displaying the Last 24 hours and Connected Contains West filters.

  • 隱藏太吵雜的相依性類型: A screenshot displaying the Last 24 hours and Nodes Contains Storage Accounts filters.

  • 只顯示錯誤率高於特定值的連接器 A screenshot displaying the Last 24 hours and Errors greater than 0.01 filters.


應用程式對應智慧型檢視

下列各節討論智慧型檢視。

智慧型檢視摘要

應用程式對應 智慧型檢視 是設計來協助服務健康情況調查。 其會套用機器學習服務,藉由篩選出雜訊來快速找出問題的潛在根本原因。 機器學習模型會從應用程式對應的歷史行為中學習,以識別主要模式和異常,以指出事件的潛在原因。

在大型分散式應用程式中,一律會有來自「良性」失敗的某種程度的雜訊,這可能會因為顯示許多紅色邊緣而造成應用程式對應雜訊。 智慧型檢視只會顯示服務失敗的可能原因,並移除狀況良好的服務中的節點對節點紅色邊緣(服務對服務通訊)。 智慧型檢視會醒目提示應調查的紅色邊緣。 它也提供醒目提示邊緣的可採取動作深入解析。

智慧型檢視優點

  • 僅醒目提示需要調查的失敗,以減少解決時間
  • 提供可採取動作的深入解析,說明為何已醒目提示特定紅色邊緣
  • 可讓應用程式對應順暢地用於大型分散式應用程式(僅將焦點放在以紅色標示的邊緣)

在應用程式對應中啟用智慧型檢視

啟用智慧 型檢視 切換。 或者,若要變更偵測的敏感度,請選取 [低]、 [中 ] 或 [ 高]。 如需詳細資訊,請參閱有關敏感度的 疑難排解問題

Screenshot that shows the Application Map user interface with options to toggle Intelligent view and provide feedback.

啟用 智慧型檢視 之後,請選取其中一個醒目提示的邊緣,以查看「可採取動作的深入解析」。深入解析會出現在右側的窗格中,並說明邊緣為何醒目提示。

Screenshot that shows the Application Map user interface section about actionable insights.

若要開始疑難排解,請選取 [ 調查失敗 ]。 在開啟的 [ 失敗] 窗格中,調查偵測到的問題是否為根本原因。 如果沒有邊緣是紅色的,則機器學習模型在應用程式的相依性中找不到潛在的事件。

若要提供意見反應,請選取地圖上的 [ 意見反應 ] 按鈕。

智慧型檢視如何判斷醒目提示紅色邊緣的位置?

智慧型檢視會使用專利的 AIOps 機器學習模型來醒目提示應用程式對應中真正重要的內容。

一些範例考慮包括:

  • 失敗率
  • 要求計數
  • 工期
  • 資料中的異常
  • 相依性類型

為了進行比較,一般檢視只會使用原始失敗率。

智慧型檢視敏感度如何運作?

智慧型檢視敏感度會調整偵測到服務問題的機率。

調整敏感度,以達到醒目提示邊緣中所需的信賴等級。

敏感度設定 結果
將會反白顯示較少的邊緣。
中 (預設值) 將會反白顯示平衡的邊緣數目。
將會醒目提示更多邊緣。

智慧型檢視的限制

智慧型檢視有一些限制:

  • 大型分散式應用程式可能需要一分鐘的時間才能載入智慧型檢視。
  • 最多支援七天的時間範圍。

若要提供意見反應,請參閱 入口網站意見反應


疑難排解

如果您無法讓應用程式對應如預期般運作,請嘗試這些步驟。

一般

  1. 請確定您使用的是正式支援的 SDK。 不支援或社群 SDK 可能不支援相互關聯。

    如需支援的 SDK 清單,請參閱 Application Insights:語言、平臺和整合

  2. 請將所有元件都升級為最新的 SDK 版本。

  3. 如果您使用 Azure Functions 搭配 C#,請升級至 Azure Functions V2

  4. 確認雲端角色名稱 已正確設定。

  5. 如果您遺漏相依性,請確定它位於自動收集的相依性 清單中 。 如果不在此清單中,仍可以使用追蹤相依性呼叫 (英文),以手動方式進行追蹤。

地圖上的節點太多

應用程式對應會針對要求遙測中出現的每個唯一雲端角色名稱建構應用程式節點。 也會針對類型、目標和雲端角色名稱的每個唯一組合建構相依性節點。

如果您的遙測中有超過 10,000 個節點,應用程式對應就無法擷取所有節點和連結,因此您的對應將會不完整。 如果發生這種情況,當您檢視地圖時會出現警告訊息。

應用程式對應只支援最多 1,000 個不同的未群組節點一次轉譯。 應用程式對應會將具有相同類型和呼叫端的相依性分組在一起,以減少視覺複雜性。

如果您的遙測具有太多唯一的雲端角色名稱或太多相依性類型,該群組將會不足,且對應不會轉譯。

若要修正此問題,您必須變更檢測,以正確設定雲端角色名稱、相依性類型和相依性目標欄位。

  • 相依性目標應該代表相依性邏輯名稱。 在許多情況下,它相當於相依性的伺服器或資源名稱。 例如,如果有 HTTP 相依性,它會設定為主機名。 它不應該包含從某個要求變更為另一個要求的唯一識別碼或參數。

  • 相依性類型應該代表相依性邏輯類型。 例如,HTTP、SQL 或 Azure Blob 是典型的相依性類型。 它不應該包含唯一識別碼。

  • 雲端角色名稱的用途描述于 設定或覆寫雲端角色名稱 一節。

智慧型檢視

關於智慧型檢視的常見疑難排解問題。

為什麼此邊緣不會反白顯示,即使敏感度低?

相依性似乎失敗,但模型並未指出可能是可能的事件:

  • 如果此相依性已失敗一段時間,模型可能會認為它是一般狀態,而不是為您醒目提示邊緣。 它著重于在 RT 中解決問題。
  • 如果此相依性對應用程式的整體效能影響最小,這也會使模型忽略它。
  • 如果上述內容都不正確,請使用 [ 意見反應 ] 選項並描述您的體驗。 您可以協助我們改善未來的模型版本。

為什麼邊緣會反白顯示?

如果已醒目提示邊緣,則來自模型的說明應該會指向讓模型賦予此相依性高機率分數的最重要特徵。 建議並非只以失敗為基礎,而是以主要流程中的非預期延遲等其他指標為基礎。

為什麼智慧型檢視不會載入?

如果 智慧型檢視 未載入,請將設定的時間範圍設定為六天或更少。

為什麼智慧型檢視需要很長的時間才能載入?

避免選取 [ 更新對應元件 ]。

僅針對單一 Application Insights 資源啟用 智慧型檢視

Screenshot that shows the Update map components button in the Application Map user interface.

入口網站意見反應

若要提供意見反應,請使用意見反應選項。

Screenshot that shows the Feedback option.

下一步