获取协调器功能开始和结束之间的时间长度

问题描述 投票:0回答:1

我有一个 orchestrator 函数,里面有几个

CallHttpAsync
。我正在进行一些负载测试,并试图确定协调器功能平均需要多长时间才能完成。我无法获得一个理想格式的查询。

我现在有这个:

union traces
| where customDimensions.Category == 'Host.Triggers.DurableTask'
| extend instanceId = customDimensions['prop__instanceId']
| extend state = customDimensions['prop__state']
| extend isReplay = tobool(tolower(customDimensions['prop__isReplay']))
| extend sequenceNumber = tolong(customDimensions["prop__sequenceNumber"])
| where isReplay != true
| where operation_Name == 'O_EnrollInCanvas'
| sort by timestamp desc, sequenceNumber desc
| sort by timestamp asc, sequenceNumber asc
| project timestamp, instanceId, sequenceNumber, state, operation_Name, message 

使用这些结果,我可以接手超越并弄清楚;但是,我正在尝试查看是否可以直接从洞察查询中获得结果。这是结果的示例。您可以看到

instanceId
可用于获取 StartedScheduledCompleted 时间

使用屏幕截图中突出显示的 instanceId,我的理想结果是这样的:

instanceId | StartedTimestamp | CompletedTimestamp
14afcd0d7fcb43a3a94e4869c81f9047 | 2/20/2023, 11:38:33.381 AM | 2/20/2023, 11:38:34.827 AM

更新;我认为这可以使用

join
来完成:

let FunctionTraces = traces | where operation_Name == 'O_EnrollInCanvas';
union FunctionTraces
| where customDimensions.Category == 'Host.Triggers.DurableTask'
| extend instanceId = customDimensions['prop__instanceId']
| extend state = customDimensions['prop__state']
| extend isReplay = tobool(tolower(customDimensions['prop__isReplay']))
| extend sequenceNumber = tolong(customDimensions["prop__sequenceNumber"])
| where isReplay != true
| where state == 'Started'
| join (FunctionTraces
        | where customDimensions['prop__state'] == 'Completed'
        | extend instanceId = customDimensions['prop__instanceId']
        | project CompletedTimestamp = timestamp, CompletedInstance = instanceId)
        on $right.instanceId == $left.instanceId
| where operation_Name == 'O_EnrollInCanvas'
| sort by timestamp desc, sequenceNumber desc
| sort by timestamp asc, sequenceNumber asc
| project timestamp, instanceId, sequenceNumber, state, operation_Name, message

但是,对于当前查询,我得到了错误

join: Invalid entities used as join attributes. When using equality expressions, entities should be used by specifying its source $left or $right.

azure-application-insights
1个回答
0
投票

只需要一点技巧:

let FunctionTraces = traces | where operation_Name == 'O_EnrollInCanvas';
union FunctionTraces
| where customDimensions.Category == 'Host.Triggers.DurableTask'
| extend instanceId = tostring(customDimensions['prop__instanceId'])
| extend state = customDimensions['prop__state']
| extend isReplay = tobool(tolower(customDimensions['prop__isReplay']))
| extend sequenceNumber = tolong(customDimensions["prop__sequenceNumber"])
| where isReplay != true
| where state == 'Started'
| join (FunctionTraces
        | where customDimensions['prop__state'] == 'Completed'
        | extend instanceId = tostring(customDimensions['prop__instanceId'])
        | project CompletedTimestamp = timestamp, appId, instanceId)
        on $left.instanceId == $right.instanceId
| extend secondsElapsed = datetime_diff('second', CompletedTimestamp, timestamp)
| extend minutesElapsed = datetime_diff('minute', CompletedTimestamp, timestamp)
| extend elapsed =  strcat(tostring(minutesElapsed), ' minute(s), ', tostring(secondsElapsed), ' second(s)')
| project Start = timestamp, Completed = CompletedTimestamp, elapsed, instanceId, sequenceNumber, state, operation_Name, message 
| where operation_Name == 'O_EnrollInCanvas'
| sort by Start desc, sequenceNumber desc
| sort by Start asc, sequenceNumber asc

结果:

© www.soinside.com 2019 - 2024. All rights reserved.