微服务统计,分析,图表,监控, 分布式追踪一体化的 HttpReports 在 .Net Core 的应用...

前言介绍

HttpReports 是针对.Net Core 开发的轻量级APM系统,基于MIT开源协议, 使用HttpReports可以快速搭建.Net Core环境下统计,分析,图表,监控,分布式追踪一体化的站点, 适应.Net Core WebAPI,MVC,Web项目, 通过引用Nuget构建Dashboard面板,上手简单,适合在微服务架构中使用。

Github地址:https://github.com/SpringLeee/HttpReports

在线预览: https://moa.hengyinfs.com

账号: admin 密码 123456

开源不易,感兴趣的同学欢迎 Github Star 一波...

主要功能

  • 接口调用指标分析

  • 多服务节点数据聚合分析

  • 慢请求,错误请求分析

  • 接口调用日志查询

  • 趋势数据分析 (维度:分钟,小时,天)

  • 多类型预警监控

  • HTTP调用分析

  • Grpc调用分析

  • 分布式追踪

  • 多数据库支持,集成方便

数据库支持

数据库Nuget包名称
SqlServerHttpReports.SqlServer
MySqlHttpReports.MySQL
OracleHttpReports.Oracle
PostgreSQLHttpReports.PostgreSQL

HttpReports Dashboard-UI


快速开始 ????

Step1: 初始化数据库

HttpReports 需要手动创建数据库, 我这里使用 SqlServer 数据库为例,创建数据库 HttpReports, 当然数据库名称可以自由定义, 后边程序要和这个数据库名字对应。

Step2: 集成到WebAPI应用

打开VS开发工具,新建一个 WebAPI 应用,这里 .Net Core 版本只要是2.0 以上即可,我这里用的是3.1版本,创建完成后,Nuget 包引用 HttpReports

引用成功后,因为我使用的是SqlServer 数据库,我们再Nuget引用 HttpReports.SqlServer 包

找到程序的 appsetting.json,修改为以下配置, 注意:这里Storage 配置的数据库名称要和新建的数据库名称一致

{"HttpReports": {"Storage": {"ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;" },"Node": "UserService"}
}

配置完成后,然后我们再修改 StartUp.cs 文件,修改为以下代码

public void ConfigureServices(IServiceCollection services)
{services.AddHttpReports().UseSQLServerStorage();services.AddControllers();
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseHttpReports();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

一切准备就绪后,我们启动 WebAPi,并且刷新几次页面,到这里为止,WebAPI的部分我们已经完成了 ????

Step3: 集成可视化 Dashboard

使用VS新建一个 .Net Core MVC 应用, 新建完成后,通过Nuget包我们分别安装 HttpReports.Dashboard ,HttpReports.SqlServer

引用完成后,修改Dahboard项目的 appsetting.json 文件, 注意数据库要一致

{"HttpReportsDashboard": {"Storage": {"ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;"}}
}

修改完成后,我们接着修改 Dahboard 项目的 Startup.cs 文件

public void ConfigureServices(IServiceCollection services){services.AddHttpReportsDashboard().UseSQLServerStorage();services.AddControllersWithViews();
}public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseHttpReportsDashboard();...
}

一切准备就绪后,我们启动Dashboard 项目,如果没有问题的话,会跳转到Dashboard的登陆页面
默认账号:admin 密码: 123456 , 登陆后可修改

例子中我用的是SqlServer 数据库,其他的数据库也是类似的,我只创建了一个WebAPI,当然HttpRrports 也支持多个WebAPI,我们只要修改appsetting.json 的 Node,你可以设置 Node 为 UserService, OrderService... ,到这里一个最简单集成 HttpReports 的例子已经完成了, 请尽情使用吧 ????

Grpc 支持

微服务Grpc的流行,我们也做了Grpc的适配,如果您的项目中使用Grpc通信的话,需要在你的api项目中,Nuget包引用 HttpReports.Grpc,注意这里是api项目引用,不是Dashboard 项目引用

修改startup.cs

public void ConfigureServices(IServiceCollection services)
{services.AddHttpReports().UseSQLServerStorage().UseGrpc();services.AddControllersWithViews();
}

预警监控

HttpReports.Dashboard 集成了预警监控功能,使用的话需要先配置 Smtp 邮箱,否则接收不到预警邮件哦,

我们修改Dashboard项目的appsetting.json为下面即可

{"HttpReportsDashboard": {"Storage": {"ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;"},"Mail": {"Server": "smtp.qq.com","Port": 465,"Account": "","Password": "","EnableSsL": true}}
}

监控功能主要针对以下四项监控

  • 响应超时

  • 请求错误

  • IP异常

  • 请求量监控

简单说明下,监控频率 选1小时,也就是1个小时 运行一次,然后填入预警的收件邮箱,多个邮箱用逗号隔开, aaa.qq.com,bbb.qq.com , 服务节点 可以选中单个和多个节点,默认的话,下边 4个监控都是关闭状态, 如果需要勾选启动即可,具体的话这里就不多说了.

预警支持 WebHook,配置后可以自动把预警信息推送到您定义的地址,推送方式为Post推送

{"Title":"...","Content":"..."  
}

最后,贴上两个完整的配置文件供大家参考

WebAPI端

