我有一个 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
可用于获取 Started、Scheduled 和 Completed 时间
使用屏幕截图中突出显示的 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.
只需要一点技巧:
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