Получение количества одновременных запросов для каждого бина в Kusto / Application Insights - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу знать, сколько запросов в настоящее время выполняется в любую секунду в Azure Application Insights.

Например, если запрос 1 начинается в 10:00:00 и заканчивается в 10:00:03 (отметка времени 10:00:00 и продолжительность 3999 мс), он должен быть посчитан в строках за 10:00:00, 10:00:01, 10:00:02 и 10:00 : 03

Вывод должен выглядеть примерно так:

| timestamp               | count_ |
| ----------------------- | ------ |
| 0000-00-00T00:00:00.000 | 254    |
| 0000-00-00T00:00:00.001 | 345    |
| 0000-00-00T00:00:00.002 | 216    |

Я подумал, что мог бы использовать оператор join для таблицы секунд, но я не могу использовать что-то вроде on $right.timestamp >= $left.timestamp and $right.timestamp + duration < $left.timestamp Кусто отвечает join: Only equality is allowed in this context..

Так как я могу получить параллельные запросы (или зависимости) по метке времени bin?

1 Ответ

0 голосов
/ 26 февраля 2020

Предполагая, что вы можете указать начало и конец каждого сеанса, вы можете использовать функцию range () , чтобы сгенерировать применимые значения даты и времени по размеру корзины, когда сеанс активен, а затем использовать mv-expand оператор для расширения списка, чтобы вы могли подсчитывать количество одновременных сеансов. Вот пример:

let sampleEvents = datatable(sessionId:string,eventType:string, timestamp:datetime)
["A", "start", datetime(2020-02-29T10:32:52.1953143Z),
"A", "end", datetime(2020-02-29T10:33:08.1953143Z),
"B", "start", datetime(2020-02-29T10:32:57.1953143Z),
"B", "end", datetime(2020-02-29T10:33:10.1953143Z)];
let startEvents = sampleEvents | where eventType =="start" | project startTime = timestamp, sessionId;
startEvents
| lookup kind=leftouter (sampleEvents | where eventType =="end" | project endTime=timestamp, sessionId) on sessionId
| extend endTime = iif(isempty(endTime), now(), endTime)
| extend sessionActiveTimeInOneSecondInterval = range(startTime, endTime, 1s)
| mv-expand sessionActiveTimeInOneSecondInterval to typeof(datetime)
| summarize count() by bin(sessionActiveTimeInOneSecondInterval, 1s) 

Также рассмотрите возможность использования функции row_window_session () для определения времени начала сеанса

...