Azure 微服务性能见解 - 集体性能计数器报告

标签 azure microservices azure-application-insights

我在 .net 中有大约 10 个微服务应用程序,全部托管在 Azure ServiceFabric 上。 例如,这些应用程序按顺序设置

API call to Application 1 > stores data in cosmos > sends message to Application 2
Application 2 > Depending on data and business logic send a message to relative department (application 3, 4, 5, etc)
Application 3 processes and stores the data in database

我想要一个性能指标,显示为有效负载执行 1 个端到端周期所需的一些开始/结束时间或总时间。

我已经找到了一些解决方案

  1. 在方法调用之前和之后在 Application Insights 中记录指标 例子: 创建并使用唯一的Guid作为correlationId

    应用程序 1 > Method1() - 记录开始时间 Application 1 > Method() - 记录开始和结束时间 应用3 > Method2() - 记录开始和结束时间
    应用程序 3 > Method2() - 记录结束时间

当我搜索该指南时,该信息可在 Insights 中找到 即使在这里,我也有一个问题,如何提高其可见性,也许是图表、报告,或者我可以在 Application Insights 中使用哪些选项?

  • 如上所述记录,但在单独的数据库中,这样我们就可以控制数据(应用程序洞察有大量数据,不能是单独的 API) 创建一个新的 API,输入为 Guid,响应将如下所示 总端到端时间:10秒 应用1>方法2():2秒 ...
  • 我知道可能有更好的选择,但需要一些指导。

    最佳答案

    有两个选项可以使用 Application Insights 来执行此操作。目前两者都不理想。

    选项一。如果您将所有遥测数据存储在同一资源中,并且您的应用程序没有太多负载,那么您可以按 CorrelationId 进行分组(汇总)。这是一个想法(您可能希望通过记录应用程序 1 的开始时间和应用程序 3 的结束时间来扩展它):

    let Source = datatable(RoleName:string, CorrelationId:string, Timestamp:datetime)
    [
        'Application 1', '1', '2021-04-22T05:00:45.237Z',
        'Application 2', '1', '2021-04-22T05:01:45.237Z',
        'Application 3', '1', '2021-04-22T05:02:45.237Z',
        'Application 1', '2', '2021-04-22T05:00:45.237Z',
        'Application 2', '2', '2021-04-22T05:01:46.237Z',
        'Application 3', '2', '2021-04-22T05:02:47.237Z',
    ];
    Source
    | summarize min_timestamp=min(Timestamp), max_timestamp=max(Timestamp) by CorrelationId
    | extend duration = max_timestamp - min_timestamp
    | project CorrelationId, duration
    

    选项二。 Application Insights 支持 HTTPS 调用的分布式跟踪 W3C 标准。如果您通过消息(在应用程序之间)手动传播分布式跟踪上下文并恢复此上下文,则可以执行以下操作:

    1. 在应用程序 1 中,您可以将开始时间放入行李中
    2. 此字段将在应用程序之间传播[注意,OperationId 也会传播]
    3. 在应用程序 N 中,您将准确知道特定请求/事务何时开始,因此您将能够发出正确的指标

    关于Azure 微服务性能见解 - 集体性能计数器报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67205942/

    相关文章:

    javascript - 将任何 Nodejs 请求转发到其他服务器

    microservices - 使用微服务架构的应用程序中的优雅降级

    angular - '引用错误: define is not defined' when testing Angular app with jest using ApplicationInsights-js

    azure-application-insights - 禁用 Application Insights 发出 AI(内部): 72 message:

    c# - 使用 Azure AD B2C 的 .NET 5 API 和 React UI 身份验证 - 承载错误 ="invalid_token",error_description ="The signature is invalid"

    regex - Azure-CLI/Powershell 密码要求

    amazon-web-services - 我的Docker化微服务的动态端口设置

    azure - Application Insights 数据采样

    .net - 使用某些命令自动缩放云服务

    azure - 使用 azure CDN 缓存 picsum 图像