当 dotnet-monitor 遇上 Prometheus, 是种什么样的体验?

e21a92671a73c05cc0d5c59711564d6b.png

对于开发和运维人员来说, 监控大屏很棒, 让我们来做一个 Dashboard 吧!大家可能听说过一些 CLI 诊断工具, 比如 dotnet-counters,dotnet-dump 和 dotnet-trace, 那 dotnet-monitor 又是什么呢?简单理解就是把上面的几种诊断工具进行了包装, 并且暴露了 对应的 REST API, 让诊断变的更容易, 在去年, dotnet-monitor 还是一个实验性的诊断工具, 当时我也写了一篇文章介绍 dotnet-monitor,使用 dotnet-monitor 分析.NET 应用程序 , 而最近, .NET 团队宣布第一个 release 版本的 dotnet-monitor, 同时它也是 .NET 6 的内容 😍, 也就是 dotnet-monitor 6.0.0 !

今天我们关注的主要是指标, 也就是 /metrics 端点, 正如文档所说,它是按照 Prometheus 的格式显示当前dotnet程序的 metrics 快照, 顺便说一句,这是非常简单的格式,如下:

# HELP systemruntime_cpu_usage_ratio CPU Usage# TYPE systemruntime_cpu_usage_ratio gaugesystemruntime_cpu_usage_ratio 0 1632929076109systemruntime_cpu_usage_ratio 0 1632929076111systemruntime_cpu_usage_ratio 0 1632929086110# HELP systemruntime_working_set_bytes Working Set# TYPE systemruntime_working_set_bytes gaugesystemruntime_working_set_bytes 1529000000 1632929066112systemruntime_working_set_bytes 1529000000 1632929076110systemruntime_working_set_bytes 1529000000 1632929076112...# HELP systemruntime_time_in_gc_ratio % Time in GC since last GC# TYPE systemruntime_time_in_gc_ratio gaugesystemruntime_time_in_gc_ratio 0 1632929066112systemruntime_time_in_gc_ratio 0 1632929076110systemruntime_time_in_gc_ratio 0 1632929076112

上面看到的是 System.Runtime counters 的指标, 接下来,我们需要把这些信息展示到 Grafana Dashboard。

1. 准备一个 dotnet core 应用

为了更好的展示, 这里我们使用了一个内存泄露的示例项目, 这是一个.NET 5 的应用, 你可以在github上面找到,然后下载到本地

https://github.com/sebastienros/memoryleak

git clone https://github.com/sebastienros/memoryleak.git

接下来, 我们让应用在 docker 容器中运行, 这里准备了一个 Dockerfile 文件, 你需要把它手动添加到项目的解决方案目录下

# https://hub.docker.com/_/microsoft-dotnetFROM mcr.microsoft.com/dotnet/sdk:5.0 AS buildWORKDIR /sourceCOPY . .RUN dotnet restoreRUN dotnet publish -c release -o /app --no-restore# final stage/imageFROM mcr.microsoft.com/dotnet/aspnet:5.0RUN apt-get update && apt-get install -y procpsWORKDIR /appCOPY --from=build /app .ENTRYPOINT ["dotnet", "MemoryLeak.dll"]
c97899595c29ec23809ab57f14656c98.png

然后构建镜像

docker build --pull -t memoryleak-image -f Dockerfile .

因为我们的 dotnet-monitor 是在 sidecar 容器运行的, 所以需要共享 volume (用于 IPC 通信), 使用以下命令创建一个 volume

docker volume create dotnet-tmp

现在我们准备运行我们的 memoryleak 镜像, 然后映射端口 80 ---> 5000

docker run -d -it --rm -e TZ=Asia/Shanghai -p 5000:80 --mount "source=dotnet-tmp,target=/tmp" memoryleak-image

运行成功后, 访问 http://localhost:5000/

1a920ada9cfcbf95b854b6f0268d136a.png

2. dotnet-monitor

我们可以安装 dotnet-monitor 为全局工具,但让我们继续使用 Docker 容器, Microsoft Container Registry 上有可用的容器映像,只需要使用以下命令即可:

docker run -d -it --rm -e TZ=Asia/Shanghai -p 12323:52323 --mount "source=dotnet-tmp,target=/tmp" mcr.microsoft.com/dotnet/monitor --urls http://*:52323 --no-auth

同样, 挂载了我们上面创建的 dotnet-tmp volume, 然后访问 http://localhost:12323/metrics, 现在已经能看到指标信息了

9889009ef85fe7e8c3e1c2e28a74d32e.png

3. Prometheus

