網(wǎng)站首頁 編程語言 正文
一.什么是 dotnet monitor
在不同的環(huán)境中運(yùn)行 .NET 應(yīng)用程序可能會(huì)使收集診斷信息(例如日志、跟蹤、dump)變得困難。dotnet monitor 是一種工具,它提供了一種統(tǒng)一的方法來收集這些診斷信息,而不管您是在桌面計(jì)算機(jī)(desktop machine 可理解為我們?nèi)粘J褂玫碾娔X)還是在 kubernetes 集群中運(yùn)行。
收集這些診斷信息有兩種不同的機(jī)制:
- 按需收集診斷信息的
HTTP API
。當(dāng)您的應(yīng)用程序遇到問題并且想收集更多信息時(shí),可以調(diào)用這些 HTTP API。 - 基于規(guī)則配置的
觸發(fā)器
。您可以配置規(guī)則,以便在滿足所需條件時(shí)收集診斷信息,例如在 CPU 持續(xù)一段時(shí)間保持較高的指標(biāo)時(shí)收集進(jìn)程轉(zhuǎn)儲(chǔ)(process dump)。
二.入門
dotnet monitor 可以通過兩種不同的分發(fā)機(jī)制獲得:
- .NET CLI 工具
- 通過 Microsoft Container Registry (MCR) 獲得的容器鏡像
.NET CLI 工具
dotnet monitor CLI 工具首先需要安裝 .NET 6 SDK,如果你沒有足夠新的 SDK,可以通過 .NET 下載網(wǎng)頁獲取安裝包進(jìn)行安裝。
你可以使用一下命令獲取最新版的 dotnet monitor:
dotnet tool install -g dotnet-monitor --version 6.0.0
如果你已經(jīng)安裝但是想更新到最新,可以運(yùn)行以下命令:
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 公開了一個(gè) HTTP API 來查詢可用進(jìn)程、收集診斷信息并檢查請求信息的狀態(tài)。
暴露了以下 HTTP API:
-
/processes
- 獲取可被發(fā)現(xiàn)的進(jìn)程的詳細(xì)信息 -
/dump
- 在不使用調(diào)試器的情況下捕獲進(jìn)程的 dump -
/gcdump
- 捕獲進(jìn)程的 GC dump -
/trace
- 不使用 profiler 來追蹤進(jìn)程 -
/metrics
- 以 Prometheus exposition 格式捕獲默認(rèn)進(jìn)程的指標(biāo)快照 -
/livemetrics
- 捕獲進(jìn)程的實(shí)時(shí)指標(biāo)流 -
/logs
- 捕獲進(jìn)程的日志 -
/info
- 獲取有關(guān) dotnet monitor 的信息 -
/operations
- 獲取操作狀態(tài)和取消操作
下面的示例演示如何使用 dotnet monitor 從目標(biāo)進(jìn)程開始,在60秒的時(shí)間內(nèi)從Microsoft.AspNetCore.Server.Kestrel.Connections
日志級別為 Debug 的日志流數(shù)據(jù)。
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 按需從目標(biāo)進(jìn)程中捕獲診斷信息。除了日志,您還可以從目標(biāo)進(jìn)程收集跟蹤、內(nèi)存轉(zhuǎn)儲(chǔ)、GC轉(zhuǎn)儲(chǔ)和 metrics。
四.觸發(fā)器
dotnet monitor 可以配置為根據(jù)發(fā)現(xiàn)的進(jìn)程中的條件自動(dòng)收集診斷信息。 發(fā)現(xiàn)新進(jìn)程時(shí),如果該進(jìn)程數(shù)據(jù)與規(guī)則匹配,則 dotnet monitor 將嘗試應(yīng)用配置的規(guī)則。 應(yīng)用的規(guī)則將開始監(jiān)視觸發(fā)器描述的條件的過程。 如果滿足該條件,則假定尚未達(dá)到指定的限制來執(zhí)行操作列表。
示例:如果 dotnet monitor 檢測到持續(xù)超過一分鐘的CPU使用率在80%以上,則它將收集進(jìn)程 dump,限制每小時(shí)不超過1個(gè)。
{ "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" } } ] } } }
規(guī)則文檔:https://github.com/dotnet/dotnet-monitor/blob/main/documentation/collectionrules.md
五.反饋
github issue: https://github.com/dotnet/dotnet-monitor/issues/new/choose
原文鏈接:https://www.cnblogs.com/stulzq/p/15650277.html
相關(guān)推薦
- 2022-04-20 Python統(tǒng)計(jì)節(jié)假日剩余天數(shù)的腳本_python
- 2024-01-14 “xxx“ is not an enclosing class 解決辦法
- 2022-03-13 .Net6開發(fā)winform程序使用依賴注入_C#教程
- 2022-06-29 C語言詳細(xì)講解常用字符串處理函數(shù)_C 語言
- 2022-12-28 詳解Flink同步Kafka數(shù)據(jù)到ClickHouse分布式表_數(shù)據(jù)庫其它
- 2022-05-09 python面向?qū)ο缶幊淘O(shè)計(jì)原則之單一職責(zé)原則詳解_python
- 2022-12-25 Redis對象與redisObject超詳細(xì)分析源碼層_Redis
- 2022-12-25 Flutter插件開發(fā)之HmsScanKit實(shí)現(xiàn)示例詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支