我正在管理一种产品,我们在其中为每个客户设置一个完整的环境。 该产品由一个Angular前端,一个ASP.Net.Core API后端和一个SQL Server数据库组成。
最终的架构就是我们拥有
https://customer1.product.com和https://customer1.product.com/api
https://customer2.product.com和https://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。
但是我不确定是否以及如何进行设置,因此一旦单个站点出现故障,例如如果配置错误,则会通知我只有一个站点已关闭。
因此,我想就其他(如果有的话)如何实现这样的方案提供一些意见。
我想要
我并不一定要寻找完整的实现细节,更多的架构指导原则是关于如何构建这样的设置的。
除Application Insights外,也欢迎对其他产品提出建议。刚刚将Insights视为非常适合Asp.Net.Core API。已经使用Sentry收集错误报告。
最好的问候 /安德斯
答案 0 :(得分:1)
让我分享一切可能,希望它对解决方案有所帮助。
快速注释-如果需要,可以通过ARM编写所有脚本。包括Application Insights资源。无论您最后选择哪种解决方案都不必担心(尽管不同的解决方案可能需要更多的脚本编写)。
选项1。每个人都有自己的AI资源。所有遥测(服务器,客户端,可用性)都会报告给它。
这将为您提供良好的警报功能,深入体验。但是,很难将策划的体验用于跨客户查询。
话虽如此-实际上,有一种方法可以在Application Insights Analytics中跨Application Insights资源查询。很难使这样的查询高效(因为它们可能需要跨集群传递数据),因此您需要了解如何获得所需的信息。
选项2。为所有客户提供一种AI资源用于所有遥测。客户仅按工序名称区分。
易于进行客户查询。但是更难为特定客户进行调查。每个资源最多只能有100个网络测试
选项3。具有一个用于服务器/客户端遥测的AI资源。使用RoleName区分客户。有AI资源/客户以获取可用性。
这允许同时获取跨客户的摘要数据和范围为单个RoleName(客户)的数据。
可用性-允许配置每个客户所需的测试数量。每个客户都有单独的报告。分布式跟踪应该继续起作用(Application Insights可以跨资源工作)。
注意-仅当您的拓扑结构简单并且您不需要将RoleName用于其他内容时,此方法才起作用。
希望有帮助!