Azure Application Insights Kusto Language Подведите итог по тому, где TimeGenerated Value - PullRequest
1 голос
/ 28 марта 2019

Есть ли способ поместить клаузулу where в другой столбец с помощью языка Kusto.Мне известен синтаксис «Pivot», который также используется с SQL для создания столбцов на основе уникальных значений.Но не думаю, что это поможет в моем случае.Есть также еще один ТАК вопрос , у которого почти тот же вопрос, что и у меня.Но его решение тоже не сработало.

Контекст моего запроса: этот запрос получает время выполнения каждой машины за каждый месяц.Вы можете быть удивлены, почему я использовал такой длинный запрос для достижения этой цели.Любые мнения и корректировки приветствуются.Я очень плохо знаком с языком.И я уже использую верхний запрос, чтобы получить время начала и окончания каждой виртуальной машины в другом проекте.

Исходный запрос:

AzureActivity
| where ResourceProvider == "Microsoft.Compute"
and ActivityStatus == "Succeeded"
and OperationName == "Deallocate Virtual Machine"
| project DeallocateResource=Resource
,DeallocatedDate=format_datetime(EventSubmissionTimestamp, 'yyyy-MM-dd')
,DeallocatedTime=format_datetime(EventSubmissionTimestamp, 'HH:mm:ss')
| join kind=fullouter (AzureActivity
| where ResourceProvider == "Microsoft.Compute"
and ActivityStatus == "Succeeded"
and OperationName == "Start Virtual Machine"
| project StartupResource=Resource
,StartDate=format_datetime(EventSubmissionTimestamp, 'yyyy-MM-dd')
,StartTime=format_datetime(EventSubmissionTimestamp, 'HH:mm:ss')
) on $right.StartupResource == $left.DeallocateResource
| where StartDate == DeallocatedDate
| project Resource=coalesce(StartupResource, DeallocateResource) ,
Runtime = round(todouble(datetime_diff('minute', todatetime(strcat(StartDate , " " , DeallocatedTime )) , todatetime(strcat(StartDate , " " , StartTime )))) / 60)
| summarize sum(Runtime) by Resource

Теперь приведенный выше запрос получит сумму выполнениявремя с временным диапазоном, который вы специально установили на портале.Чтобы получить сумму времени выполнения для каждого месяца (Log Analytics настроен на 90 дней, поэтому 3 месяца назад) я добавляю эти операторы where.в 3 разных запросах.Работа выполнена, и я получил 3 разных таблицы с продолжительностью каждого месяца (месяц1, месяц2, месяц3).

| where TimeGenerated > ago(30d)
| where TimeGenerated between(ago(30d) .. ago(60d) )
| where TimeGenerated between(ago(60d) .. ago(90d) )

Но это 3 разных запроса и 3 разных таблицы.Моя цель состоит в том, чтобы получить этот взгляд там, где у вас есть 3 различных (сгенерированных по времени, где утверждения внутри одной таблицы)

Table That I want to achieve

Попробовал решение вопроса SO, но это нене по плану (получено сообщение «Не удалось разрешить скалярное выражение с именем TimeGenerated» при добавлении этих строк кода в исходный запрос)

| summarize sum(Runtime) by Resource , bin(TimeGenerated, 1m)
| summarize Fistmonth = TimeGenerated > ago(30d),  
            SecondMonth = TimeGenerated between(ago(30d) .. ago(60d)) ,
            ThirdMonth = Runtime_,TimeGenerated between(ago(60d) .. ago(90d) ) by Resource

Кто-нибудь знает, что я пропускаю или наблюдаю здесь.Это возможно с Кусто?И использовать ли служебные данные запроса для чего-то, что может быть сделано в несколько строк.

1 Ответ

1 голос
/ 28 марта 2019

Если я правильно понимаю ваш сценарий, вы можете достичь этого, используя sumif, если вы знаете, на какие месяцы вы нацелены заранее.

Вот пример:

datatable(Resource:string, Runtime:double, TimeGenerated:datetime)
[
    "A", 13.4, datetime(2019-01-01 11:11:11),
    "B", 1.34, datetime(2019-01-01 10:10:10),
    "C", 0.13, datetime(2019-01-01 12:12:12),
    "A", 12.4, datetime(2019-02-01 11:11:11),
    "B", 1.24, datetime(2019-02-01 09:09:09),
    "B", 2.24, datetime(2019-02-01 09:10:09),
    "B", 3.24, datetime(2019-02-01 09:11:09),
    "C", 0.12, datetime(2019-02-01 08:08:08),
    "A", 14.4, datetime(2019-03-01 07:07:07),
    "B", 1.44, datetime(2019-03-01 05:05:05),
    "C", 0.14, datetime(2019-03-01 06:06:06),
]
| summarize Month1 = sumif(Runtime, TimeGenerated between(datetime(2019-01-01)..datetime(2019-02-01))),
            Month2 = sumif(Runtime, TimeGenerated between(datetime(2019-02-01)..datetime(2019-03-01))),
            Month3 = sumif(Runtime, TimeGenerated between(datetime(2019-03-01)..datetime(2019-04-01))) 
         by Resource
...