HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用。php
github:https://github.com/dotnetcore/HttpReportsjava
我也很荣幸在.NET Conf 2020 大会上, 作了简单的分享,开源不易,感兴趣的同窗欢迎Star,支持一下...git
在线预览: http://apm.nonop.cn/
帐号: admin 密码 123456github
用户访问了咱们的三个程序,每一个程序都安装了HttpReports,它负责采集一些程序的数据和指标,而后经过Http的方式发送到Collector,简单处理后,会录入到不一样的数据库中,同时,HttpReports.UI 负责把这些数据多维度的展现出来。数据库
接下类,我会构建监控的 Dashboard,而后在咱们的.NET Core 程序中安装HttpReports来收集数据,最后展现到UI上,让咱们看看这有多简单!json
首先,须要初始化数据库,来存储收集的数据,这里我使用的是MySql数据库(或者是SqlServer,PostgreSQL), 我手动建立了一个数据库 HttpReports, 记住这个地址,后边会用到。api
首先,咱们须要构建 Dashboard 来接收,处理和展现数据,Dashboard 使用了 Vue + Antv + ElementUI 构建了页面,而后把静态文件打包到了程序集,咱们只要在.NET Core 应用中,经过Nuget安装便可。app
新建一个 .Net Core 的空的Web项目,支持 2.1 及以上版本ui
新建完成后,经过Nuget包分别安装 HttpReports.Dashboard
,HttpReports.MySQL
(或者是HttpReports.SqlServer
, HttpReports.PostgreSQL
)。设计
安装完成以后,须要简单的配置一下,咱们直接修改项目的 appsetting.json 文件
{ "HttpReportsDashboard": { "ExpireDay": 3, "Storage": { "ConnectionString": "DataBase=HttpReports;Data Source=localhost;User Id=root;Password=123456;", "DeferSecond": 3, "DeferThreshold": 10 }, "Check": { "Mode": "Self", "Switch": true, "Endpoint": "", "Range": "500,2000" }, "Mail": { "Server": "smtp.163.com", "Port": 465, "Account": "HttpReports@qq.com", "Password": "*******", "EnableSsL": true, "Switch": true } } }
如今参数有不少,不要担忧,咱们如今只须要检查数据库的链接字符串,确保让它能够成功的链接到你的数据库,其余的参数,你能够在官方的文档中找到它们,本文就再也不多说。
修改完 appsetting.json 后,咱们接着修改 Dahboard 项目的 Startup.cs 文件:
public void ConfigureServices(IServiceCollection services) { services.AddHttpReportsDashboard().AddMySqlStorage(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseHttpReportsDashboard(); }
而后 Run,若是没有问题的话,会跳转到Dashboard的登录页面,默认的帐号:admin 密码: 123456
如今咱们有了 Dashboard,可是没有数据, 咱们还须要在咱们的.NET Core 应用中安装HttpReports,它负责采集和发送数据。
我新建了一个 WebAPI 项目 UserService(用户服务) ,而后咱们经过 Nuget 分别安装 HttpReports
, HttpReports.Transport.Http
。
安装完成后,一样的,咱们修改 appsettings.json,简单配置一下
{ "HttpReports": { "Transport": { "CollectorAddress": "http://localhost:5000/", "DeferSecond": 10, "DeferThreshold": 100 }, "Server": "http://localhost:7000", "Service": "User", "Switch": true, "RequestFilter": [ "/api/health/*", "/HttpReports*" ], "WithRequest": true, "WithResponse": true, "WithCookie": true, "WithHeader": true } }
参数介绍:
Transport - CollectorAddress - 数据批量发送的地址,配置Dashboard 的项目地址便可
Server - 服务的地址,User服务我用了localhost:7000
Service - 服务名称 User
修改完成后,咱们接着修改 UserService 项目的 Startup.cs 文件
app.UseHttpReports();
这一行必定要放到 UseRouting() 和 UseEndpoints()方法 的上面。
修改 UserService 项目的启动端口为7000,而后在解决方案中设置多项目启动, 同时运行 UserService 和 Dashboard项目。
咱们多请求几回 UserService 的接口,而后再回到 Dashboard的页面,选择一下时间,如今已经能够看到数据了!
到目前为止,咱们已经在.NET Core 的程序中简单的使用了HttpReports,还有一些其余的功能,你能够在官方文档中更详细的介绍。
语雀 - https://www.yuque.com/httpreports/docs/uyaiil
在中小的项目中,你能够使用 HttpReports监控你的 .NET Core程序,这很简单, 而且它是开源的。
另外 HttpReports 也有一些其余的问题,好比,难以应对海量数据,没有彻底按照 OpenTrace 规范,这些和项目早期的设计有很大的关系。
可是没有关系,如今有 OpenTelemetry,它兼容了OpenTracing和OpenCensus, 目前 1.0 版本也才发布了一个月左右,将来它会有更多的应用场景。
因此,我在最近启动了一个新项目 Furtuna,是按照 OpenTelemetry 规范去设计,你彻底能够在 java, dotnet,php, go等语言中使用它,固然目前还只是在开发阶段。
关于这个名字,Furtuna 是罗马神话最古老的女神之一,可以带来幸福和机遇,寓意也很简单,保护咱们的程序,让它变的更好。