为单租户服务组织应用程序见解/运行状况检查

时间:2019-01-02 09:00:58

标签: asp.net-core-webapi azure-application-insights

我正在管理一种产品,我们在其中为每个客户设置一个完整的环境。 该产品由一个Angular前端,一个ASP.Net.Core API后端和一个SQL Server数据库组成。

最终的架构就是我们拥有

https://customer1.product.comhttps://customer1.product.com/api

https://customer2.product.comhttps://customer1.product.com/api

等...每个客户的站点,但是多个客户站点共享同一台IIS服务器。

我一直在研究至少为API启用Application Insight,并启用运行状况检查。

我让这两种方法都在概念验证中起作用-这里的问题是我如何才能最好地在Application Insights中组织一长串站点。

我希望获得对服务器的全面了解,并汇总各个API的请求总数,等等。

这使我获得了一个共享的Insight资源,并且所有API都共享相同的工具密钥。

尽管如此,对于运行状况检查,我只能对一个资源添加100个ping测试。我正在考虑建立一个独立的服务,该服务使用站点列表可以使用新的.Net core 2.2。运行状况检查并从外部服务器ping每个站点-然后在.Net Core运行状况检查中将此设置为对Insight资源的ping测试。 (以此为灵感:https://www.hanselman.com/blog/HowToSetUpASPNETCore22HealthChecksWithBeatPulsesAspNetCoreDiagnosticsHealthChecks.aspx)。但是,那时我将无法从Insights区域测试中受益-因为所有请求都将来自我的Health Check API。

但是我不确定是否以及如何进行设置,因此一旦单个站点出现故障,例如如果配置错误,则会通知我只有一个站点已关闭。

因此,我想就其他(如果有的话)如何实现这样的方案提供一些意见。

我想要

  • 对服务器级别的洞察,例如网站的请求,负载等。
    • 但是深入到单个站点也可以很好地为客户分配负载
  • 每个站点上执行两次ping测试,Angular index.html和连接到数据库的API调用。
  • 易于设置,因此当我们获得新客户时,监视部分将是自配置的或可编写脚本的。至少因此,我们不应该登录到Azure Insights门户。

我并不一定要寻找完整的实现细节,更多的架构指导原则是关于如何构建这样的设置的。

除Application Insights外,也欢迎对其他产品提出建议。刚刚将Insights视为非常适合Asp.Net.Core API。已经使用Sentry收集错误报告。

最好的问候 /安德斯

1 个答案:

答案 0 :(得分:1)

让我分享一切可能,希望它对解决方案有所帮助。

快速注释-如果需要,可以通过ARM编写所有脚本。包括Application Insights资源。无论您最后选择哪种解决方案都不必担心(尽管不同的解决方案可能需要更多的脚本编写)。

选项1。每个人都有自己的AI资源。所有遥测(服务器,客户端,可用性)都会报告给它。

这将为您提供良好的警报功能,深入体验。但是,很难将策划的体验用于跨客户查询。

话虽如此-实际上,有一种方法可以在Application Insights Analytics中跨Application Insights资源查询。很难使这样的查询高效(因为它们可能需要跨集群传递数据),因此您需要了解如何获得所需的信息。

选项2。为所有客户提供一种AI资源用于所有遥测。客户仅按工序名称区分。

易于进行客户查询。但是更难为特定客户进行调查。每个资源最多只能有100个网络测试

选项3。具有一个用于服务器/客户端遥测的AI资源。使用RoleName区分客户。有AI资源/客户以获取可用性。

这允许同时获取跨客户的摘要数据和范围为单个RoleName(客户)的数据。

可用性-允许配置每个客户所需的测试数量。每个客户都有单独的报告。分布式跟踪应该继续起作用(Application Insights可以跨资源工作)。

注意-仅当您的拓扑结构简单并且您不需要将RoleName用于其他内容时,此方法才起作用。

希望有帮助!