HttpReports 是 .Net Core 下的一個Web項目, 適用於WebAPI,Ocelot網關應用,MVC項目,很是適合針對微服務應用使用,經過中間件的形式集成到您的項目中,可讓開發人員快速的搭建出一個 數據統計,分析,圖表,監控 一體化的 Web站點。前端
主要包含HttpReports 中間件 和 HttpReports.Web 的MVC項目;git
HttpReports: https://github.com/SpringLeee/HttpReportsgithub
HttpReports.Web: https://github.com/SpringLeee/HttpReportsWebweb
在線預覽: http://175.102.11.117:8801 帳號 admin 密碼 123456數據庫
😂 單個WebAPI應用
😆 多個獨立WebAPI應用
😊 Ocelot 網關應用
😛 單個MVC項目
😃 多個MVC項目json
Nuget 包安裝 HttpReports, 打開Startup.cs, 修改 ConfigureServices(IServiceCollection services) 方法,添加如下代碼,放在 services.AddMvc() 以前均可以。api
選擇您的應用類型:微信
😆 單個WebAPI應用 或者 使用Ocelot網關的應用mvc
修改 ConfigureServices 方法 ,app
public void ConfigureServices(IServiceCollection services) { // 添加HttpReports中間件 services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
😆 ** 多個獨立的WebAPI應用 **
假設有一個 受權(Auth)API應用,和一個支付(Pay)API應用,而且沒有使用網關,須要分別在兩個項目的Startup.cs文件的 ConfigureServices 方法中分別添加如下代碼:
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Auth");
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer,"Pay");
😆 單個MVC應用
public void ConfigureServices(IServiceCollection services) { // 添加HttpReports中間件 services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
😆 多個MVC應用
假設有一個 電商(Mall)應用,和一個支付(Pay)應用,須要分別在兩個項目的Startup.cs文件的 ConfigureServices 方法中分別添加如下代碼:
services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Mall");
services.AddHttpReportsMiddlewire(WebType.MVC, DBType.SqlServer,"Pay");
😆 切換數據庫
使用MySql數據庫
services.AddHttpReportsMiddlewire(WebType.API, DBType.MySql);
使用SqlServer數據庫
services.AddHttpReportsMiddlewire(WebType.API, DBType.SqlServer);
修改 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() 方法和其餘中間件的前邊,不然不生效。
打開 appsetting.json, 添加數據庫鏈接字符串, 須要手動建立數據庫 HttpReports
"ConnectionStrings": { "HttpReports": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;" }
到這一步,已經配置完成了, 直接運行Web應用,若是中間有報錯的話,多是由於數據庫的鏈接問題,請檢查後再重試,若是沒有報錯的話,打開數據庫 [HttpReports].[dbo].[RequestInfo], 若是能看到有數據記錄,就說明 HttpReports 中間件的部分配置完成了,數據有了,下邊開始配置 HttpReportsWeb 站點。
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 監控預警主要針對如下幾點:
😃 響應超時
😃 請求錯誤
😃 IP異常
😃 請求量監控
如何添加監控:
這裏演示添加一個監控,監控頻率 選1小時,也就是1個小時 運行一次,而後填入預警的收件郵箱,可填寫多個郵箱, 服務節點 能夠選中單個和多個節點,默認的話,下邊 4個監控都是關閉狀態, 若是須要勾選啓動便可
預防一段時間內接口大量超時,設置超時時間爲4000ms , 超時率爲0.05% (最多支持兩位小數,設置值要帶上%號)
預防一段時間內接口大量錯誤,設置錯誤HTTP狀態碼爲500,503, 超時率爲20%
預防機器人請求,防止一段時間大量重複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, 感謝 😆
https://github.com/SpringLeee/HttpReports
若是您在項目中使用了HttpReports,歡迎添加QQ羣, 有想法 有建議,有bug 都歡迎你們來溝通, 也能夠添加個人微信,但願能夠幫助到您