如何使用 HttpReports 監控 .NET Core 應用程序

簡介

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

引用 HttpReports.Dashboard

首先,咱們須要構建 Dashboard 來接收,處理和展現數據,Dashboard 使用了 Vue + Antv + ElementUI 構建了頁面,而後把靜態文件打包到了程序集,咱們只要在.NET Core 應用中,經過Nuget安裝便可。app

新建一個 .Net Core 的空的Web項目,支持 2.1 及以上版本ui

新建完成後,經過Nuget包分別安裝 HttpReports.DashboardHttpReports.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,它負責採集和發送數據。

引用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 是羅馬神話最古老的女神之一,可以帶來幸福和機遇,寓意也很簡單,保護咱們的程序,讓它變的更好。

相關文章
相關標籤/搜索