【问题标题】:Organizing Application Insights / Health checking for single-tenant services为单租户服务组织 Application Insights / 健康检查
【发布时间】:2019-01-02 09:00:57
【问题描述】:

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

最终的架构是我们拥有的,例如

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 Health Check 上将其设置为 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 收集错误报告。

最好的问候 /安德斯

【问题讨论】:

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


    【解决方案1】:

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

    快速说明 - 如果需要,可以通过 ARM 编写所有脚本。包括 Application Insights 资源。无论您最终选择何种解决方案,都不应成为问题(尽管不同的解决方案可能需要更多脚本)。

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

    这将为您提供出色的警报功能,深入体验。但是,跨客户查询使用精选体验会很困难。

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

    选项 2。 为所有客户的所有遥测数据提供一个 AI 资源。客户仅通过操作名称来区分。

    轻松完成客户查询。但更难对特定客户进行调查。每个资源也有 100 个 Web 测试的限制

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

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

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

    注意 - 这仅适用于您的拓扑结构简单且您不需要将 RoleName 用于其他用途的情况。

    希望对你有帮助!

    【讨论】:

    • 感谢您的反馈。我对它做了一些修改——通过 Azure CLI 尝试了 ARM(还没有),我想我会选择选项 1。就目前而言,这似乎是最好的折衷方案。然后,当获得更多关于我们使用数据的经验时 - 我可以重新考虑是否应该移动某些东西。包含所有客户 AI 资源的资源组似乎能够总结其中的一部分。
    • 只是想说我觉得这很有帮助。我正在讨论如何构建与我的应用程序架构相关的应用程序见解,而这种见解肯定有助于我的决定。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2021-12-18
    相关资源
    最近更新 更多