.NET 开源实时监控系统 - WatchDog
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">前言</span></span></h2><p data-tool="mdnice编辑器">在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要。实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间。</p>
<p data-tool="mdnice编辑器">本文将介绍一个名为WatchDog的.NET开源实时应用监控系统,它可以帮助我们轻松实现对.NET应用的实时监控。</p>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">项目介绍</span></span></h2>
<p data-tool="mdnice编辑器">WatchDog是一个开源(MIT License)、免费的实时应用监控系统,专为ASP.NET Core Web应用程序和API设计。我们可以实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常。</p>
<p data-tool="mdnice编辑器">一个高效的监控系统不仅能提高应用的可用性和可靠性,还能帮助我们更快地解决问题。WatchDog是一款专为.NET应用设计的开源实时应用监控系统,它提供了一系列强大的功能来帮助我们监控应用的状态和性能。</p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000428512-1388516627.png" width="700" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">功能特点</span></span></h2>
<ul>
<li data-tool="mdnice编辑器"><strong>实时日志记录</strong>:能够实时记录HTTP请求、响应以及运行时捕获的异常。</li>
<li data-tool="mdnice编辑器"><strong>代码内日志记录</strong>:支持在代码中记录消息和事件。</li>
<li data-tool="mdnice编辑器"><strong>日志视图查看</strong>:提供易于使用的日志查看界面。</li>
<li data-tool="mdnice编辑器"><strong>日志搜索功能</strong>:支持对HTTP请求和异常日志进行搜索。</li>
<li data-tool="mdnice编辑器"><strong>HTTP日志筛选</strong>:可根据HTTP方法和状态码筛选HTTP日志。</li>
<li data-tool="mdnice编辑器"><strong>日志视图认证</strong>:提供日志视图的访问权限控制。</li>
<li data-tool="mdnice编辑器"><strong>自动日志清理</strong>:支持自动清除旧的日志记录。</li>
<li data-tool="mdnice编辑器"><strong>报警通知</strong>:支持通过邮件、短信等多种方式发送报警通知,确保能够及时得到反馈。</li>
<li data-tool="mdnice编辑器"><strong>灵活配置</strong>:可以根据应用需求进行灵活的配置,适应不同的监控需求。</li>
<li data-tool="mdnice编辑器"><strong>易于集成</strong>:通过简单的API调用即可集成到现有的.NET应用中。</li>
</ul>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">项目技术栈</span></span></h2>
<ul>
<li data-tool="mdnice编辑器"><strong>后端</strong>:基于.NET Core 或 .NET 5及以上版本。</li>
<li data-tool="mdnice编辑器"><strong>前端</strong>:使用 React 或 Angular等前端框架搭建的用户界面。</li>
<li data-tool="mdnice编辑器"><strong>数据库</strong>:支持MySQL、PostgreSQL等关系型数据库,以及MongoDB等NoSQL数据库。</li>
<li data-tool="mdnice编辑器"><strong>官方支持 .NET 8</strong>:新增对 .NET 8 的官方支持。</li>
<li data-tool="mdnice编辑器"><strong>.NET 8 中的 Output Cache 支持</strong>:增加了对 .NET 8 中使用 Output Cache 的支持。</li>
<li data-tool="mdnice编辑器"><strong>使用正则表达式黑名单</strong>:新增了使用正则表达式进行黑名单过滤的功能。</li>
</ul>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">工作原理</span></span></h2>
<p data-tool="mdnice编辑器">WatchDog 利用 SignalR 实现了实时监控,并使用LiteDb作为无需配置的类似MongoDB的服务器端数据库,同时也支持使用外部数据库(如MSSQL、MySQL、PostgreSQL、MongoDB)。</p>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">1、<strong>支持.NET版本</strong></span></span></h3>
<p data-tool="mdnice编辑器">.NET Core 3.1 及更高版本。</p>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">2、下载源码</span></span></h3>
<p data-tool="mdnice编辑器">通过下载源码,可以进行学习和应用,具体操作如下图所示:</p>
<p data-tool="mdnice编辑器"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000605183-1782123077.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2><span class="prefix"><span class="content">安装与配置</span></span></h2>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">1、WatchDog 安装</span></span></h3>
<p data-tool="mdnice编辑器">搜索 <code>WatchDog.NET</code>NuGet包进行安装,具体如下图所示:</p>
<p data-tool="mdnice编辑器"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000551803-1149807395.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></p>
<img alt="">
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">2、WatchDog 服务注册</span></span></h3>
<p data-tool="mdnice编辑器">在ASP.NET Core Web API 的<code>Program.cs</code>或 <code>Startup.cs</code>中注册 WatchDog 服务。</p>
<p data-tool="mdnice编辑器">从ILogger 记录日志到 WatchDog</p>
<p data-tool="mdnice编辑器">还可以将来自.NET的<code>ILogger</code>的日志记录到 WatchDog 中。</p>
<p data-tool="mdnice编辑器"><strong>适用于 .NET 6 及以上版本</strong></p>
<div class="cnblogs_code">
<pre>builder.Services.AddWatchDogServices(opt =><span style="color: rgba(0, 0, 0, 1)">
{
opt.IsAutoClear </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
opt.ClearTimeSchedule </span>=<span style="color: rgba(0, 0, 0, 1)"> WatchDogAutoClearScheduleEnum.Monthly;
opt.DbDriverOption </span>=<span style="color: rgba(0, 0, 0, 1)"> WatchDogDbDriverEnum.Mongo;
opt.SetExternalDbConnString </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodb://localhost:27017</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
});
builder.Logging.AddWatchDogLogger();</span></pre>
</div>
<p><strong>对于 .NET Core 3.1</strong></p>
<p data-tool="mdnice编辑器">在 <code>Program.cs</code> 类的 <code>CreateHostBuilder</code> 方法中配置日志记录,并添加 <code>.AddWatchDogLogger()</code>。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">Host.CreateDefaultBuilder(args)
.ConfigureLogging( logging </span>=><span style="color: rgba(0, 0, 0, 1)">
{
logging.AddWatchDogLogger();
})
.ConfigureWebHostDefaults(webBuilder </span>=><span style="color: rgba(0, 0, 0, 1)">
{
webBuilder.UseStartup</span><Startup><span style="color: rgba(0, 0, 0, 1)">();
});</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">3、添加异常记录器</span></span></h3>
<p data-tool="mdnice编辑器">在主要的WatchDog中间件之前添加异常日志记录器,最好将其放置在中间件的最上面,以便捕捉可能的早期异常。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">app.UseWatchDogExceptionLogger();
...
app.UseWatchDog(opt </span>=><span style="color: rgba(0, 0, 0, 1)">
{
opt.WatchPageUsername </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
opt.WatchPagePassword </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Qwerty@123</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
...
});</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">4、设置自动清除日志(可选)</span></span></h3>
<p data-tool="mdnice编辑器">该功能可在特定时间后自动清除日志。</p>
<p data-tool="mdnice编辑器"><strong>注意</strong>:当<code>IsAutoClear</code>设置为<code>true</code>时,默认的清除计划时间为每周。</p>
<p data-tool="mdnice编辑器">如需覆盖默认设置,请按照以下方式进行配置:</p>
<div class="cnblogs_code">
<pre>services.AddWatchDogServices(opt =><span style="color: rgba(0, 0, 0, 1)">
{
opt.IsAutoClear </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
opt.ClearTimeSchedule </span>=<span style="color: rgba(0, 0, 0, 1)"> WatchDogAutoClearScheduleEnum.Monthly;
});</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">5、设置日志记录到外部数据库(可选)</span></span></h3>
<p data-tool="mdnice编辑器">将日志记录到数据库,如SQL Server (MSSQL)、MySQL、PostgreSQL 或 MongoDB,可以根据需求配置。</p>
<ul data-tool="mdnice编辑器">
<li><strong>添加数据库连接字符串</strong>:提供数据库的连接字符串。</li>
<li><strong>选择数据库驱动选项</strong>:根据所使用的数据库类型选择合适的驱动程序。</li>
</ul>
<div class="cnblogs_code">
<pre>services.AddWatchDogServices(opt =><span style="color: rgba(0, 0, 0, 1)">
{
opt.IsAutoClear </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
opt.SetExternalDbConnString </span>= "<span style="color: rgba(0, 0, 0, 1)">Server=localhost;Database=testDb;
User Id=postgres;Password=root;</span>"<span style="color: rgba(0, 0, 0, 1)">;
opt.DbDriverOption </span>=<span style="color: rgba(0, 0, 0, 1)"> WatchDogDbDriverEnum.PostgreSql;
});</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">6、设置访问日志的账号密码</span></span></h3>
<div class="cnblogs_code">
<pre>app.UseWatchDog(opt =><span style="color: rgba(0, 0, 0, 1)">
{
opt.WatchPageUsername </span>= "admin"<span style="color: rgba(0, 0, 0, 1)">;
opt.WatchPagePassword </span>= "Qwerty@123"<span style="color: rgba(0, 0, 0, 1)">;
});</span></pre>
</div>
<p data-tool="mdnice编辑器">注意:如果你的项目使用权限验证,那么 <code>app.UseWatchDog();</code> 应该在 <code>app.UseRouting()</code>, <code>app.UseAuthentication()</code>, 和 <code>app.UseAuthorization()</code> 之后按顺序添加。</p>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">7、配置说明和示例</span></span></h3>
<ul data-tool="mdnice编辑器">
<li><strong>黑名单</strong>:要忽略的路由、路径或端点列表(应为逗号分隔的字符串,如下所示)。</li>
<li><strong>序列化器</strong>:如果不使用默认的全局 JSON 序列化器/转换器,请指定类型。</li>
<li><strong>CORS策略</strong>:如果项目使用了跨源资源共享(CORS),请指定策略名称。</li>
<li><strong>使用Output缓存</strong>:如果项目使用了ASP.NET Output缓存。功能仅适用于 .NET 8 及以上版本。</li>
<li><strong>使用正则表达式黑名单</strong>:启用使用正则表达式来黑名单化请求路由、路径或端点。</li>
</ul>
<p data-tool="mdnice编辑器">示例配置</p>
<div class="cnblogs_code">
<pre>app.UseWatchDog(opt =><span style="color: rgba(0, 0, 0, 1)">
{
opt.WatchPageUsername </span>= "admin"<span style="color: rgba(0, 0, 0, 1)">;
opt.WatchPagePassword </span>= "Qwerty@123"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Optional</span>
opt.Blacklist = "Test/testPost, api/auth/login"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Prevent logging for specified endpoints</span>
opt.Serializer =<span style="color: rgba(0, 0, 0, 1)"> WatchDogSerializerEnum.Newtonsoft;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">If your project use a global json converter</span>
opt.CorsPolicy = "MyCorsPolicy"<span style="color: rgba(0, 0, 0, 1)">;
opt.UseOutputCache </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
opt.UseRegexForBlacklisting </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
});</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">8、记录消息/事件</span></span></h3>
<div class="cnblogs_code">
<pre>WatchLogger.Log(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">...Test Log...</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
WatchLogger.LogWarning(JsonConvert.Serialize(model));
WatchLogger.LogError(res.Content, eventId: reference);</span></pre>
</div>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">9、查看日志和异常</span></span></h3>
<p data-tool="mdnice编辑器">启动服务器并访问 <code>/watchdog</code> 来查看日志。</p>
<p data-tool="mdnice编辑器"><strong>示例</strong>:</p>
<div class="cnblogs_code">
<pre>https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">myserver.com/watchdog</span><span style="color: rgba(0, 0, 0, 1)">
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:/watchdog</span></pre>
</div>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">项目效果</span></span></h2>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">1、WatchDog登录</span></span></h3>
<p><span class="prefix"><span class="content"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000616044-620086039.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></span></span></p>
<img alt="">
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">2、WatchDog 日志</span></span></h3>
<p><span class="prefix"><span class="content"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000610819-290977633.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></span></span></p>
<img alt="">
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">3、请求日志</span></span></h3>
<p><span class="prefix"><span class="content"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000622483-922049654.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></span></span></p>
<img alt="">
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">4、消息/事件</span></span></h3>
<p><span class="prefix"><span class="content"><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240826000632068-514733386.png" width="700" style="display: block; margin-left: auto; margin-right: auto"></span></span></p>
<img alt="">
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">项目地址</span></span></h2>
<p data-tool="mdnice编辑器">Github:<span style="text-decoration: underline">https://github.com/IzyPro/WatchDog</span></p>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">总结</span></span></h2>
<p data-tool="mdnice编辑器">WatchDog 是一款强大且易于使用的.NET开源实时应用监控系统。通过使用WatchDog,我们可以轻松实现对.NET应用的实时监控,提高应用的稳定性和可靠性。希望这篇文章能够帮助你更好地理解和使用WatchDog。</p>
<h2 class="md-end-block md-p"><span class="md-plain md-expand">最后</span></h2>
<p>如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。</p>
<p>也可以加入微信公众号<strong></strong> 社区,与其他热爱技术的同行一起交流心得,共同成长!</p>
<p><img src="https://img2024.cnblogs.com/blog/576536/202408/576536-20240814113403514-910171896.png" alt="" style="display: block; margin-left: auto; margin-right: auto"></p><br><br>
来源:https://www.cnblogs.com/1312mn/p/18379779
頁:
[1]