Как получить подробную информацию о топовых процессорах с использованием серверов в KQL - PullRequest
0 голосов
/ 07 мая 2020

На всех наших серверах установлен агент Log Analytics. Агент настроен на сбор информации счетчиков производительности. Я могу легко получить обзор использования ЦП на всех серверах, выполнив этот запрос:

Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize HourlyUsage = avg(CounterValue) by bin(TimeGenerated, 1h),  Computer 
| render timechart 

Я хотел бы создать график, показывающий использование ЦП 10 наиболее загруженных серверов. Я создал запрос KQL, чтобы получить 10 лучших ЦП с использованием серверов:

let TopCPUMaxServers = Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time" 
| summarize Max_CPU = max(CounterValue) by Computer, CounterName
| top 10 by Max_CPU  asc nulls last;

Этот запрос дает мне список интересных серверов. Теперь я хотел бы получить счетчики производительности из этого списка. Когда я пробую это:

let TopCPUMaxServers = Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time" 
| summarize Max_CPU = max(CounterValue) by Computer, CounterName
| top 10 by Max_CPU  asc nulls last;
Perf | join (TopCPUMaxServers) on Computer 
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h), Computer
| render timechart 

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

С уважением, Свен

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

По умолчанию тип соединения - "innerunique", который возвращает первое совпадение. Вы можете использовать тип «leftouter», но для этого сценария оператор «in» будет проще и, вероятно, будет работать лучше:

let TopCPUMaxServers = Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time" 
| summarize Max_CPU = max(CounterValue) by Computer, CounterName
| top 10 by Max_CPU  asc nulls last
| project Computer;
Perf 
| where Computer in (TopCPUMaxServers)
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h), Computer
| render timechart 
2 голосов
/ 07 мая 2020

Вы можете использовать следующий вариант с помощью оператора in ():

let TopCPUMaxServers = Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time" 
| summarize Max_CPU = max(CounterValue) by Computer, CounterName
| top 10 by Max_CPU  asc nulls last
| project Computer;
Perf 
| where Computer in (TopCPUMaxServers)
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h), Computer
| render timechart 
...