開源APM系統 HttpReports 在 .Net Core的應用

前言

簡單說明下,APM全稱Application Performance Management應用性能管理,經過各類收集請求數據,同時搭配Dashboard以實現對應用程序性能管理和故障管理的系統化解決方案。css

HttpReports 介紹

HttpReports 是針對.Net Core 開發的輕量級APM系統,基於MIT開源協議, 使用HttpReports能夠快速搭建.Net Core環境下統計,分析,圖表,監控一體化的站點,而且支持多種數據庫存儲,適應.Net Core WebAPI,MVC,Web項目, 經過引用Nuget構建Dashboard面板,很是適合中小項目使用。git

Github地址:https://github.com/SpringLeee/HttpReports 感興趣的同窗歡迎 Github Star 一波...github

在線預覽: https://moa.hengyinfs.comweb

帳號: admin 密碼 123456數據庫

主要功能

  • 接口調用指標分析
  • 多服務節點數據聚合分析
  • 慢請求,錯誤請求分析
  • 接口調用日誌查詢
  • 趨勢數據分析 (維度:小時,天,月)
  • 多類型預警監控
  • HTTP調用分析
  • 多數據庫支持,集成方便

數據庫支持

數據庫 Nuget包名稱
SqlServer HttpReports.SqlServer
MySql HttpReports.MySQL
Oracle HttpReports.Oracle
PostgreSQL HttpReports.PostgreSQL
ElasticSearch HttpReports.ElasticSearch

Dashboard-UI


快速開始 😆

Step1: 初始化數據庫

HttpReports 須要手動建立數據庫, 我這裏使用 SqlServer 數據庫爲例,建立數據庫 HttpReports, 固然數據庫名稱能夠自由定義.json

Step2: 集成到WebAPI應用

打開VS開發工具,新建一個 WebAPI 應用,這裏 .Net Core 版本只要是2.0 以上便可,我這裏用的是3.1版本,建立完成後,Nuget 包引用 HttpReportsapi

引用成功後,由於我使用的是SqlServer 數據庫,咱們再Nuget引用 HttpReports.SqlServer包緩存

找到程序的 appsetting.json,修改成如下配置, 注意:這裏Storage 配置的數據庫名稱要和新建的數據庫名稱一致,微信

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

而後咱們再修改 StartUp.cs 文件,修改成如下代碼app

