使用 Application Insights 深入診斷 Web 應用程式
本文說明 Application Insights 如何融入 DevOps 迴圈。
我為什麼需要 Application Insights 呢?
Application Insights 會監視您正在執行的 Web 應用程式。 它會告訴您失敗和效能問題,並協助您分析客戶如何使用您的應用程式。 它適用于在 ASP.NET、JAVA EE 和Node.js等平臺上執行的應用程式。 它裝載于雲端或內部部署。
在執行時監視新式應用程式是不可或缺的。 您想要在客戶執行之前偵測失敗。 您也想要探索並修正效能問題,讓專案變慢,或造成使用者造成不便。 當系統以您的滿意度執行時,您也會想要知道使用者正在執行什麼動作。 例如,它們是否使用最新的功能? 是否已成功使用它?
新式 Web 應用程式是在持續傳遞的迴圈中開發:
- 發行新功能或改進。
- 觀察其適用于使用者的方式。
- 根據該知識規劃下一個開發增量。
此週期的關鍵部分是觀察階段。 Application Insights 提供工具來監視 Web 應用程式的效能和使用方式。
此程序最重要的方面是診斷和判斷。 如果應用程式失敗,業務就會遺失。 監視架構的主要角色是:
- 可靠地偵測失敗。
- 立即通知您。
- 提供診斷問題所需的資訊給您。
Application Insights 會執行這些工作。
Bug 來自何處?
Web 系統中的失敗通常是由組態問題或其許多元件之間的互動不良所引起。 處理即時網站事件時,第一個工作是識別問題的位置。 哪一個元件或關聯性是原因?
在更簡單的紀元中,電腦程式會在一部電腦上執行。 開發人員在出貨之前經過徹底測試,以及出貨之後,他們很少看到或再次思考。 使用者必須放置任何剩餘 Bug 數年。
此程式現在已大幅不同。 您的應用程式有許多不同的裝置可執行,而且很難保證每個裝置上完全相同的行為。 在雲端中裝載應用程式表示可以快速修正 Bug。 但這也表示持續競爭,以及經常預期新功能的預期。
在這些情況下,讓 Bug 計數保持公司控制權的唯一方式是自動化單元測試。 您無法在每個傳遞上手動重新測試所有專案。 單元測試現在是建置程序中常見的一部分。 像是 Xamarin Test Cloud 的工具可藉由在多個瀏覽器版本中提供自動化 UI 測試來提供協助。 這些測試制度讓我們能夠期望在應用程式內發現 Bug 的速度可以保持在最低限度。
典型的 Web 應用程式有許多即時元件。 除了瀏覽器或裝置應用程式中的用戶端 (,) 和網頁伺服器之外,可能有大量的後端處理。 或許後端是元件管線或共同作業片段的鬆散集合。 其中許多都不會在您的控制項中。 它們是您相依的外部服務。
在這類組態中,很難以經濟實惠的方式測試或預見每個可能的失敗模式 (除了即時系統本身)。
問題
以下是開發 Web 系統時要詢問的一些問題:
- 您的應用程式是否損毀?
- 實際發生什麼事? 如果要求失敗,您想要知道其取得方式。 您需要事件的追蹤。
- 您的應用程式速度是否夠快? 回應典型的要求需要多久的時間?
- 伺服器可以處理負載嗎? 當要求的速率增加時,可以維持穩定的回應時間嗎?
- 您的相依性有多回應,例如 REST API、資料庫,以及應用程式呼叫的其他元件? 特別是,如果系統速度很慢,您的元件是您的元件,還是收到來自其他人的慢速回應?
- 您的應用程式是否向上或關閉? 全世界都可以看到它嗎? 您必須知道它是否停止。
- 根本原因為何? 您的元件或相依性是否失敗? 是通訊問題嗎?
- 有多少使用者受到影響? 如果您有一個以上的問題要處理,這最重要嗎?
什麼是 Application Insights?
- Application Insights 會檢測您的應用程式,並在應用程式執行時,傳送相關的遙測。 您可以將 Application Insights SDK 建置到應用程式中,也可以在執行時間套用檢測。 先前的方法更有彈性,因為您可以將自己的遙測新增至一般模組。
- 遙測會傳送至 Application Insights 入口網站,其儲存和處理位置。 雖然 Application Insights 裝載于 Azure 中,但它可以監視任何 Web 應用程式,而不只是 Azure 應用程式。
- 遙測會以事件的圖表和表格形式來呈現。
遙測有兩種主要類型︰彙總與原始執行個體。
- 實例資料可能包含 Web 應用程式收到的要求報告。 您可以在 Application Insights 入口網站中使用 [搜尋] 工具來尋找並檢查要求的詳細資料。 此實例可能包含應用程式回應要求所需的時間和要求的 URL 和用戶端的近似位置等資料。
- 匯總的資料包含每個單位時間的事件計數,以便您可以比較要求率與回應時間。 它也包含平均計量,例如要求回應時間。
資料的主要類別如下:
- 應用程式的要求通常 (HTTP 要求) URL、回應時間和成功或失敗。
- 應用程式所做的 REST 和 SQL 呼叫等相依性,以及 URI、回應時間和成功。
- 例外狀況,包括堆疊追蹤。
- 頁面檢視資料,其來自使用者的瀏覽器。
- 效能計數器和您自己撰寫的計量等計量。
- 您可以用來追蹤商務事件的自訂事件。
- 用來偵錯的記錄追蹤。
案例研究:真實馬氏 F.C.
皇家馬德里足球俱樂部 的 Web 服務可服務世界各地大約 450 百萬名球迷。 風扇可透過網頁瀏覽器和俱樂部的行動應用程式來存取它。 風扇可以預約票證,也可以存取結果、球員和即將推出的遊戲的資訊和視訊剪輯。 他們可以搜尋篩選,例如已評分的目標數目。 另外還提供社交媒體的連結。 使用者體驗高度個人化,並且設計成雙向通訊來吸引風扇。
解決方案 是 Azure 上的服務和應用程式系統。 延展性是關鍵需求。 流量是可變的,而且可以在相符專案期間和周圍達到大量流量。
對於皇家馬德里而言,監視系統效能是非常重要的。 Application Insights 提供整個系統的完整檢視,以確保可靠且高階的服務。
俱樂部也會深入瞭解其粉絲,例如他們 (只有 3% 在西班牙) 、他們對於球員、歷程記錄結果和近期遊戲感興趣,以及他們如何回應比對結果。
大部分的遙測資料都會使用未新增的程式碼自動收集,這可簡化解決方案並減少作業複雜度。 對於皇家馬德里而言,Application Insights 每個月可處理 38 億個遙測點。
實際交通使用 Power BI 模組來檢視其遙測。
智慧型偵測
主動診斷是一項最新功能。 您不需提供任何特殊組態,Application Insights 就會自動偵測並警示您,關於您應用程式中異常提高的失敗率。 它很聰明,可以忽略偶爾失敗的背景,也會增加與要求增加的比例。
例如,您可能相依于其中一項服務失敗。 或者,您部署的新組建可能無法正常運作。 當您查看電子郵件時,您就會知道。 另外還有 Webhook,因此您可以觸發其他應用程式。
這項功能的另一個層面會針對遙測執行每日的深入分析,以找出很難發現的異常效能模式。 例如,它可以尋找與特定地理區域或特定瀏覽器版本相關聯的緩慢效能。
在這兩種情況下,警示都會告訴您探索到的徵兆。 它也提供您協助診斷問題所需的資料,例如相關的例外狀況報告。
客戶 Samtec 說:「在最近的功能完全移轉期間,我們發現低於其資源限制並導致逾時的資料庫。 主動偵測警示會在我們分類問題時逐字顯現,非常接近即時公告。 這個與 Azure 平台相結合的警示,幾乎可協助我們即時修正問題。 總停機時間 < 10 分鐘。」
即時計量串流
部署最新組建是令人焦慮的體驗。 如果發生任何問題,請立即知道這些問題,以便視需要返回。 即時計量串流可為您提供大約 1 秒延遲的關鍵計量。
它可讓您立即檢查任何失敗或例外狀況的範例。
應用程式對應
應用程式對應會自動探索您的應用程式拓撲。 它會在地圖上配置效能資訊,讓您輕鬆地識別分散式環境中的效能瓶頸和有問題的流程。 透過應用程式對應,您可以探索 Azure 服務上的應用程式相依性。
您可以藉由瞭解問題是否與程式碼相關或相依性相關來分級問題。 您可以從單一位置鑽研相關的診斷體驗。 例如,您的應用程式可能會因為 SQL 層中的效能降低而失敗。 透過應用程式對應,您可以立即看到它,並鑽研至 SQL Index Advisor 或 Query Insights 體驗。
Application Insights Log Analytics
使用 Log Analytics,您可以使用功能強大的類似 SQL 語言撰寫任意查詢。 當各種檢視方塊連線時,在整個應用程式堆疊上診斷會變得容易。 然後,您可以詢問正確的問題,讓服務效能與商務計量和客戶體驗相互關聯。
您可以查詢您儲存在入口網站中的所有遙測執行個體和未經處理的計量資料。 語言包括篩選、聯結、彙總及其他作業。 您可以計算欄位並執行統計分析。 表格式和圖形視覺效果可供使用。
例如,很容易:
- 依客戶層分割您應用程式的要求效能資料,以瞭解其體驗。
- 在即時網站調查期間,搜尋特定錯誤碼或自訂的事件名稱。
- 向下切入特定客戶的應用程式使用方式,以了解需要和採用哪些功能。
- 針對特定使用者追蹤工作階段與回應時間,讓支援和營運團隊能夠提供即時客戶支援。
- 判斷常用的應用程式功能來回答應優先考慮的功能問題。
客戶 DNN 說:「Application Insights 已為我們提供方程式的遺漏部分,以便視需要合併、排序、查詢和篩選資料。 讓我們的團隊可以使用他們自己的創意和體驗,利用功能強大的查詢語言來尋找資料,讓我們能夠得到相關見解,並解決我們甚至不曾知道我們發生的問題。 許多有趣的答案都是來自開頭為『我想知道如果...』的問題。」
開發工具整合
Application Insights 與開發工具整合。
設定 Application Insights
Visual Studio 和 Eclipse 有工具可針對您正在開發的專案設定正確的 SDK 套件。 有一個功能表命令可新增 Application Insights。
如果您發生使用追蹤記錄架構,例如 Log4N、NLog 或 System.Diagnostics.Trace,您可以取得將記錄連同其他遙測一起傳送至 Application Insights 的選項,以便輕鬆地將追蹤與要求、相依性呼叫和例外狀況相互關聯。
在 Visual Studio 中搜尋遙測
當您開發和偵錯功能時,可以直接在 Visual Studio 中檢視和搜尋遙測。 您可以使用與入口網站相同的搜尋設備。
當 Application Insights 記錄例外狀況時,您可以檢視 Visual Studio 中的資料點,並直接跳至相關的程式碼。
在偵錯期間,您可以將遙測保留在開發機器中。 您可以在 Visual Studio 中檢視它,而不需將其傳送至入口網站。 此本機選項可避免與生產環境的遙測偵錯混合在一起。
工作項目
產生警示時,Application Insights 可以在您的工作追蹤系統中自動建立工作項目。