Application Insights Log Query Получить последнюю строку в группе

Я пытаюсь найти последнюю строку каждого члена группы в Application Insights.

Вот запрос:

traces | 
where timestamp > ago(1h) | 
where message startswith "TEST DONE" | 
order by timestamp desc nulls last |  
extend json=parse_json(substring(message,10))  | 
summarize  any(timestamp, tostring(json.status)) by tostring(json.testKey)

Он возвращает только одну строку, но это не самая последняя, ​​это любая случайная строка из набора возможных строк.

2 ответа

Решение

Я думаю, что вы ищете arg_max функционировать?

https://docs.microsoft.com/en-us/azure/kusto/query/arg-max-aggfunction

что-то вроде:

traces | 
where timestamp > ago(1h) | 
where message startswith "TEST DONE" | 
order by timestamp desc nulls last |  
extend json=parse_json(substring(message,10))  | 
extend testKey = tostring(json.testKey) |
extend status = tostring(json.status) |
summarize arg_max(timestamp, status) by testKey

Вы можете использовать makelist([имя столбца], 1), чтобы выбрать первый. Затем обратитесь к нему по индексу. Использование этой техники позволило решить вышеуказанную проблему с моим набором данных.

Вот адаптация к вашему запросу:

traces | 
where timestamp > ago(1h) | 
where message startswith "TEST DONE" | 
order by timestamp desc nulls last |  
extend json=parse_json(substring(message,10))  | 
extend testKey = tostring(json.testKey) |
summarize timeStampList=makelist(timestamp, 1), statusList=makelist(tostring(json.status), 1) by testKey |
project timeStampList[0], statusList[0], testKey  
Другие вопросы по тегам