.NET 6 中的 dotnet monitor详细解析

 更新时间:2021年12月07日 11:17:48   作者:晓晨Master  
dotnet monitor 是一种工具,它提供了一种统一的方法来收集这些诊断信息,而不管您是在桌面计算机还是在 kubernetes 集群中运行,dotnet monitor 已经为 Azure App Service(Linux)提供 .NET 应用程序的诊断工具提供支持,我们希望它在更多环境中使用

原文:Announcing dotnet monitor in .NET 6

我们在 2020 年 6 月首次推出了dotnet monitor 作为实验工具,并在去年(2020年)努力将其转变为生产级工具。今天,我很高兴地的宣布 dotnet monitor 的第一个正式版将和 .NET 6 一起发布,作为 .NET 6 的一部分。

dotnet monitor 已经为 Azure App Service(Linux)提供 .NET 应用程序的诊断工具提供支持,我们希望它在更多环境中使用。

一.什么是 dotnet monitor

在不同的环境中运行 .NET 应用程序可能会使收集诊断信息(例如日志、跟踪、dump)变得困难。dotnet monitor 是一种工具,它提供了一种统一的方法来收集这些诊断信息,而不管您是在桌面计算机(desktop machine 可理解为我们日常使用的电脑)还是在 kubernetes 集群中运行。

收集这些诊断信息有两种不同的机制:

  • 按需收集诊断信息的 HTTP API。当您的应用程序遇到问题并且想收集更多信息时,可以调用这些 HTTP API。
  • 基于规则配置的触发器。您可以配置规则,以便在满足所需条件时收集诊断信息,例如在 CPU 持续一段时间保持较高的指标时收集进程转储(process dump)。

二.入门

dotnet monitor 可以通过两种不同的分发机制获得:

  • .NET CLI 工具
  • 通过 Microsoft Container Registry (MCR) 获得的容器镜像

.NET CLI 工具

dotnet monitor CLI 工具首先需要安装 .NET 6 SDK,如果你没有足够新的 SDK,可以通过 .NET 下载网页获取安装包进行安装。

你可以使用一下命令获取最新版的 dotnet monitor:

dotnet tool install -g dotnet-monitor --version 6.0.0

如果你已经安装但是想更新到最新,可以运行以下命令:

dotnet tool update -g dotnet-monitor --version 6.0.0

容器镜像

dotnet monitor 容器镜像在 MCR 上可用,你可以通过以下命令获取最新的镜像:

docker pull mcr.microsoft.com/dotnet/monitor:6.0.0

三.HTTP API

dotnet monitor 公开了一个 HTTP API 来查询可用进程、收集诊断信息并检查请求信息的状态。

暴露了以下 HTTP API:

  • /processes- 获取可被发现的进程的详细信息
  • /dump- 在不使用调试器的情况下捕获进程的 dump
  • /gcdump- 捕获进程的 GC dump
  • /trace- 不使用 profiler 来追踪进程
  • /metrics- 以 Prometheus exposition 格式捕获默认进程的指标快照
  • /livemetrics- 捕获进程的实时指标流
  • /logs- 捕获进程的日志
  • /info- 获取有关 dotnet monitor 的信息
  • /operations- 获取操作状态和取消操作

下面的示例演示如何使用 dotnet monitor 从目标进程开始,在60秒的时间内从Microsoft.AspNetCore.Server.Kestrel.Connections 日志级别为 Debug 的日志流数据。

PS> curl.exe -X POST "https://localhost:52323/logs?name=myWebApp&durationSeconds=60" `

    -H "Accept: application/x-ndjson" `

    -H "Content-Type: application/json" `

    --negotiate -u $(whoami)`

    -d '{"filterSpecs": {"Microsoft.AspNetCore.Server.Kestrel.Connections": "Debug"}}' 

{"Timestamp":"2021-11-05 08:12:54Z","LogLevel":"Debug","EventId":39,"EventName":"ConnectionAccepted","Category":"Microsoft.AspNetCore.Server.Kestrel.Connections","Message":"Connection id u00220HMD06BUKL2CUu0022 accepted.","State":{"Message":"Connection id u00220HMD06BUKL2CUu0022 accepted.","ConnectionId":"0HMD06BUKL2CU","{OriginalFormat}":"Connection id u0022{ConnectionId}u0022 accepted."}}

{"Timestamp":"2021-11-05 08:12:54Z","LogLevel":"Debug","EventId":1,"EventName":"ConnectionStart","Category":"Microsoft.AspNetCore.Server.Kestrel.Connections","Message":"Connection id u00220HMD06BUKL2CUu0022 started.","State":{"Message":"Connection id u00220HMD06BUKL2CUu0022 started.","ConnectionId":"0HMD06BUKL2CU","{OriginalFormat}":"Connection id u0022{ConnectionId}u0022 started."}}

