.NET 開源實時監控系統 - WatchDog

小码编匠發表於2024-08-27

前言

在平時的開發中隨著我們系統應用不斷地迭代變的複雜,對應用的實時監控變得越來越重要。實時監控不僅可以幫助我們快速定位問題,還能在出現問題時及時採取措施,減少業務中斷的時間。

本文將介紹一個名為WatchDog的.NET開源實時應用監控系統,它可以幫助我們輕鬆實現對.NET應用的實時監控。

專案介紹

WatchDog是一個開源(MIT License)、免費的實時應用監控系統,專為ASP.NET Core Web應用程式和API設計。我們可以實時記錄和檢視應用程式中的訊息、事件、HTTP請求和響應,以及執行時捕獲的異常。

一個高效的監控系統不僅能提高應用的可用性和可靠性,還能幫助我們更快地解決問題。WatchDog是一款專為.NET應用設計的開源實時應用監控系統,它提供了一系列強大的功能來幫助我們監控應用的狀態和效能。

.NET 開源實時監控系統 - WatchDog

功能特點

  • 實時日誌記錄:能夠實時記錄HTTP請求、響應以及執行時捕獲的異常。
  • 程式碼內日誌記錄:支援在程式碼中記錄訊息和事件。
  • 日誌檢視檢視:提供易於使用的日誌檢視介面。
  • 日誌搜尋功能:支援對HTTP請求和異常日誌進行搜尋。
  • HTTP日誌篩選:可根據HTTP方法和狀態碼篩選HTTP日誌。
  • 日誌檢視認證:提供日誌檢視的訪問許可權控制。
  • 自動日誌清理:支援自動清除舊的日誌記錄。
  • 報警通知:支援透過郵件、簡訊等多種方式傳送報警通知,確保能夠及時得到反饋。
  • 靈活配置:可以根據應用需求進行靈活的配置,適應不同的監控需求。
  • 易於整合:透過簡單的API呼叫即可整合到現有的.NET應用中。

專案技術棧

  • 後端:基於.NET Core 或 .NET 5及以上版本。
  • 前端:使用 React 或 Angular等前端框架搭建的使用者介面。
  • 資料庫:支援MySQL、PostgreSQL等關係型資料庫,以及MongoDB等NoSQL資料庫。
  • 官方支援 .NET 8:新增對 .NET 8 的官方支援。
  • .NET 8 中的 Output Cache 支援:增加了對 .NET 8 中使用 Output Cache 的支援。
  • 使用正規表示式黑名單:新增了使用正規表示式進行黑名單過濾的功能。

工作原理

WatchDog 利用 SignalR 實現了實時監控,並使用LiteDb作為無需配置的類似MongoDB的伺服器端資料庫,同時也支援使用外部資料庫(如MSSQL、MySQL、PostgreSQL、MongoDB)。

1、支援.NET版本

.NET Core 3.1 及更高版本。

2、下載原始碼

透過下載原始碼,可以進行學習和應用,具體操作如下圖所示:

.NET 開源實時監控系統 - WatchDog

安裝與配置

1、WatchDog 安裝

搜尋 WatchDog.NETNuGet包進行安裝,具體如下圖所示:

.NET 開源實時監控系統 - WatchDog

2、WatchDog 服務註冊

在ASP.NET Core Web API 的Program.csStartup.cs中註冊 WatchDog 服務。

從ILogger 記錄日誌到 WatchDog

還可以將來自.NET的ILogger的日誌記錄到 WatchDog 中。

適用於 .NET 6 及以上版本

builder.Services.AddWatchDogServices(opt =>  
{  
    opt.IsAutoClear = true;  
    opt.ClearTimeSchedule = WatchDogAutoClearScheduleEnum.Monthly;  
    opt.DbDriverOption = WatchDogDbDriverEnum.Mongo;  
    opt.SetExternalDbConnString = "mongodb://localhost:27017";  
});  
builder.Logging.AddWatchDogLogger();  

對於 .NET Core 3.1

Program.cs 類的 CreateHostBuilder 方法中配置日誌記錄,並新增 .AddWatchDogLogger()

Host.CreateDefaultBuilder(args)
 .ConfigureLogging( logging =>
 {
     logging.AddWatchDogLogger();
 })
 .ConfigureWebHostDefaults(webBuilder =>
 {
     webBuilder.UseStartup<Startup>();
 });

3、新增異常記錄器

