实时.net应用监控,无需客户端轮询



我们正在为。net应用程序(ASP. net)构建一个基于web的实时监控系统。. NET和Windows可执行文件)。这些应用程序可以启动长时间运行的操作,并在Web页面上实时显示统计信息。

ASP。我们发现SignalR是一个完美的解决方案:长时间运行的操作(即使是由简单的WebForms表单回发引起的)通过SignalR RPC定期调用JS客户端函数来更新监控页面。但是我们遇到了两个警告:

  1. 在ASP。我们需要监控位于几个不同虚拟目录中的几个不同的应用程序。我们如何将来自这些不同应用程序的数据推送到一个HTML监控页面?

  2. 另一个应用程序是一个。net Windows控制台可执行文件,定期按计划运行。如何将其运行时统计信息推送到同一个监视HTML页面?我想到了一件事——让EXE在DB中存储临时统计数据,并让客户端从DB中提取相同的数据,但我们希望避免轮询。另一个-定期在给定的间隔内,EXE将调用WebApp,传递数据- WebApp将通过相同的SignalR调用将其传递给客户端。但是有更好的方法吗?

我使用的一个架构是一个小型的监控收集服务,在每个被监控的应用程序中嵌入监控客户端,Asp.net、Windows桌面应用程序、控制台应用程序、Windows服务或其他。

收集服务始终在运行。然后,web应用直接连接到该服务,并请求所有被监控应用的状态。

被监控的应用运行一些小的嵌入式客户端,该客户端向监控服务反馈特定于应用程序的指标。客户端可以提供事件或计时器上的数据,也可以在计时器本身上请求监视服务。

有了这个,我们就有了一个统一的监控体系结构——所有运行的东西都只与监控服务对话以发送更新,而健康查看器客户端只使用统一的协议向服务请求数据。

它基本上是应用于监视的Application Server模式,并从SNMP的设计中获得了一些提示。

SignalR非常新,没有意识到它有多个不同平台的客户端。我们将为所有应用程序使用SignalR . net客户端——它们都将直接调用服务器端方法与SignalR主中心通信,从而更新监控页面。

相关内容

  • 没有找到相关文章

最新更新