? 前言介紹
HttpReports 是基於.Net Core 開發的APM監控系統,使用MIT開源協議,主要功能包括,統計, 分析, 視覺化, 監控,追蹤等,適合在微服務環境中使用。
Github地址:https://github.com/dotnetcore/HttpReports
線上預覽: http://122.51.188.23:8080 (頻寬有限,第一次會有點慢)
線上文件: https://www.yuque.com/httpreports/docs
賬號: admin 密碼 123456
開源不易,感興趣的同學還希望點個Star,支援下
? 簡單架構
? 主要功能
- 介面呼叫指標分析
- 多服務節點資料聚合分析
- 慢請求,錯誤請求分析
- 介面呼叫日誌查詢
- 多型別預警監控
- HTTP,Grpc 呼叫分析
- 分散式追蹤
- 多資料庫支援,整合方便
- 程式效能監控
2.0 更新
HttpReports 上一次釋出HttpReports 還是在3個月前,HttpReports 2.0 版本的改動還是挺大的,所以建議老版本的升級前,還是先看下文件,本次更新主要以下幾個方面
- 專案結構調整,統一使用 HttpTransport
- 使用 Vue + Antv + ElementUI 重構了Dashboard
- 使用FreeSql ORM重構了儲存層,之前相容多資料庫是個很頭疼的問題,要寫很多sql,FreeSql相容的很好,現在專案裡面你找不到一行sql, 用起來非常方便,效能也有提升,這裡給葉老闆點個贊
? 預覽
引用 HttpReports.Dashboard
首先,需要建立Dashboard 專案來接收,處理和展示資料,Dashboard 使用了 Vue + Antv +ElementUI 構建頁面並打包到程式集,只需要Web專案引用 Nuget包安裝即可,非常方便。
新建一個 .Net Core 的空Web專案,支援 2.1 及以上版本
新建完成後,通過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": 10,
"DeferThreshold": 100
},
"Mail": {
"Server": "smtp.163.com",
"Port": 465,
"Account": "HttpReports@qq.com",
"Password": "*******",
"EnableSsL": true,
"Switch": true
}
}
}
引數介紹:
ExpireDay - 資料過期天數,預設3天,HttpReports 會自動清除過期的資料
Storage - 儲存資訊
DeferSecond - 批量資料入庫的秒數,建議值 5-60
DeferThreshold - 批量資料入庫的數量,建議值100-1000
Mail - 郵箱資訊,配置監控的話,可以發告警郵件
修改完成後,我們接著修改 Dahboard 專案的 Startup.cs 檔案
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpReportsDashboard().UseMySqlStorage();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpReportsDashboard();
}
把Dashboard 程式啟動起來,如果沒有問題的話,會跳轉到Dashboard的登陸頁面 預設賬號:admin 密碼: 123456
現在視覺化有了,但是沒有資料,我們還需要 給服務端程式,新增 HttpReports 來收集資訊。
引用HttpReports
我新建一個WebAPI 專案 UserService ,來充當使用者服務,然後安裝 HttpReports,當然你可以在你的專案中直接使用
Nuget 引用 HttpReports , HttpReports.Transport.Http
修改 appsettings.json,簡單配置一下
{
"HttpReports": {
"Transport": {
"CollectorAddress": "http://localhost:5000/",
"DeferSecond": 10,
"DeferThreshold": 10
},
"Server": "http://localhost:7000",
"Service": "User",
"Switch": true,
"RequestFilter": [ "/api/Helath/*", "/HttpReports*" ],
"WithRequest": true,
"WithResponse": true,
"WithCookie": true,
"WithHeader": true
}
}
引數介紹:
Transport -
CollectorAddress - 資料傳送的地址,配置Dashboard 的專案地址即可
DeferSecond - 批量資料入庫的秒數,建議值 5-60
DeferThreshold - 批量資料入庫的數量,建議值100-1000
Server - 服務的地址,
Service - 服務的名稱
Switch - 是否開啟收集資料
RequestFilter - 資料過濾,用 * 來模糊匹配
WithRequest - 是否記錄介面的入參
WithResponse - 是否記錄介面的出參
WithCookie - 是否記錄Cookie 資訊
WithHeader - 是否記錄請求Header資訊
修改完成後,我們接著修改 UserService 專案的 Startup.cs 檔案
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpReports().UseHttpTransport();
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpReports();
....
修改 UserService 專案的啟動埠為7000, 然後 VS 設定多專案啟動, 同時執行 UserService 和Dashboard
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().UseUrls("http://localhost:7000");
});
重新整理下 UserService 的介面,再回到Dashboard的頁面上面,已經可以看到資料了,一個簡單的服務接入HttpReports,已經完成了,是不是很簡單!
配置IP和埠 Server
HttpReports 需要顯式指定Web程式的IP和埠,當然這個地址用外網和內網的都可以,在微服務環境中, 一個服務會開啟多個例項, HttpReports 通過IP和埠來區分不同的程式例項。
在appsetting.json 中配置
我們直接在 appsetting.json 中設定 Urls 屬性,你可以設定 "Server": "http://127.0.0.1:3000"
在命令列引數中配置
dotnet UserService.dll --urls="http://127.0.0.1:3000"
或者
dotnet UserService.dll --HttpReports:Server="http://127.0.0.1:5000"
交流溝通
貢獻的最簡單的方法之一就是是參與討論和討論問題(issue)。你也可以通過提交的 Pull Request 程式碼變更作出貢獻。
可以新增QQ群溝通,也可以新增的微信,我拉你進微信群
寫在最後
HttpReports 從第一次提交程式碼到現在已經10個月了,兼職開源,佔據了生活很大一部分的時間, 一個個版本迭代到現在,2.0 不是最終版,未來可能會有 3.0 5.0,我看支援的同學也有很多,有很多人提了很多意見,感謝各位的支援,讓我們覺得做這件事是有意義的,一定會把 HttpReports 做的越來越好