问题描述

众所周知,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

最新文章

  1. Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)
  2. SQL Server日志文件(LDF文件)
  3. 关于QString::toWCharArray 无法解析的外部符号
  4. 怎样将Sqlserver数据库转成mysql数据库
  5. mysql UNIX时间戳与日期的相互转换
  6. 如何在UILable上添加点击事件?
  7. Enumerable和yield
  8. laravel 跨库执行原生 sql 语句
  9. c++ 使用模板按类型统计stl多维容器中元素的数量
  10. docker安装nginx和php
  11. Nginx 慢启动与拥塞窗口
  12. 其他 Confluence 6 的 cookies 和备注
  13. 易混点总结--JS
  14. crm 2016 tabstatechange event
  15. POJ 3660 Cow Contest(Floyd求传递闭包(可达矩阵))
  16. Java获取URL链接的文件类型
  17. hibernate annotation多对多中间表添加其他字段的第三种方法
  18. 【CF772D】Varying Kibibits FWT
  19. Amazon behavior question
  20. hdoj1075-What Are You Talking About 【map】

热门文章

  1. 【深入理解Linux内核架构】6.6 资源分配
  2. Java垃圾回收System.gc()的理解
  3. Alibaba内部SpringCloud参考笔记,在GitHub一天就标星81.6k?
  4. Anaconda简介及特点
  5. 最新版PyCharm激活教程!有效期至2089年!
  6. linux操作系统网卡漂移导致网络不可用
  7. Redis小记(一)
  8. django 的基础设计
  9. Python练习题 014:完数
  10. 如何用5000行JS撸一个关系型数据库