无需客户端轮询的实时.NET应用程序监控

时间:2015-10-21 17:46:57

标签: asp.net .net signalr monitoring polling

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

受监控的应用运行一些小型嵌入式客户端,将特定于应用程序的指标反馈给监控服务。客户端可以提供有关事件或计时器的数据,也可以在监视服务上为计时器本身提供数据。

有了这个,我们就拥有了一个统一的监控体系结构 - 运行的所有内容只是与监控服务通信以发送更新,而健康查看器客户端只是使用统一协议向服务请求数据。

它基本上是应用于监控的Application Server模式,并从SNMP的设计中获取了一些线索。

答案 1 :(得分:0)

SignalR非常新,没有意识到它有不同平台的多个客户端。我们将使用SignalR .NET客户端来访问所有应用程序 - 他们将直接调用主要的SignalR集线器调用服务器端方法,然后更新监控页面。