Есть ли способ сгруппировать все последние вставленные счетчики производительности по машинам в одну строку?

Я пытаюсь запросить таблицу Perf аналитики журнала. В этой таблице есть счетчики производительности компьютеров.

Я хочу вывести все счетчики производительности машины в одну строку.

Я написал этот запрос Кусто, но он выводит каждый счетчик в своей строке.

Perf  
| where Computer in ('aks-nodepool1-85388480-3', 'aks-agentpool-40719753-2') 
| summarize arg_max(TimeGenerated, *) by CounterName, Computer
| project   Computer, CounterName, TimeGenerated, CounterValue

Мне нужен запрос, который может дать следующий результат:

(Computer1, TimeGenerated, CounterName1, CounterName1Value, CounterName2, CounterName2Value, ...)

(Компьютер2, TimeGenerated, CounterName1, CounterName1Value, CounterName2, CounterName2Value, ...)

(Computer3, TimeGenerated, CounterName1, CounterName1Value, CounterName2, CounterName2Value, ...)

Любая помощь или советы будут оценены.


person Zack ISSOIR    schedule 07.02.2019    source источник


Ответы (1)


Как насчет этого? (его схема вывода немного отличается от схемы вывода, которую вы первоначально упомянули в своем вопросе)

datatable(Computer:string, CounterName:string, CounterValue:double, TimeGenerated:datetime)
[
    "comp1", "counter1", 1.0, datetime(2019-02-07 16:31:15),
    "comp2", "counter1", 1.1, datetime(2019-02-07 16:31:15),
    "comp3", "counter1", 1.2, datetime(2019-02-07 16:31:15),
    "comp4", "counter1", 1.3, datetime(2019-02-07 16:31:16),
    "comp2", "counter2", 1.4, datetime(2019-02-07 16:31:16),
    "comp3", "counter3", 1.5, datetime(2019-02-07 16:31:16),
    "comp4", "counter2", 1.6, datetime(2019-02-07 16:31:14),
]
| summarize TimeGenerated = any(TimeGenerated), d = make_dictionary(pack(CounterName, CounterValue)) by Computer
| evaluate bag_unpack(d)

выведет:

| Computer | TimeGenerated               | counter1 | counter2 | counter3 |
|----------|-----------------------------|----------|----------|----------|
| comp1    | 2019-02-07 16:31:15.0000000 | 1        |          |          |
| comp2    | 2019-02-07 16:31:15.0000000 | 1.1      | 1.4      |          |
| comp3    | 2019-02-07 16:31:15.0000000 | 1.2      |          | 1.5      |
| comp4    | 2019-02-07 16:31:16.0000000 | 1.3      | 1.6      |          |

и вы также можете сделать это:

datatable(Computer:string, CounterName:string, CounterValue:double, TimeGenerated:datetime)
[
    "comp1", "counter1", 1.0, datetime(2019-02-07 16:31:15),
    "comp2", "counter1", 1.1, datetime(2019-02-07 16:31:15),
    "comp3", "counter1", 1.2, datetime(2019-02-07 16:31:15),
    "comp4", "counter1", 1.3, datetime(2019-02-07 16:31:16),
    "comp2", "counter2", 1.4, datetime(2019-02-07 16:31:16),
    "comp3", "counter3", 1.5, datetime(2019-02-07 16:31:16),
    "comp4", "counter2", 1.6, datetime(2019-02-07 16:31:14),
]
| summarize arg_max(TimeGenerated, *) by Computer, CounterName
| summarize d = make_dictionary(pack(CounterName, CounterValue, "TimeGenerated", TimeGenerated)) by Computer
| evaluate bag_unpack(d)

который выведет:

| Computer | TimeGenerated               | counter1 | counter2 | counter3 |
|----------|-----------------------------|----------|----------|----------|
| comp1    | 2019-02-07 16:31:15.0000000 | 1        |          |          |
| comp2    | 2019-02-07 16:31:15.0000000 | 1.1      | 1.4      |          |
| comp3    | 2019-02-07 16:31:15.0000000 | 1.2      |          | 1.5      |
| comp4    | 2019-02-07 16:31:16.0000000 | 1.3      | 1.6      |          |
person Yoni    schedule 07.02.2019
comment
Это именно то, что я искал. Но ему не хватает только одного: мне нужен последний, мне нужны только последние вставленные счетчики производительности. Можно ли этого добиться, заменив TimeGenerated = any (TimeGenerated) на arg_max (TimeGenerated, *)? - person Zack ISSOIR; 07.02.2019
comment
Я обновил свой ответ, вы можете проверить, соответствует ли он вашему запросу. если это не так - вы можете предоставить образец набора данных (используя оператор datatable и результат, который вы хотите получить для него) - person Yoni; 07.02.2019
comment
Это отвечает на вопрос. Я отмечу это как ответ, потому что это дает желаемый результат. Я добавлю несколько проверок позже, и я добавлю обновления, если это что-то новое. Спасибо за очень полезный ответ и, кстати, ваш блог на kusto отличный. - person Zack ISSOIR; 07.02.2019
comment
Предположим, нам нужно переименовать:% Processor Time после отмены резервной копии словаря, используя переименование проекта, и мы хотим преобразовать столбец в CPUTime. Как с этим справиться? Я поискал в документе о переименовании проекта и не нашел ничего, что показало бы, как переименовать имена столбцов, в которых есть пробелы. - person Zack ISSOIR; 08.02.2019
comment
я бы предложил открыть новую тему по этому вопросу [в настоящее время я не уверен, где у вас CounterName в наборе результатов приведенного выше примера] - person Yoni; 08.02.2019
comment
Я разместил вопрос, связанный с этим, вы можете его увидеть. - person Zack ISSOIR; 05.04.2019