public void ConfigureServices(IServiceCollection services)
{
    //添加HttpReports
    services.AddHttpReports().UseSQLServerStorage();

    services.AddControllers();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //使用HttpReports
    app.UseHttpReports();

    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseAuthorization();

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

一切準備就緒後,咱們啓動 WebAPi,而且刷新幾回頁面,到這裏爲止,WebAPI的部分咱們已經完成了 😛

Step3: 集成可視化 Dashboard

新建一個 .Net Core MVC 應用,新建完成後,經過Nuget包咱們分別安裝 HttpReports.Dashboard ,HttpReports.SqlServer

引用完成後,修改MVC 項目的 appsetting.json 文件, 注意數據庫要一致

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

修改完成後,咱們接着修改 MVC 項目的 Startup.cs 文件

public void ConfigureServices(IServiceCollection services)
 {
    // 添加Daashboard
      services.AddHttpReportsDashborad().UseSQLServerStorage();

      services.AddControllersWithViews();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 使用Dashboard
    app.UseHttpReportsDashboard();

    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    else
    {
    app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

一切準備就緒後,咱們啓動MVC 項目,若是沒有問題的話,會跳轉到Dashboard的登錄頁面,默認帳號:admin 密碼: 123456

例子中我用的是SqlServer 數據庫,其餘的數據庫也是相似的,我只建立了一個WebAPI,固然HttpRrports 也支持多個WebAPI,咱們只要修改appsetting.json 的 Node,你能夠設置一個 Node 爲 Auth,一個 Node 爲 Log 等等等,到這裏一個最簡單集成 HttpReports 的例子已經完成了, 請盡情使用吧 😆

ElasticSearch 存儲配置

ElasticSearch 會和其餘數據庫有些不一樣,若是採用的是ES存儲的話,修改程序 appsetting.json,採用下邊的配置便可

{
  "HttpReports": {
    "Storage": {
      "ConnectionString": "http://localhost:9200/",
      "UserName": "admin",
      "Password": "admin"
      
    } 
  }
}

數據異步批量延遲入庫

HttpReports 默認是同步入庫,有的用戶考慮到性能可能要用到 異步批量入庫,只須要修改 WebAPI 項目

{
  "HttpReports": {
    "Storage": { 
      "ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;", 
      "EnableDefer": true, //是否啓用延時寫入
      "DeferTime": "00:00:30", //延時寫入的時間,超過此時間將進行寫入
      "DeferThreshold": 5 //延時寫入的閾值,緩存超過此數目時進行寫入
    },
    "Node": "Pay" 
  }
}

css.js等資源文件過濾

HttpReports 再捕獲Http請求時,會過濾掉資源文件,若是你不想這樣作,添加或者修改appsetting.json, 設置
FilterStaticFiles = false 便可

Dashboard 使用根目錄

HttpReports.Dashboard 默認使用 MVC 項目的根目錄,好比: www.xxx.com, 若是你不想這樣作,添加或者修改appsetting.json,設置 UseHome = false , 這樣訪問 dashobard 的地址爲 www.xxx.com/Dashboard

Dashboard 預警監控

HttpReports.Dashboard 集成了預警監控功能,使用的話須要先配置 Smtp 郵箱,不然接收不到預警郵件哦

咱們修改Dashboard項目的appsetting.json爲下面便可

{
  "HttpReports": {
    "Storage": { 
      "ConnectionString": "DataBase=HttpReports;Data Source=localhost;User Id=root;Password=123456" 
    }, 
    "Mail": {
      "Server": "smtp.qq.com",
      "Port": 465, //smtp端口
      "Account": "",
      "Password": "",
      "EnableSsL": true //是否使用ssl
    }
  }
}

監控功能主要針對如下四項監控

  • 響應超時
  • 請求錯誤
  • IP異常
  • 請求量監控

簡單說明下,監控頻率 選1小時,也就是1個小時 運行一次,而後填入預警的收件郵箱,多個郵箱用逗號隔開, aaa.qq.com,bbb.qq.com , 服務節點 能夠選中單個和多個節點,默認的話,下邊 4個監控都是關閉狀態, 若是須要勾選啓動便可,具體的話這裏就很少說了.

最後,貼上兩個完整的配置文件供你們參考

WebAPI端

{
  "HttpReports": {
    "Storage": {
      "ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;",
      "EnableDefer": false, //是否啓用延時寫入
      "DeferTime": "00:00:30", //延時寫入的時間,超過此時間將進行寫入
      "DeferThreshold": 5 //延時寫入的閾值,緩存超過此數目時進行寫入
    },
    "Node": "Pay", // WebAPI 的服務名稱
    "FilterStaticFiles": true // 是否過濾掉css,js 等資源文件 
  }
}

Dashboard端

{
  "HttpReports": {
    "Storage": { 
      "ConnectionString": "Max Pool Size = 512;server=.;uid=sa;pwd=123456;database=HttpReports;",
      
    },
    "UseHome": true, // 默認使用根目錄導航
    "Mail": {
      "Server": "smtp.qq.com",
      "Port": 465, //smtp端口
      "Account": "",
      "Password": "",
      "EnableSsL": true //是否使用ssl
    }
  }
}

總結

HttpReports 是 .Net Core環境下開源的APM系統,很是適合微服務環境中使用,若是是中小型項目的話,那麼使用 HttpReports 是一個不錯的選擇,若是能幫助到您的話,還請但願給個Star 支持下, 感謝 😆

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

MIT協議

交流反饋

若是您在項目中使用了HttpReports,或者感興趣的能夠加入QQ羣,你們一塊兒溝通,有更新也會第一時間通知,也能夠添加個人微信,但願能夠幫助到您

相關文章
相關標籤/搜索