Prometheus 是一个免费的监控系统和时序数据库, 我们需要存储 dotnet-monitor 收集的 metrics 指标信息, 同样,我们可以通过各种方式运行/安装 Prometheus,这里我们还继续使用 Docker, 首先还需要一个 prometheus.yml 配置文件, 你可以手动添加到解决方案目录下

global:  scrape_interval: 15s  scrape_timeout: 10s  evaluation_interval: 15salerting:  alertmanagers:  - scheme: http    timeout: 10s    api_version: v1    static_configs:    - targets: []scrape_configs:- job_name: prometheus  honor_timestamps: true  scrape_interval: 15s  scrape_timeout: 10s  metrics_path: /metrics  scheme: http  static_configs:  - targets:    - localhost:9090- job_name: memoryleak  honor_timestamps: true  scrape_interval: 2s  scrape_timeout: 2s  metrics_path: /metrics  scheme: http  static_configs:  - targets:    - host.docker.internal:12323
ce451bf8a5e22845d68d1e45def987b1.png

上面配置中, 定时 2s 抓取了 http://host.docker.internal:12323/metrics , 这是 dotnet-monitor 暴露的指标信息, 然后使用下边的命令, 在 docker 中启动 prometheus, 注意 D:\Code\dotnet\memoryleak\src\MemoryLeak\prometheus.yml 这里要改成你本地 prometheus.yml 文件路径。

docker run -d --name prometheus-container -e TZ=Asia/Shanghai -p 30090:9090 -v D:\Code\dotnet\memoryleak\src\MemoryLeak\prometheus.yml:/etc/prometheus/prometheus.yml ubuntu/prometheus

就是这么简单, Prometheus 运行后, 我们访问 http://localhost:30090/targets, 查看运行状态, 一切 OK

ff860c9d9ae67efe8d0b3291f5d145ac.png

4. Grafana

最后, 就是用 Grafana 做可视化, 同样, 我们使用下面的命令在docker中运行 Grafana

docker run -d -e TZ=Asia/Shanghai -p 3000:3000 grafana/grafana

接下来, 我们访问 http://localhost:3000/, 首次登录可以使用 admin/admin, 然后转到 Configuration -> Data sources, 点击 Add data source 添加数据源, 选择 Prometheus, 然后设置 URL 为 http://host.docker.internal:30090/, 其他的参数默认, 然后 Save & test 保存, 如下

cafef94003437a2de218f344363c671f.png5ab78fadfcd7d9e070e30eacbd1fa210.png

现在数据源设置好了, 接下来还需要配置 dashboard , 这里有一个json文件, 你可以直接复制内容到文本框并导入, 如下

https://dotnetos.org/assets/files/posts/sample-dotnet-monitor-dashboard.json

d1e2d48f06ab8a6957d12e09a35f2e9c.png

恭喜, 现在你已经有一个看上去很nice的仪表盘!

49daeb76607b7957465d5342c1dfea8a.png

总结

我们回顾一下整个过程, 总共有4个容器, 首先是 .NET 5 的应用, 然后 dotnet-monitor 收集应用的指标信息, Prometheus 定时拉取并存储 dotnet-monitor 的 metrics, 最后用 Grafana 进行可视化。

原文链接: https://dotnetos.org/blog/2021-11-22-dotnet-monitor-grafana/


ca7132a4ee13cbe8bb2c5a9c604c9d9b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chrome 插件 页面请求转发_巧用Chrome插件二三事

作为程序员,在日常工作中往往会遇到一些影响工作效率的事情,比如:配套工具不趁手,开发环境难以搭建,代码调试困难等。这些问题由于并不直接与产品相关,所以往往受到忽视,但它们却又无时无刻不在…

JDeveloper中文乱码问题

刚开始学习ADF,JDeveloper就碰到中文乱码问题,设置了编码还是不能解决,显示效果如下 其实是代码编辑器字体不支持中文导致,在代码编辑器右键选择Preferences->Code Editor->Fonts,选择一种支持中文的字体&#x…

这几张图告诉你化学到底有多神奇!看完瞬间觉得智商都提高了!

▲ 点击查看提到化学,大家脑子里都会想到什么呢?枯燥的化学式?还是难背的元素周期表?还是让人头疼的化学考试题?在由NHK,NHK Educational Corp、西南德国广播(SWR)、卡塔尔半岛电视台…

Android之可以做的两件坏事---破解锁屏密码和获取Wifi密码

转载:http://blog.csdn.net/jiangwei0910410003/article/details/41800409 之前的文章一直在介绍OC,最近也是在找急忙慌的学习IOS,所以Android方面的知识分享就有点中断了,但是我现在还是要靠Android吃饭,所以不能And…