在主要的WatchDog中介軟體之前新增異常日誌記錄器,最好將其放置在中介軟體的最上面,以便捕捉可能的早期異常。

app.UseWatchDogExceptionLogger();

...

app.UseWatchDog(opt => 
{ 
   opt.WatchPageUsername = "admin"; 
   opt.WatchPagePassword = "Qwerty@123"; 
   ...
 });

4、設定自動清除日誌(可選)

該功能可在特定時間後自動清除日誌。

注意:當IsAutoClear設定為true時,預設的清除計劃時間為每週。

如需覆蓋預設設定,請按照以下方式進行配置:

services.AddWatchDogServices(opt => 
{ 
   opt.IsAutoClear = true;
   opt.ClearTimeSchedule = WatchDogAutoClearScheduleEnum.Monthly;
});

5、設定日誌記錄到外部資料庫(可選)

將日誌記錄到資料庫,如SQL Server (MSSQL)、MySQL、PostgreSQL 或 MongoDB,可以根據需求配置。

  • 新增資料庫連線字串:提供資料庫的連線字串。
  • 選擇資料庫驅動選項:根據所使用的資料庫型別選擇合適的驅動程式。
services.AddWatchDogServices(opt => 
{
   opt.IsAutoClear = true; 
   opt.SetExternalDbConnString = "Server=localhost;Database=testDb;
   User Id=postgres;Password=root;"; 
   opt.DbDriverOption = WatchDogDbDriverEnum.PostgreSql; 
});

6、設定訪問日誌的賬號密碼

app.UseWatchDog(opt => 
{ 
   opt.WatchPageUsername = "admin"; 
   opt.WatchPagePassword = "Qwerty@123"; 
 });

注意:如果你的專案使用許可權驗證,那麼 app.UseWatchDog(); 應該在 app.UseRouting(), app.UseAuthentication(), 和 app.UseAuthorization() 之後按順序新增。

7、配置說明和示例

  • 黑名單:要忽略的路由、路徑或端點列表(應為逗號分隔的字串,如下所示)。
  • 序列化器:如果不使用預設的全域性 JSON 序列化器/轉換器,請指定型別。
  • CORS策略:如果專案使用了跨源資源共享(CORS),請指定策略名稱。
  • 使用Output快取:如果專案使用了ASP.NET Output快取。功能僅適用於 .NET 8 及以上版本。
  • 使用正規表示式黑名單:啟用使用正規表示式來黑名單化請求路由、路徑或端點。

示例配置

app.UseWatchDog(opt => 
{ 
   opt.WatchPageUsername = "admin"; 
   opt.WatchPagePassword = "Qwerty@123"; 
   //Optional
   opt.Blacklist = "Test/testPost, api/auth/login"; 
   //Prevent logging for specified endpoints
   opt.Serializer = WatchDogSerializerEnum.Newtonsoft; 
   //If your project use a global json converter
   opt.CorsPolicy = "MyCorsPolicy";
   opt.UseOutputCache = true;
   opt.UseRegexForBlacklisting = true;
 });

8、記錄訊息/事件

WatchLogger.Log("...Test Log...");
WatchLogger.LogWarning(JsonConvert.Serialize(model));
WatchLogger.LogError(res.Content, eventId: reference);

9、檢視日誌和異常

啟動伺服器並訪問 /watchdog 來檢視日誌。

示例

https://myserver.com/watchdog
https://localhost:[your-port]/watchdog

專案效果

1、WatchDog登入

.NET 開源實時監控系統 - WatchDog

2、WatchDog 日誌

.NET 開源實時監控系統 - WatchDog

3、請求日誌

.NET 開源實時監控系統 - WatchDog

4、訊息/事件

.NET 開源實時監控系統 - WatchDog

專案地址

Github:https://github.com/IzyPro/WatchDog

總結

WatchDog 是一款強大且易於使用的.NET開源實時應用監控系統。透過使用WatchDog,我們可以輕鬆實現對.NET應用的實時監控,提高應用的穩定性和可靠性。希望這篇文章能夠幫助你更好地理解和使用WatchDog。

最後

如果你覺得這篇文章對你有幫助,不妨點個贊支援一下!你的支援是我繼續分享知識的動力。如果有任何疑問或需要進一步的幫助,歡迎隨時留言。

也可以加入微信公眾號[DotNet技術匠] 社群,與其他熱愛技術的同行一起交流心得,共同成長!

相關文章