前言

在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要。实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间。

本文将介绍一个名为WatchDog的.NET开源实时应用监控系统,它可以帮助我们轻松实现对.NET应用的实时监控。

项目介绍

WatchDog是一个开源(MIT License)、免费的实时应用监控系统,专为ASP.NET Core Web应用程序和API设计。我们可以实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常。

一个高效的监控系统不仅能提高应用的可用性和可靠性,还能帮助我们更快地解决问题。WatchDog是一款专为.NET应用设计的开源实时应用监控系统,它提供了一系列强大的功能来帮助我们监控应用的状态和性能。

功能特点

  • 实时日志记录:能够实时记录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、下载源码

通过下载源码,可以进行学习和应用,具体操作如下图所示:

安装与配置

1、WatchDog 安装

搜索 WatchDog.NETNuGet包进行安装,具体如下图所示:

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登录

2、WatchDog 日志

3、请求日志

4、消息/事件

项目地址

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

总结

WatchDog 是一款强大且易于使用的.NET开源实时应用监控系统。通过使用WatchDog,我们可以轻松实现对.NET应用的实时监控,提高应用的稳定性和可靠性。希望这篇文章能够帮助你更好地理解和使用WatchDog。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

.NET 开源实时监控系统 - WatchDog的更多相关文章

  1. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  2. 透过CAT,来看分布式实时监控系统的设计与实现

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  3. 【转】点评cat高可用实时监控系统

    CAT总体介绍CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全 ...

  4. 一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起

    上帝之火 本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼.每次我都能联想到带来上帝之火的希腊之神,普罗米修斯.而这个开源的logo也是火,个人挺喜欢这个logo的设计. 本 ...

  5. 项目-基于视频压缩的实时监控系统--tiny6410

    项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...

  6. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  7. python3 主机实时监控系统

    主机实时监控系统(可在局域网访问) 一.思路: 前端: 1.管理员登录(编写一个管理员登录界面) 技术:html+css 2.资源数据显示(用于显示主机资源数据情况) 插件:echarts+jquer ...

  8. 基于邮件系统的远程实时监控系统的实现 Python版

    人生苦短,我用Python~ 界内的Python宣传标语,对Python而言,这是种标榜,实际上,Python确实是当下最好用的开发语言之一. 在相继学习了C++/C#/Java之后,接触Python ...

  9. 开源视频监控系统:iSpy

    iSpy是一个开源的视频监控软件,目前已经支持中文.自己用了一下,感觉还是很好用的.翻译了一下它的介绍. iSpy将PC变成一个完整的安全和监控系统 iSpy使用您的摄像头和麦克风来检测和记录声音或运 ...

  10. 大众点评实时监控系统CAT的那些坑

    首先,感谢大众点评开源监控系统CAT.CAT是一款非常使用的功能建全的监控系统.作为一个知名的开源软件,真的是太差了. 想把CAT用起来,没有多年的Java经验是不行的.先吐槽一下,再写一篇如何用的文 ...

随机推荐

  1. gerrit权限控制

    gerrit权限控制 背景 在公司中使用到了Gerrit作为技术管理,在配置的时候发现一些问题:转载了这篇文章作为学习. 正文开始 原文链接:https://blog.csdn.net/chenjh2 ...

  2. Mac下安装Redis,附可视化工具Medis

    导读 我之前写过很多相关的redis的博文,有时候,为了开发,还得去虚拟机上搭建一个redis,感觉太麻烦了,为了做个demo,直接在自己mac本上安装一个即可. Redis 从入门到精通:点我直达 ...

  3. Cannot add or update a child row: a foreign key constraint fails

    在使用Django添加用户时出现报错: 1 django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a fo ...

  4. SpringCloud连接远程nacos报错,一直提示连接本地的localhost:8848

    application.properties spring.cloud.nacos.discovery.server-addr=xxx.xxx.xxx.xxx:8848 spring.applicat ...

  5. springboot项目分层

    springboot项目分层 一般的项目模块中都有DAO.Entity.Service.Controller层. Entity层:实体层 数据库在项目中的类 Entity层是实体层,也就是所谓的mod ...

  6. Nuxt.js 错误侦探:useError 组合函数

    title: Nuxt.js 错误侦探:useError 组合函数 date: 2024/7/14 updated: 2024/7/14 author: cmdragon excerpt: 摘要:文章 ...

  7. windows安装PHP的redis

    一定要先看vc版本和位 配置php的redis扩展 以php7.3 nts版为例,不同的php版本对应不通的redis扩展:下载扩展文件:https://windows.php.net/downloa ...

  8. Python win11 安装lxml 失败

    如果你有一个项目执行了requirements后,一直提示lxml失败,解决步骤如下 1.尝试升级pip python.exe -m pip install --upgrade pip 2.尝试下载包 ...

  9. mybatis-plus的BaseMapper调用报错:Invalid bound statement

    1.yml的配置, 2.@mapper/@mapperScan 3.注意版本依赖冲突,本人第一次使用spring-boot-start-parent3.2.3与mybatis-plus-start-p ...

  10. 【Scala】05 对象特性Part2

    特质重复继承关系 父类特质 A 子类特质B 继承 A 子类特质C 继承A 类D 继承了 B 又实现了 C class D extends B with C 继承顺序是 D 继承 C 继承 B 继承 A ...