使用Vue构建中(大)型应用

想做SPA就快上车! init 首先要起一个项目,推荐用vue-cli安装 $ npm install -g vue-cli $ vue init webpack demo $ cd demo $ npm install demo是这个示例项目的名字 现在看到目录结构如下 下面来稍微介绍下 build目录是一些webpack的文件,配…

Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别

转载:http://blog.csdn.net/yanzi1225627/article/details/47850471 最近又用到了动画,决定把几次项目里用到的动画走过的弯路总结一下,顺便梳理下android的动画体系。众所周知,android动画分三类:一是View 动画&…

现在的娃娃有多智能?

1 我的12月(素材来源网络,侵删)▼2 抱歉啊女儿...(素材来源网络,侵删)▼3 一看就很厉害的名字▼4 突然的潮流(素材来源网络,侵删)▼5 上下班的表情管理(素…

Nats的消息通信模型

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50996679 Nats的消息通信模型 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http:…

.NET6之MiniAPI(一):开始Mini API

Mini API之前的官方.net web框架,都是偏重的,不像其他语言,如go,python,或基于c#的nancy,都是简洁方式来开启web之旅的。所以有小伙伴就吐槽.net基于web的不友好性,这不,.net6中官方…

超线程_超线程加核显 i310100+梅捷H410超值爆款组合

酷睿i3-10100是一颗4核心8线程,三级缓存6MB,主频3.6-4.3GHz,集成核显UHD 630 350-1100MHz,热设计功耗65W。对比上代酷睿i3-9100,它增加了超线程技术,加速频率高了100MHz,其他不变。为什么在短短…

Hibernate之悲观锁与乐观锁

http://blog.csdn.net/a19881029/article/details/20665663 如果需要保证数据访问的排它性,则需对目标数据加“锁”,使其无法被其它程序修改 一,悲观锁 对数据被外界(包括本系统当前的其它事务和来自外部系统的事务处理&#xff0…

他本硕博连跨3大专业,毕业后没多久被破格聘为985高校教授!

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:募格学术整合自东南大学新闻网、东南大学校团委、募格课堂图片:网络来源:东南大学新闻网、东南大学校团委他从本科的计算机专业,到研究生的应用数学专业,再到博士开始研…

Winform VS2015打包

首先 ,我们要去官网http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio注册一个账号已获得installshiled的注册码。 是免费的~ 注册完后就可以下载我们的第三方打包工具: 注意:这里下载并安装完…

触发键盘_雷蛇这款光轴机械键盘开箱评测,光速触发,颜值爆表

首先感谢头条众测给予雷蛇猎魂光蛛精英版机械键盘的测评机会,雷蛇作为在游戏设备领域深耕的领先者,其生产的游戏设备深得游戏玩家喜爱,下面我们来一睹这款雷蛇机械键盘的风采。首先从包装盒正面可以感受到这款雷蛇光学机械轴键盘霸气侧漏&…

spring之使用Spring Security实现权限管理

转载:http://hanqunfeng.iteye.com/blog/1155226 目录 SpringSecurity3.X--一个简单实现 SpringSecurity3.X--前台与后台登录认证 SpringSecurity3.X--remember-me SpringSecurity3.X--验证码 作者对springsecurity研究不深,算是个初学者吧,最…

iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...

目 录1. 概述... 22. 平台演示... 23. 云端控制策略和应用过程... 23.1 云端控制策略... 23.2 控制应用过程... 34. 实时日志... 71. 概述这次升级主要提升云端控制的安全策略,不管公有云部署或是私有云部署&#…

直男的回答能多出乎意料?

1 我家的鸭子没这么扁(素材来源网络,侵删)▼2 这个回答,妙啊...(素材来源网络,侵删)▼3 强迫症犯人要求判10年▼4 像羊又像猫(素材来源网络,侵删)▼5 美女…

Angularjs调用公共方法与共享数据

这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因为在每个controller中直接注入这个toast插件…

mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

前面说了很多MySQL中的查询,比如条件查询、分组聚合查询、连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询。PART01子查询子查询也称嵌套查询,是将一个查询语句嵌套在另一个查询语句的WHERE子句或者HAV…

那些不回你微信的人都在看什么?

如何成为一个“聊得开”的人?如何丰富空闲时光?如何在短时间内获取最最专业的文化、艺术资讯?小编给大家推荐几个公众号它们有趣有颜有料长按二维码,选择“识别图中二维码”关注印客美学id:inkbetter△长按二维码“识别…