Azure 微服务性能洞察 - 集体性能计数器报告
Azure Microservices Performance Insights - Collective Performance Counter Reporting
我在 .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 个端到端循环所花费的一些 start/end 时间或总时间。
我已经通过一些tihs的解决方案
在方法调用前后在 Application Insights 中记录指标
例子:
创建并使用唯一的 Guid 作为 correlationId
应用程序 1 > 方法 1() - 记录开始时间
Application 1 > Method() - 记录开始和结束时间
应用程序 3 > Method2() - 记录开始和结束时间
应用程序 3 > Method2() - 记录结束时间
当我搜索该 Guid 时,它在 Insights 中可用
即使在这里,我也有一个问题,我如何才能提高它的可见性,也许是图表、报告,我可以在 Application Insights 中使用哪些选项?
- 日志如上,但在一个单独的数据库中,这样我们就可以控制数据(应用程序洞察有大量数据,不能单独API)
创建一个新的 API 并将输入作为 Guid,响应将如下所示
总 EndToEnd 时间: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 中,您可以将开始时间放在 Baggage 中
- 该字段将跨应用传播[注意,OperationId 也将传播]
- 在应用程序 N 中,您将确切知道特定 request/transaction 何时开始,因此您将能够发出正确的指标
我在 .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 个端到端循环所花费的一些 start/end 时间或总时间。
我已经通过一些tihs的解决方案
在方法调用前后在 Application Insights 中记录指标 例子: 创建并使用唯一的 Guid 作为 correlationId
应用程序 1 > 方法 1() - 记录开始时间 Application 1 > Method() - 记录开始和结束时间 应用程序 3 > Method2() - 记录开始和结束时间
应用程序 3 > Method2() - 记录结束时间
当我搜索该 Guid 时,它在 Insights 中可用 即使在这里,我也有一个问题,我如何才能提高它的可见性,也许是图表、报告,我可以在 Application Insights 中使用哪些选项?
- 日志如上,但在一个单独的数据库中,这样我们就可以控制数据(应用程序洞察有大量数据,不能单独API) 创建一个新的 API 并将输入作为 Guid,响应将如下所示 总 EndToEnd 时间: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 中,您可以将开始时间放在 Baggage 中
- 该字段将跨应用传播[注意,OperationId 也将传播]
- 在应用程序 N 中,您将确切知道特定 request/transaction 何时开始,因此您将能够发出正确的指标