前言

最近几个月一直在研究开源的APM和监控方案,并对比使用了Zipkin,CAT,Sky-walking,PinPoint(仅对比,未实际部署),Elastic APM,TICK Stack,Prometheus等开源产品,其中不乏功能强大的监控和追踪系统,但它们都对.NET/.NET Core没有支持或支持不够完备。而在.NET/.NET Core平台也仅有Metrics.NET,AppMetrics,MiniProfiler等轻量级监控组件,它们也都和功能完备的APM系统差距甚远,也无法完全满足对当前流行的微服务系统进行全链路追踪和端对端监控的需求。为了满足实际的监控需求以及自身对APM系统的研究刨析,我决定从零开发.NET/.NET Core的APM,它应该包含

  1. Http请求监控

  2. 应用健康检查

  3. 方法执行监控

  4. 应用内数据库访问监控

  5. 应用内缓存访问监控(Redis)

  6. CLR/CoreCLR Runtime/GC/Threading监控

  7. 请求链路监控

  8. 分布式追踪

为了实现如上需求,我创建了AspectCoreAPM(基于AspectCore AOP的APM client agent)和Butterfly(独立的分布式追踪Server)两个开源项目,你可以在dotnet-lab[https://github.com/dotnet-lab]这个github organization下找到它们。下面将分别对两个项目进行简单介绍。

Butterfly--A distributed tracing server

Butterfly被设计为分布式追踪和APM的Server端,它将包含Collector,Storage,独立的Web UI,并使用Open Tracing规范来设计追踪数据。目前仅根据规范实现了Open Tracing API。

AspectCoreAPM

AspectCoreAPM抽象了APM的应用探针设计,它将会使用自动探针(收集CLR/CoreCLR数据),AOP探针(收集方法执行数据)和手动探针(业务数据)三种方式来收集数据发送到不同Collector Server或Storage。鉴于Butterfly Server并未完全实现,现阶段使用InfluxDB作为数据存储,并使用Grafana进行监控展示(在Butterfly Server完成后在Web UI进行统一的监控数据展示)。AspectCoreAPM目前已经完成了Http请求监控,简单的GC/Threading监控和RedisClient监控。
在使用AspectCoreAPM之前,我们需要先安装InfluxDB和Grafana。

在这里我使用ubuntu作为演示,如需在其他系统安装InfluxDB和Grafana,请各自参考它们的文档:
InfluxDb:https://portal.influxdata.com/downloads  Grafana:https://grafana.com/grafana/download

安装InfluxDB:

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.4.2_amd64.debsudo dpkg -i influxdb_1.4.2_amd64.deb

安装之后,执行influx进入influxdb的CLI,并创建一个名称为aspectcore的database:

CREATE DATABASE aspectcore

然后安装Grafana:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.6.2_amd64.deb sudo dpkg -i grafana_4.6.2_amd64.deb

Grafana默认绑定的http地址为localhost,我们需要修改http_addr才可在外部访问Grafana,使用vi打开Grafana的配置文件:

sudo vi /etc/grafana/grafana.ini

找到http_addr配置修改为0.0.0.0:3000或你的外网IP。

在浏览器打开Grafana,默认账号和密码均为admin,然后添加DataSource。Type选择influxdb,并且database填写我们上面创建的aspectcore

下载并导入AspectCoreAPM的Dashborad : https://grafana.com/dashboards/3837

接下来创建一个Asp.Net Core项目,并从nuget添加AspectCoreAPM:

Install-Package AspectCore.APM.AspNetCoreInstall-Package AspectCore.APM.LineProtocolCollectorInstall-Package AspectCore.APM.ApplicationProfiler

修改Startup.cs

public class Startup{   

 public Startup(IConfiguration configuration)    {Configuration = configuration;}    

 public IConfiguration Configuration { get; }    // This method gets called by the runtime. Use this method to add services to the container.  public IServiceProvider ConfigureServices(IServiceCollection services)    {services.AddMvc();services.AddAspectCoreAPM(component =>{component.AddApplicationProfiler();   //注册ApplicationProfiler收集GC和ThreadPool数据component.AddHttpProfiler();          //注册HttpProfiler收集Http请求数据component.AddLineProtocolCollector(options => //注册LineProtocolCollector将数据发送到InfluxDb{options.Server = "http://192.168.3.4:8086"; //你自己的InfluxDB Http地址options.Database = "aspectcore";    //你自己创建的Database});});          return services.BuildAspectCoreServiceProvider(); //返回AspectCore AOP的ServiceProvider,这句代码一定要有}   

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.      public void Configure(IApplicationBuilder app, IHostingEnvironment env)    {app.UseAspectCoreAPM();     //启动AspectCoreAPM,这句代码一定要有app.UseHttpProfiler();      //启动Http请求监控if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvc();}
}

启动应用并访问页面。最后回到Grafana,在DataSource处选择aspectcore,就能看到我们的监控数据啦。

有问题反馈

希望有更多的.NET/.NET Core开发者能关注到这个项目并参与进来。
如果您有任何问题,请提交 Issue 给我们。
Github : https://github.com/dotnet-lab/AspectCore-APM
如果您觉得此项目对您有帮助,请点个Star~
AspectCore QQ群: 306531723

原文:http://www.cnblogs.com/liuhaoyang/p/next-plan-apm.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

下一个计划 : .NET/.NET Core应用性能管理相关推荐

  1. 一个迷你ASP.NET Core框架的实现(下)

    [框架内幕]| 作者 / Edison Zhou 这是恰童鞋骚年的第196篇原创文章 上一篇我们了解了AspNetCore.Mini这个项目的背景及项目结构和流程,这一篇我们继续解析几个核心对象.本文 ...

  2. 下一个阶段(用C++重写Lucene的计划)

    Lucene是一个非常优秀的开源搜索引擎框架,原语言是用的Java,现在已经被扩展到了各种语言上,如Python,C++,.Net,那为什么我还要重写呢? 其实重写代码是一个非常有价值的事情,对于代码 ...

  3. 视频号计划,撑得起微博下一个十年?

    配图来自Canva 微博近日宣布推出"微博视频号计划".未来一年,微博将投入10亿精准广告投放资源以及300亿顶级曝光资源,帮助视频号积累社交资产,实现品牌影响力的提升和出圈.同时 ...

  4. [2017全球人工智能高峰论坛]城市大脑是下一个十年的登月计划 王坚说出了什么?...

     浙江在线7月10日讯(浙江在线记者 章卉  唐骏垚 曾福泉)"城市大脑就是下一个登月计划,未来十年催生的技术将远超今天的想象,"阿里巴巴技术委员会主席王坚表示,"正如6 ...

  5. 抢注下一个新能源风口,骥翀氢能计划三年内做燃料电池电堆行业龙头|快公司...

    关注ITValue,看企业级最新鲜.最价值报道! 自2020年以来,在特斯拉的带领下,蔚来.理想.小鹏等一众电动汽车制造商股价倍数飙涨.但对许多市场投资人来说,他们现在更为关注的是电动车的零件供应商, ...

  6. 张亚勤、韦乐平等综述论文:通信人工智能的下一个十年

    来源:专知 [摘 要]移动通信技术走过了37年的发展历程,人工智能技术也已走过了64年的发展历程.从早期的各自独立演进,到5G与人工智能开始深度融合发展,"5G与人工智能"已被业界 ...

  7. 淘汰过时的工具也有错?微软的 Blazor 框架会是下一个 SilverLight?

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 在 HTML5 的冲击下,和 Adobe Flash Player 的发展趋势相类似,微软投入十几年时间打造的 Silverlight 最 ...

  8. 进入 32 位时代,谁能成为下一个8051?

    RISC-V架构在极短的时间内便引起了业界的高度关注,从众多反应快速的小公司到实力雄厚的巨头公司(如NVIDIA.西部数据等)均开始使用RISC-V架构开发产品."旧时王谢堂前燕,飞入寻常百 ...

  9. 跨链之后,区块链的下一个风口在哪里?

    区块链世界的热点,转换总是非常快.在过去短短的一两年时间里,就经历了1C0.公链.ST0.DApp.小野币.DeFi.平台币.IE0.模式币等等.很多玩家纷纷表示,投资虚拟货币比投资股票累多了,学不完 ...

最新文章

  1. JavaScript权威Douglas Crockford:代码阅读和每个人都该学的编程
  2. IEEE史上首位华人主席!马里兰大学终身教授刘国瑞当选
  3. Matlab中计算程序运行时间的三种方法
  4. c++缓冲区buffer
  5. 题目1023:EXCEL排序
  6. 三层架构与四大天王之——查
  7. ubuntu python3.5升级3.6_ubuntu16.04升级Python3.5到Python3.7
  8. Python中zip()函数的解释和可视化
  9. PTA—比较大小(C语言)
  10. php swfobject,SWFObject基本用法实例分析_javascript技巧
  11. jconsole远程连接的使用
  12. P2882 [USACO07MAR]Face The Right Way G 【贪心 + 差分】
  13. funnyface表情包制作神奇
  14. 配置Hadoop格式化namenode时报错cannot create directory /usr/local/hadoop/tmp/dfs/name/current
  15. ora-3136故障处理
  16. 中缀和后缀表达式的转换
  17. html 波斯语 对齐,在htm中使用波斯语字体发送大量HTML电子邮件
  18. 现代企业管理-管理概论
  19. java获取jdk存放路径,javac.exe命令文件存放在JDK安装目录的lib目录下。()
  20. 网络安全学习记录-9

热门文章

  1. 避免活跃性危险(第十章)
  2. sort命令详解及Nginx统计运用
  3. Kuzzle,一种内部部署的文档后端
  4. c/c++ code JSON
  5. 控制用户的访问之权限、角色【weber出品必属精品】
  6. 如何改变X:\Users\XXX的用户名称
  7. C#学习笔记(十四):StatusBar控件
  8. 如何在 .NET Core 中获取 CPU 使用率
  9. 微软Build2021今日召开,共同期待VS2022+.NET6!
  10. C#使用iTextSharp操作PDF文件