{"Timestamp":"2021-11-05 08:12:54Z","LogLevel":"Debug","EventId":9,"EventName":"ConnectionKeepAlive","Category":"Microsoft.AspNetCore.Server.Kestrel.Connections","Message":"Connection id u00220HMD06BUKL2CUu0022 completed keep alive response.","State":{"Message":"Connection id u00220HMD06BUKL2CUu0022 completed keep alive response.","ConnectionId":"0HMD06BUKL2CU","{OriginalFormat}":"Connection id u0022{ConnectionId}u0022 completed keep alive response."},"Scopes":[{"ConnectionId":"0HMD06BUKL2CU"},{"RequestId":"0HMD06BUKL2CU:00000002","RequestPath":"/"}]}

如上面的示例所示,您可以使用 dotnet monitor 按需从目标进程中捕获诊断信息。除了日志,您还可以从目标进程收集跟踪、内存转储、GC转储和 metrics。

四.触发器

dotnet monitor 可以配置为根据发现的进程中的条件自动收集诊断信息。 发现新进程时,如果该进程数据与规则匹配,则 dotnet monitor 将尝试应用配置的规则。 应用的规则将开始监视触发器描述的条件的过程。 如果满足该条件,则假定尚未达到指定的限制来执行操作列表。

示例:如果 dotnet monitor 检测到持续超过一分钟的CPU使用率在80%以上,则它将收集进程 dump,限制每小时不超过1个。

{
  "CollectionRules": {
    "HighCpuRule": {
      "Filters": [
        {
          "Key": "ProcessName",
          "Value": "MyApp",
          "MatchType": "Exact"
        }
      ],
      "Trigger": {
        "Type": "EventCounter",
        "Settings": {
          "ProviderName": "System.Runtime",
          "CounterName": "cpu-usage",
          "GreaterThan": 80,
          "SlidingWindowDuration": "00:01:00"
        }
      },
      "Limits": {
        "ActionCount": 1,
        "ActionCountSlidingWindowDuration": "1:00:00"
      },
      "Actions": [
        {
          "Type": "CollectDump",
          "Settings": {
            "Type": "Triage",
            "Egress": "myBlobStorageAccount"
          }
        }
      ]
    }
  }
}

规则文档:https://github.com/dotnet/dotnet-monitor/blob/main/documentation/collectionrules.md

五.反馈

github issue: https://github.com/dotnet/dotnet-monitor/issues/new/choose

到此这篇关于.NET 6 中的 dotnet monitor的文章就介绍到这了,更多相关.NET6 dotnet monitor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 三层+存储过程实现分页示例代码

    三层+存储过程实现分页示例代码

    本文为大家介绍下三层+存储过程分页的具体实现,前后台及存储过程代码如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • asp.net iis 无法显示网页的解决方法分析

    asp.net iis 无法显示网页的解决方法分析

    使用过IIS的朋友都可能遇到过这样的情况:即使您按照教科书的步骤做好各步设置以后,仍会出现“无法显示网页”的现象。
    2010-06-06
  • mvc重定向方式详解

    mvc重定向方式详解

    这篇文章主要为大家详细介绍了mvc重定向的几种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Asp.net中断点续传的原理与实现方法分享

    Asp.net中断点续传的原理与实现方法分享

    在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种
    2012-08-08
  • .NET实现工资管理系统

    .NET实现工资管理系统

    这篇文章主要为大家详细介绍了.NET实现工资管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 如何使用.NET Core 选项模式【Options】

    如何使用.NET Core 选项模式【Options】

    这篇文章主要介绍了如何使用.NET Core 选项模式,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • asp.net TripleDES加密、解密算法

    asp.net TripleDES加密、解密算法

    加密,使用密码产生加密算法的公钥,并使用TripleDES对密码进行加密。解密,使用密码产生加密算法的公钥,并使用TripleDES对加密数据进行解密。
    2008-08-08
  • asp.net 控件验证 FCKeditor

    asp.net 控件验证 FCKeditor

    FCKEditor是一个很不错的在线编辑器,可称得上完美,但是它有一个问题,就是在使用RequiredFieldValidator进行验证的时候,即使内容不为空,也需要点击两次才能完成
    2009-06-06
  • .net实现微信公众账号接口开发实例代码

    .net实现微信公众账号接口开发实例代码

    这篇文章主要介绍了.net实现微信公众账号接口开发实例代码,有需要的朋友可以参考一下
    2013-12-12
  • asp.net实现中英文多域名检测的方法

    asp.net实现中英文多域名检测的方法

    这篇文章主要介绍了asp.net实现中英文多域名检测的方法,涉及asp.net针对URL中域名的解析及字符串操作相关技巧,需要的朋友可以参考下
    2016-08-08

最新评论