微服務統計,分析,圖表,監控一體化的HttpReports專案在.Net Core 中的使用

語言: CN / TW / HK

簡單介紹

HttpReports 是 .Net Core 下的一個Web專案, 適用於WebAPI,Ocelot閘道器應用,MVC專案,非常適合針對微服務應用使用,通過中介軟體的形式整合到您的專案中,可以讓開發人員快速的搭建出一個 資料統計,分析,圖表,監控 一體化的 Web站點。

主要模組

主要包含HttpReports 中介軟體 和 HttpReports.Web 的MVC專案;

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

HttpReports.Web:https://github.com/SpringLeee/HttpReportsWeb

線上預覽:http://175.102.11.117:8801 賬號 admin 密碼 123456

支援專案型別

:joy: 單個WebAPI應用

:laughing: 多個獨立WebAPI應用

:blush: Ocelot 閘道器應用

:stuck_out_tongue: 單個MVC專案

:smiley: 多個MVC專案

如何使用

1.新增 HttpReports 中介軟體

Nuget 包安裝 HttpReports, 開啟Startup.cs, 修改 ConfigureServices(IServiceCollection services) 方法,新增以下程式碼,放在 services.AddMvc() 之前都可以。

選擇您的應用型別:

:laughing: 單個WebAPI應用 或者 使用Ocelot閘道器的應用

修改 ConfigureServices 方法 ,

public void ConfigureServices(IServiceCollection services)
{
// 新增HttpReports中介軟體
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer);

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

:laughing: ** 多個獨立的WebAPI應用 **

假設有一個 授權(Auth)API應用,和一個支付(Pay)API應用,並且沒有使用閘道器,需要分別在兩個專案的Startup.cs檔案的 ConfigureServices 方法中分別新增以下程式碼:

授權API應用(Auth)

services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Auth");

支付Pay應用(Pay)

services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Pay");

:laughing: 單個MVC應用

public void ConfigureServices(IServiceCollection services)
{
// 新增HttpReports中介軟體
services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer);

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

:laughing: 多個MVC應用

假設有一個 電商(Mall)應用,和一個支付(Pay)應用,需要分別在兩個專案的Startup.cs檔案的 ConfigureServices 方法中分別新增以下程式碼:

電商MVC應用 (Mall)

services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Mall");

支付MVC應用 (Pay)

services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Pay");

:laughing: 切換資料庫

使用MySql資料庫

services.AddHttpReportsMiddlewire(WebType.API, DBType.MySql);

使用SqlServer資料庫

services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer);

2.使用 HttpReports 中介軟體

修改 StartUp.cs 的 Configure 方法

.Net Core 2.2

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//使用HttpReports
app.UseHttpReportsMiddlewire();

app.UseMvc();
}

必須要放在 UseMVC() 方法和其他中介軟體的前邊,否則不生效。

.Net Core 3.0 和以上版本

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//使用HttpReports
app.UseHttpReportsMiddlewire();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

必須要放在 UseEndpoints() 方法和其他中介軟體的前邊,否則不生效。

3. appsettings.json 配置連線字串

開啟 appsetting.json, 新增資料庫連線字串, 需要手動建立資料庫 HttpReports

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

4. 執行Web應用

到這一步,已經配置完成了, 直接執行Web應用,如果中間有報錯的話,可能是因為資料庫的連線問題,請檢查後再重試,如果沒有報錯的話,開啟資料庫 [HttpReports].[dbo].[RequestInfo], 如果能看到有資料記錄,就說明 HttpReports 中介軟體的部分配置完成了,資料有了,下邊開始配置 HttpReportsWeb 站點。

HttpReports.Web部分

github原始碼:https://github.com/SpringLeee/HttpReportsWeb

有需要的也可以下載原始碼後編譯,預設的git分支是Core 2.2 版本,還有一個 core 3.0的分支;

這裡提供 core2.2 和 3.0 的釋出版本下載:

Core 2.2 釋出版本:https://files.cnblogs.com/files/myshowtime/HttpReports2.2.zip

Core 3.0 釋出版本:https://files.cnblogs.com/files/myshowtime/HttpReports3.0.zip

