在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要。实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间。
本文将介绍一个名为WatchDog的.NET开源实时应用监控系统,它可以帮助我们轻松实现对.NET应用的实时监控。
WatchDog是一个开源(MIT License)、免费的实时应用监控系统,专为ASP.NET Core Web应用程序和API设计。我们可以实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常。
一个高效的监控系统不仅能提高应用的可用性和可靠性,还能帮助我们更快地解决问题。WatchDog是一款专为.NET应用设计的开源实时应用监控系统,它提供了一系列强大的功能来帮助我们监控应用的状态和性能。
WatchDog 利用 SignalR 实现了实时监控,并使用LiteDb作为无需配置的类似MongoDB的服务器端数据库,同时也支持使用外部数据库(如MSSQL、MySQL、PostgreSQL、MongoDB)。
.NET Core 3.1 及更高版本。
通过下载源码,可以进行学习和应用,具体操作如下图所示:
搜索 WatchDog.NET
NuGet包进行安装,具体如下图所示:
在ASP.NET Core Web API 的Program.cs
或 Startup.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>(); });
在主要的WatchDog中间件之前添加异常日志记录器,最好将其放置在中间件的最上面,以便捕捉可能的早期异常。
app.UseWatchDogExceptionLogger(); ... app.UseWatchDog(opt => { opt.WatchPageUsername = "admin"; opt.WatchPagePassword = "Qwerty@123"; ... });
该功能可在特定时间后自动清除日志。
注意:当IsAutoClear
设置为true
时,默认的清除计划时间为每周。
如需覆盖默认设置,请按照以下方式进行配置:
services.AddWatchDogServices(opt => { opt.IsAutoClear = true; opt.ClearTimeSchedule = WatchDogAutoClearScheduleEnum.Monthly; });
将日志记录到数据库,如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; });
app.UseWatchDog(opt => { opt.WatchPageUsername = "admin"; opt.WatchPagePassword = "Qwerty@123"; });
注意:如果你的项目使用权限验证,那么 app.UseWatchDog();
应该在 app.UseRouting()
, app.UseAuthentication()
, 和 app.UseAuthorization()
之后按顺序添加。
示例配置
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; });
WatchLogger.Log("...Test Log..."); WatchLogger.LogWarning(JsonConvert.Serialize(model)); WatchLogger.LogError(res.Content, eventId: reference);
启动服务器并访问 /watchdog
来查看日志。
示例:
https://myserver.com/watchdog https://localhost:[your-port]/watchdog
Github:https://github.com/IzyPro/WatchDog
WatchDog 是一款强大且易于使用的.NET开源实时应用监控系统。通过使用WatchDog,我们可以轻松实现对.NET应用的实时监控,提高应用的稳定性和可靠性。希望这篇文章能够帮助你更好地理解和使用WatchDog。
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!