使用 dotnet-monitor 分析.NET 应用程序

dotnet-monitor 是 .NET Core 命令行接口 (CLI) 工具, 可以很方便的在dotnet环境中分析我们的应用程序,需要注意的是,目前它还只是一个实验性的工具

在这之前,我们使用的有 dotnet-counters,dotnet-dump 和 dotnet-trace,那 dotnet-monitor 有什么意义呢?在运行dotnet应用程序时,不同的本地环境和生产环境中的差异可能使收集诊断工件(例如日志,跟踪,过程转储)变得困难, 所以需要通过公开一致的REST API来简化诊断的流程,而不受程序环境的影响,可以更方便的分析程序的问题。

安装 dotnet-monitor

本地使用

你可以使用以下命令,进行全局安装,因为本身是一个实验性的工具,所以需要在后面加上 --add-source

dotnet tool install -g dotnet-monitor --add-source https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5-transport/nuget/v3/index.json --version 5.0.0-preview.*

安装完成成,执行以下命令,启动成功后,会开放 http://localhost:52323http://localhost:52325 两个端口,我们这里只使用 52323

dotnet monitor collect

Dokcer 环境

docker pull mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1

拉取完成后, 执行

docker volume create diagnosticserver
docker run -d --rm -p 8000:80 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run -it --rm -p 52323:52323 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1 --urls http://*:52323

端点列表

你可以访问 http://localhost:52323, 这个 REST API 开放了以下端点,pid 是 processId 进程Id,我们需要找到需要监控的程序的进程id,这里我本地的进程id是21856

  • /processes
  • /dump/
  • /gcdump/
  • /trace/
  • /logs/
  • /metrics

Processes

进程信息,访问 http://localhost:52323/processes,会显示所有的dotnet 程序的进程id的列表,不给过这个命令属实有点鸡肋,因为我并不能知道哪个是我需要的 pid,它们都一样

[{
   "pid": 36540,
   "uid": "b65c518b-0ad3-4ebf-af85-dfb3c862d1a7"
}, {
   "pid": 11088,
   "uid": "00000000-0000-0000-0000-000000000000"
}, {
   "pid": 21856,
   "uid": "00000000-0000-0000-0000-000000000000"
}, {
   "pid": 39008,
   "uid": "00000000-0000-0000-0000-000000000000"
}]

Dump

转储文件,访问 http://localhost:52323/dump/pid 来下载文件

GCDump

收集 GCDump,可以访问 http://localhost:52323/gcdump/pid, 跟 Dump 文件不同的是,GCDump 文件是一种轻便的格式,你可以使用 VS 或者 perfview 打开并分析

Trace

跟踪数据,http://localhost:52323/trace/pid ,trace 可以获取到 CPU Stack(栈), Http 请求的开始和结束事件,来自 EventSourceLogger 和 Microsoft.Extensions.Logging 的日志,Runtime 运行时和 ASP.NET Core EventCounters 的指标数据, 下载生成的 .nettrace 文件,你同样可以使用 VS 或者 PerfView 打开

总结

https://github.com/dotnet/diagnostics

dotnet-monitor 诊断工具,提供了一套 REST API 来访问诊断数据,目前还只推出了预览版,大家可以在 github上 反馈和关注项目的进度

扩展项目

dotnet-monitor-ui 是一个针对与 dotnet-monitor的ui项目,这得益于 dotnet-monitor 提供了一套便捷的 REST API, 你可以在 github 关注这个项目,了解它后台是如何工作的

最后

欢迎关注我们的公众号,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

posted @ 2020-12-31 09:41  SpringLeee  阅读(1538)  评论(5编辑  收藏  举报