這裡以 .Net Core2.2 版本為例, 下載釋出版本後,解壓檔案, 找到 appsettings.json檔案,並修改

{
"ConnectionStrings": {
"HttpReports": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;"
},
"HttpReportsConfig": {
"DBType": "SqlServer", // MySql Or SqlServer
"UserName": "admin",
"Password": "123456"
}
}
欄位 說明
HttpReports 資料庫連線字串,要和上邊配置的中介軟體的資料庫一致
DBType 資料庫型別 SqlServer MySql , 注意沒有空格
UserName Web站點後臺登入名,可修改
Password Web站點後臺登入密碼,可修改

修改資料庫型別和連線字串, 然後開啟命令列,啟動程式,或者部署到站點也可以

dotnet HttpReports.Web.dll

跳到登入頁,輸入預設賬號 admin 密碼 123456,登入到系統,看一下主要的幾個頁面

主頁面

主要是Web應用 請求次數, 請求時間, 請求錯誤,錯誤率TOP, 響應最快和響應最慢等, 按天,月,年進行趨勢分析, 服務節點 點選可以選中和取消,並且可以切換亮色和暗色主題

預警監控

HttpReports 監控預警主要針對以下幾點:

:smiley: 響應超時

:smiley: 請求錯誤

:smiley: IP異常

:smiley: 請求量監控

如何新增監控:

這裡演示新增一個監控,監控頻率 選1小時,也就是1個小時 執行一次,然後填入預警的收件郵箱,可填寫多個郵箱, 服務節點 可以選中單個和多個節點,預設的話,下邊 4個監控都是關閉狀態, 如果需要勾選啟動即可

響應超時監控配置

預防一段時間內介面大量超時,設定超時時間為4000ms , 超時率為0.05% (最多支援兩位小數,設定值要帶上%號)

請求錯誤監控配置

預防一段時間內介面大量錯誤,設定錯誤HTTP狀態碼為500,503, 超時率為20%

IP異常監控配置

預防機器人請求,防止一段時間大量重複IP請求,設定IP重複率為15%

請求量監控

預防短時間內介面新增大量的請求,造成系統異常,設定 單位時間 請求量為100000,當請求量達到這個值觸發預警

儲存任務,任務自動執行,監控頻率可以逐漸修改,找到適合系統的預警值, 如果資料達到預警值時,您就會收到HttpReports 傳送給您的預警通知郵件

專案環境基本要求

使用HttpReports中介軟體的.Net Core 版本 2.2, 3.0, 3.1;

HttpReports.Web 的core版本為 2.2 , 3.0

效能事項

HttpReports 中介軟體儲存資料是非同步操作,所以對api介面請求的時間可以忽略, 儲存資料是也只是儲存基本資訊,對請求內容和響應內容不作記錄,後臺監控任務採用Quartz.Net實現

下面是用PostMan做的一個簡單測試:

WebAPI內的方法:

public string Sql1()
{
SqlConnection con = new SqlConnection(
"Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HyBasicData;");

var list1 = con.Query(" select * from [HyBasicData].[dbo].[Customers] ");

var list2 = con.Query(" select * from [HyBasicData].[dbo].[Customers] ");

var list3 = con.Query(" select * from [HyBasicData].[dbo].[Customers] ");

return list1.Count().ToString();
}

PostMan分別對新增中介軟體和不新增中介軟體的 API請求 1000次,每300ms請求一次

說明 請求次數 平均響應時間 ms
原生API 1000 32.535
使用中介軟體 1000 32.899

總結

HttpReports 後臺使用簡單三層,前端使用BootStrap,如果你想給你的程式,快速的新增一套分析,圖表,監控系統 ,那麼使用HttpReports 是一個不錯的選擇,如果能幫助到您的話,還請希望給個Star, 感謝 :laughing:

https://github.com/SpringLeee/HttpReports

MIT

交流反饋

如果您在專案中使用了HttpReports,歡迎新增QQ群, 有想法 有建議,有bug 都歡迎大家來溝通, 也可以新增我的微信,希望可以幫助到您

https://mp.weixin.qq.com/s/GFoE0nL0zhBpmeGhuM5LEg