ASP.NET 中的带宽监控

4
你好,我们正在使用Asp.Net开发一个多租户应用程序,每个租户都有自己的数据库。其中一个要求是监控每个租户的带宽使用情况。
我已经尝试搜索,但没有找到太多关于这个主题的帮助。我们想要准确地监控每个租户使用了多少带宽,而每个租户可以拥有自己的顶级域名、子域名或两者的组合。
那么有哪些可用的选择呢?我能想到的可能有以下几种:
  1. 使用IIS日志监控,即一个单独的应用程序来计算每个租户的带宽。
  2. 从应用程序内部记录每个租户的每个请求和响应,并根据此计算总带宽使用量。
  3. 使用某些第三方组件(如果有)。
那么你认为哪种方法最好?还有其他方法吗?
3个回答

6

好的,这里有一个想法(我没有测试过,留给您测试)

global.asax 中使用以下其中一个函数(找到一个具有有效最终大小的函数)

Application_PostRequestHandlerExecute
Application_ReleaseRequestState

并且获取您发送的大小。

Response.Filter.Length

不需要提到,您可以使用以下方式获取调用的文件名:
HttpContext.Current.Request.Path

这个函数会在每个请求时被调用,因此您可以获得您的大小并完成其余部分。

需要注意的是,您需要先测试这个想法以查看它是否有效,并可能加以改进,并且要记住,如果您在服务器上压缩页面,则长度不正确,可能需要在Global.asax上进行压缩以获取实际长度。

希望这有所帮助。


在我的示例应用程序中,我只有一个包含图像控件的网页。在按照您提供的事件设置断点时,它没有显示长度,而是显示异常“System.NotSupportedException”。 - Pankaj
@PankajGarg 也许你没有设置过滤器。 - Aristos
你想在这个问题的背景下提供一些关于这个问题的具体细节、链接或建议吗? - Pankaj
@PankajGarg 或许需要一个过滤器,就像https://dev59.com/Um035IYBdhLWcg3wC7gR#5656435,也许你在错误的时刻调用它,此时长度还没有确定。对于源代码,它会获取它。! - Aristos

0

根据主机分段流量在我的经验中很困难。相反,如果为每个租户提供他们自己的IP地址来运行应用程序,您应该能够找到可以基于IP地址监视带宽的程序。

补充:您的IIS结构是否是一个网站来管理所有租户,在登录时系统会分叉到正确的数据库?如果是这样,这可能会在版本控制方面创建问题,因为所有租户的网站都必须具有完全相同的架构,并且在更新应用程序以需要模式更改时,所有网站都需要同时更新。

另一种结构,听起来像您可能拥有的结构,是每个租户都有自己的网站,如下所示:

tenant1_site/appvirtualdir
tenant2_site/appvirtualdir
...

appvirtualdir指向所有租户站点的相同物理路径。当所有客户端使用相同的应用程序版本时,它们都使用完全相同的代码。如果您有这种情况和某种身份验证,则无论如何每个租户都需要一个IP,因为SSL只会绑定到IP和端口,而非SSL则会绑定到IP、端口和主机。如果是这种情况,那么基于IP的流量监视仍将更简单、更准确,因为可以在路由器或通过网络监视器上完成。


实际上,为每个租户分配单独的IP地址并不是可行的解决方案,因为需要太多的IP地址,并且由于该模型是单个应用程序多个数据库,所以我认为这不是一个可行的解决方案。 - asifch
我正在使用并构建这样的系统。无论您使用单个数据库还是多个数据库,真正重要的是网站的流量。通过您的托管提供商获得C块或更多块不应该成为问题。但是,如果您在Web服务器上只有一个网站,并且租户通过文件夹进行分段,则完全不同。在这种情况下,您必须解析IIS日志。 - Thomas

0

既然IIS日志已经包括了请求大小和响应大小,开发一个小工具来解析并计算每天/每周/每月的总量似乎并不太麻烦。


你知道这是否包括流数据?WCF 和自适应流吗? - makerofthings7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接