1. 程式人生 > 實用技巧 >【應用服務 App Service】App Service中抓取網路日誌

【應用服務 App Service】App Service中抓取網路日誌

問題描述

眾所周知,Azure App Service是一種PaaS服務,也就是說,IaaS層面的所有內容都由平臺維護,所以使用App Service的我們根本無法觸碰到遠行程式的虛擬機器(VM), 所以當遇見一些例項級的問題時,可謂一點辦法也沒有。 這時,一些Azure提供的排查工具就非常有用,如在App Service for Windows的情況下,我們可以通過Kudu工具進行檔案管理,如下載日誌,修改web.config配置,執行抓取DUMP的命令(或檢視進行直接抓取DUMP,詳見:(【應用服務 App Service】快速獲取DUMP檔案(App Service for Windows(.NET/.NET Core))

)。

但是,當我們發現通過App Service呼叫其他的請求時,需要調查網路丟包請求沒有響應,或是需要檢視請求的Header時,則需要在例項中抓取網路包(當問題正在發生時抓取)-- 在PowerShell中通過ArmClient向App Service傳送抓包請求,然後通過Kudu連結到logfiles\networktrace目錄下下載網路包

準備條件

  • PowerShell使用管理員方式開啟
  • 登入App Service Kudu管理頁面 (Azure App Service--> Advanced Tools-->Go)
  • 準備號App Service的資源ID (Azure App Service
    --> Properties --> Resource ID)

執行步驟

一:安裝 ArmClient 工具

  1. 開啟 PowerShell (管理員許可權)

  2. 安裝 chocolatey, 命令為:iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

  3. 安裝 armclient 工具,命令為:choco install armclient

二:使用 Azure 賬號登陸 ARMClient

armclient.exe login Mooncake

注:當使用中國區的Azure時候,才需要加入Mooncake引數。

三:抓取網路日誌

armclient.exe POST "/subscriptions/<sub>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<site>/networkTrace/start?duration=<seconds>&api-version=2015-06-01"

使用App Serivce中Resource ID中的Sub,RG,Site等替換後,直接再PowerShell中執行以上命令。

注:duration(最大設定為 300,目前只允許抓取最長 5 分鐘的網路包)

:當第一次Post請求沒有完成前,如果你再次傳送請求則會返回Error Message, BadRequest.

當抓取成功後,可以再Kudu站點的\home\logfiles\networktrace 下載網路包

分析網路舉例

從App Service Kudu中\home\logfiles\networktrace 下載網路壓縮包解壓後。使用Wireshark分析,如下圖中我們可以檢視的資訊有(如使用HTTPS加密傳輸,則需要解密才可檢視)

  • 請求的URL
  • 請求的型別,如GET, POST等
  • 請求中所攜帶的Header鍵值
  • Response的狀態等
  • 還有也可以分析TCP級的ACK,FIN等

參考資料

如何在 Web 應用例項上住抓取網路日誌:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-web-apps-howto-crawl-log

快速獲取DUMP檔案:https://www.cnblogs.com/lulight/p/13574331.html