{"HttpReports": {"Storage": {"ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;","EnableDefer": false,"DeferSecond": 20,"DeferThreshold": 3},"Node": "UserService","Switch": true,"FilterStaticFiles": true}
}

参数说明:
EnableDefer 开启为异步入库,默认false
DeferSecond 异步入库的秒数
DeferThreshold 异步入库的条数
Node 服务节点名称
Switch 是否开始数据收集,默认true
FilterStaticFiles 收集数据是否过滤静态文件,默认true

Dashboard端

{"HttpReportsDashboard": {"Storage": {"ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;" },"UseHome": true,"ExpireDay":7,"Mail": {"Server": "smtp.qq.com","Port": 465,"Account": "","Password": "","EnableSsL": true  }}
}

参数说明:
UseHome Dashboard使用主页路由,默认为true,false 的话,路由为 localhost/Dashboard
ExpireDay 收集数据的有效期,默认30天

总结

HttpReports 是 .Net Core环境下开源的APM系统,非常适合微服务环境中使用,如果是中小型项目的话,那么使用 HttpReports 是一个不错的选择, 开源不易,如果能帮助到您的话,还请希望给个Star 支持下, 感谢 ????

Github: https://github.com/SpringLeee/HttpReports

MIT协议

交流反馈

如果您在项目中使用了HttpReports,或者感兴趣的可以加入QQ群 897216102, 大家一起沟通,有更新也会第一时间通知,也可以添加我的微信,希望可以帮助到您

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

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

相关文章

WPF 创建自定义面板

前面两个章节分别介绍了两个自定义控件:自定义的ColorPicker和FlipPanel控件。接下来介绍派生自定义面板以及构建自定义绘图控件。创建自定义面板是一种特殊但较常见的自定义控件开发子集。前面以及介绍过有关面板方面的知识,了解到面板驻留一个或多个子元素&#x…

vue.js中mock本地json数据

vue.js中mock本地json数据 新版本的vue项目中已经将dev-server.js,dev-client.js两个js文件合并到了webpack.dev.conf.js文件中,以下分别是新旧版本的build目录结构: 新版本: 旧版本: 本次验证mock:运…

互联网40岁失业是一个无法打破的魔咒吗?

最近刚刚过完生日,又大了一岁,距离40岁又进了一步。年纪大了,就要多复盘。最近几天思考的比较多,因为身边失业的朋友开始多了起来。我又有点陷入担忧、焦虑的心态了。好在我一直是个有阿Q精神的中年油腻男,很快安抚好自…

数据结构与算法--复杂链表的复制

复杂链表的复制 题目:实现一个函数complexListNode 复制一个复杂链表。在链表中,每个节点除了有一个next指针指向下一个节点,还有另外一个before节点,before节点指向链表中任意一个节点,或者null节点。链表节点定义使…

如何实时主动监控你的网站接口是否挂掉并及时报警

“ 阅读本文大概需要 10 分钟。 ”最近我在公司负责的业务已经正式投入上线了,既然是线上环境,那么就需要保证其可用性。我负责的业务其中就包括一个 Web Service,我需要保证 Service 的每个接口都是可用的,如果某个时间流量大了或…

数据结构与算法--二叉查找树转顺序排列双向链表

二叉查找树转顺序排列双向链表 题目:输入一颗二叉查找树,将二叉查找树转成一个排序的双向链表,要求不能创建任何新节点,只调整树节点中指针的指向。例如下图所示: 本次二叉查找树节点定义使用之前文章 数据结构与算法…

5种避免C#.NET中因事件造成内存泄漏的技术

原文来自互联网,由长沙DotNET技术社区编译。 5种避免C#.NET中事件造成的内存泄漏的技术C#(通常是.NET)中的事件注册是内存泄漏的最常见原因。至少从我的经验来看。实际上,我从事件中看到了太多的内存泄漏&a…

数据结构与算法--字符串的排列组合问题

字符串的全排列 题目:输入一个字符串,打印出改字符串中所有字符的所有排列。例如输入字符串abc,那么打印出由a,b,c字符组成的所有字符串:abc,acb,bac,bca,cab…

[GitHub] 75+的 C# 数据结构和算法实现

C#中标准数据结构和算法的即插即用类库项目GitHub:https://github.com/aalhour/C-Sharp-AlgorithmsWatch: 307 Star: 3.4k Fork: 910o---o | |/ --O---O--O | |\ --O---O--o---o | |O o o--o o--o o---o o-O-o …

我是如何一步步的在并行编程中将lock锁次数降到最低实现无锁编程

在并行编程中,经常会遇到多线程间操作共享集合的问题,很多时候大家都很难逃避这个问题做到一种无锁编程状态,你也知道一旦给共享集合套上lock之后,并发和伸缩能力往往会造成很大影响,这篇就来谈谈如何尽可能的减少lock…

常用Arthas命令

jad反编译 检查线上代码是否修改成功,例如修改interface后看Jar包是否引入新的,或者代码是否最新的。 jad com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl //反编译只展示源码 jad --source-only com.zhenai.c…

关于分布式锁的面试题都在这里了

「我今天班儿都没上,就为了赶紧把这篇文章分布式锁早点写完。我真的不能再贴心了。」「边喝茶边构思,你们可不要白嫖了!三连来一遍?」引言为什么要学习分布式锁?最简单的理由就是作为一个社招程序员,面试的…