簡體   English   中英

Azure 門戶:如何查看調用堆棧

[英]Azure Portal: How to See Callstacks

抱歉,這不是一個簡短的問題:

背景

我有一個 B1 Azure 網站,並且在我的一生中,無法獲得調用堆棧的異常。

WebAPI 在同一個解決方案中與網站並排托管,我聽說這是不尋常的。 我相信幾乎所有的配置都通過解決方案完成了。 門戶中的大部分內容可能都是來自全新站點的默認設置。

我會第一個承認,我是 Azure 的新手。 我以前曾托管過一些非常簡單的 ASP 網站(主要是 .NET 之前的)。 至少可以說,我發現 Azure 門戶令人不知所措。 這就是為什么我在這里!

但是,我查找異常的主要位置是在 Application Insights 中的“故障”、“異常”選項卡下。 雖然它通常(並不總是......)顯示有 500 個,但在絕大多數情況下,它不會顯示調用堆棧。

情況

有幾次它確實捕獲了調用堆棧,這是您的普通機器人在隨機目錄中戳...而不是我需要立即調試的嚴重異常。 我記得聽說 Azure 將使用“AI 來確定要保留哪些調用堆棧”或類似的東西,但我找不到任何關於它的設置。 即使這種市場說法是正確的,為什么它會記錄日常機器人嘗試的調用堆棧,但罕見的應用程序癱瘓例外?

大約一個月前,我嘗試通過 Visual Studio 調試實時網站,但收到錯誤消息,提示找不到 Internet Explorer。 鑒於現在是 2018 年,微軟已經轉向 Edge,我完全不知道它為什么想要 Internet Explorer。 我確實找到了對此的回應,說要破解注冊表並重新安裝 Internet Explorer,但這在當時似乎有些矯枉過正。

通過 Visual Studio 的嵌入式 Azure 門戶查看 Azure 錯誤似乎顯示與 Azure 門戶非常相似的數據。 找不到調用堆棧。

許多年前,為 Http Server Errors 設置了一個經典警報,直到今天仍然會觸發。 它不會在 HttpExceptions 的 HttpExceptions 上從 bots 戳到站點上觸發,但它對於重要的 500 秒會觸發,這很好。 有趣的是,它是除用戶報告之外最可靠的方式來了解錯誤。 太糟糕了,他們沒有調用堆棧...

昨晚我們遇到了一個異常,大概是在視圖中,一個頁面。 正如預期的那樣,我們收到了來自經典警報的電子郵件,但“失敗”部分根本沒有顯示任何失敗。 過去,我們會看到 500,但沒有調用堆棧。 似乎昨晚的錯誤沒有被經典警報和用戶檢測到。 我不知道是不是因為昨晚的錯誤是獨一無二的,還是我們現在神秘地從 Azure 獲得的信息更少了。

嘗試的解決方案

多年來,我遵循了無數的指南,從門戶本身的翻轉開關到 FTP 和查看原始日志(這顯然與您的應用程序無關,而是與 Microsoft 托管它的應用程序有關)。 如果我每次閱讀指南時都能得到一分錢,“只需單擊異常選項卡即可查看您的調用堆棧”,我會很富有:-P。

一個月前,我非常絕望,我在應用程序的 HttpApplication 類中實現了 Application_Error,並為 WebAPI 實現了 ExceptionLogger,將所有異常手動記錄到文本文件中。 不幸的是,雖然這幫助我修復了一個錯誤,但隨后的異常也沒有出現在那里。 就像 Application Insights 一樣,在這些日志中顯示的主要是探查不存在目錄的機器人。

一周前,我非常絕望,以至於我寫了一個簡陋的“單元測試”(哈!),它將生產數據的副本拉下來並在本地進行測試,這絕對是瘋子。

我已經與其他架構師級別的 ASP.NET 工程師交談過,他們使用 Azure 門戶來改變頻率,他們無法提出任何建議。 我們查看了 web.configs; 在根目錄和 Views 文件夾中有一個。 我們嘗試打開自定義錯誤,但顯然我們不能在生產中運行它,因為它會向用戶顯示錯誤。 話雖如此,我不介意向某些用戶顯示真實的錯誤消息。 如何做到這一點? 如果我猜的話,問題隱藏在那些 web.configs 中,僅僅是因為它們很古老,而且有很多人接觸過它們。

結論

我需要一種 100% 萬無一失的方法來從 Azure 上托管的 ASP.NET 獲取異常及其調用堆棧。 否則,幾乎不可能解決生產中意外出現的邊緣情況。 我不記得在 Azure 之前的日子里這是一個問題。

我確信那里的專家會在幾分鍾內解決這個問題,但是,現在,我完全被難住了。 感謝您的時間!

要嘗試檢查的幾件事:

  1. 確保您的 Application Insights NuGet 包是最新的。 在過去的幾年里,我的指標停止工作,或者 AppInsights 刀片上出現了我沒有收集的新指標。 升級到最新的 NuGet 包就成功了。

  2. 您是否在 Web 應用程序中捕獲異常,然后明確返回 HTTP 500 響應? 如果是這樣,您將不會看到堆棧跟蹤。 在未處理的控制器方法中一直冒泡后捕獲堆棧跟蹤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM