【翻译】.NET 6 中的 dotnet monitor
原文: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#collection-rules
五.反馈
github issue: https://github.com/dotnet/dotnet-monitor/issues/new/choose
【翻译】.NET 6 中的 dotnet monitor的更多相关文章
- 「翻译」Unity中的AssetBundle详解(二)
为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...
- 「翻译」Unity中的AssetBundle详解(一)
AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...
- 【msdn wpf forum翻译】TextBox中文本 中对齐 的方法
原文:[msdn wpf forum翻译]TextBox中文本 中对齐 的方法 原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/threa ...
- 多线程中的lock,Monitor.Wait和Monitor.Pulse
我们知道lock实际上一个语法糖糖,C#编译器实际上把他展开为Monitor.Enter和Monitor.Exit,即: lock(lockObj) { //... } ////相当于(.Net4以前 ...
- 【翻译】Tusdotnet中文文档(1)配置和用法
TUSDOTNET Tusdotnet是tus协议的一个dotnet实现.tus协议是用来规范文件上传的整个过程,tus基于http协议,规定了一些上传过程中的头部(headers)和对上传过程的描述 ...
- 【翻译】JavaScript中的作用域和声明提前
原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译开始=== 你知道下面的JavaScript脚本执 ...
- 【翻译】【中英对照】【企业库6】动手实验 Hands-On Lab 日志应用程序块索引页
Logging Application Block Hands-On Lab for Enterprise Library 企业库的日志应用程序块动手实验 This walkthrough shoul ...
- [翻译] Linux 内核中的位数组和位操作
目录 Linux 内核里的数据结构 原文链接与说明 Linux 内核中的位数组和位操作 位数组声明 体系结构特定的位操作 通用位操作 链接 Linux 内核里的数据结构 原文链接与说明 https:/ ...
- 第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
随机推荐
- 个人宽带如何开启IPv6网络访问
IPv6是大势所趋,就在前段时间湖南联通发布公告,对家庭宽带提供 IPv6 地址,不再提供 IPv4地址,那本文就介绍 个人宽带如何开启 IPv6网络访问. 湖南联通停止向普通家庭宽带用户提供公网 I ...
- [转]DDR3基本概念5 - DDR仿真中出现的Memory overflow错误的处理
ERROR: Memory overflow. Write to Address 7000fe with data xxxxxxxxxxxxxxxx4634899aabe03499 will be l ...
- Linux初学者:从不同角度理解Linux系统
在我初学Linux系统时,虽然已经掌握了一些命令,但总觉得还是很混乱.大家新买的笔记本如果是Windows系统,那么第一件事往往就是分区,目的就是将系统和软件分开.然而Linux却没有类似于Windo ...
- Centos7下安装BlockScout
简介 BlockScout是一个Elixir应用程序,允许用户搜索以太坊网络(包括所有叉子和侧链)上的交易,查看账户和余额以及验证智能合约.BlockScout为用户提供了一个全面,易于使用的界面,以 ...
- 你以为我在玩游戏?其实我在学 Java
大家好,我是程序员cxuan!今天和大家一起Look一下这个有趣的国外编程网站! 寓教于乐 "今天我们来学习 Java " . "Java 是一门面向对象的编程语言&qu ...
- centos 7 仅安装mysql client
from: https://blog.csdn.net/jiangbenchu/article/details/98080951 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...
- 逐浪CMSv8.2发布-集成Node与Vue脚手架和PowerShell支持的新一代网站管理系统
极速下载:https://www.z01.com/down/3713.shtml 楼倚霜树外,镜天无一毫. 南山与秋色,气势两相高. -(唐)杜牧 北京时间2020年10月20日:领先的CMS与web ...
- 如何修改visual-studio的sln文件和project工程名
关于VS的 .sln 文件和 .suo 文件 *.sln:(Visual Studio.Solution) 通过为环境提供对项目.项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中.比如是 ...
- [bzoj4971]记忆中的背包
为了使得方案的形式较为单一,不妨强制物品体积为1或$\ge \lceil\frac{w}{2}\rceil$,那么假设最终有$x$个1且$\ge \lceil\frac{w}{2}\rceil$的物品 ...
- [bzoj1101]Zap
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 50001 4 int t,n,m,k,ans,mu[N],vis ...