Suchen nach CPU-intensiven Prozessen in Azure Log Analytics

Suchen nach CPU-intensiven Prozessen in Azure Log Analytics

Ich habe die folgende Warnung in Log Analytics erstellt. Die Warnung soll alle Computer erreichen, bei denen die Gesamt-CPU-Auslastung in den letzten zehn Minuten über 90 % lag. Wenn ich die Warnung ausführe, erhalte ich jedoch den Fehler:

Operator „Join“: Tabellen- oder Spaltenausdruck mit dem Namen „FindCPU“ konnte nicht aufgelöst werden.

Kann mir jemand sagen, was zur Behebung dieses Problems erforderlich sein könnte?

//Find Top processes utilizing CPU
// by finding the machine(s) using over 90% of CPU
// then finding the processes using the CPU
// also finding CPU count of the machines to find the actual percentage of CPU being used

//defining our CPU threshold
let CPUThreshold = 90;

//define time sample rate
let Time = 10m;

//define Count of processes to return
let Count = 5;

//Find instances of total cpu being used above 90% over the last 10 minutes
let TopCPU = Perf
| where TimeGenerated > now(-Time)
              and ObjectName == "Processor"
              and CounterName == "% Processor Time"
              and InstanceName == "_Total"
              and CounterValue > CPUThreshold
| project Computer, ObjectName
              , CounterName, CounterValue
              , TimeGenerated;
//end query

// find top Processes, excluding _Total and Idle instances, there may be other instances you want to exclude as well
let TopProcess = Perf
| where TimeGenerated > now(-Time)
               and CounterName == "% Processor Time"
               and InstanceName != "_Total"
               and InstanceName != "Idle"
| project Computer, ObjectName
              , CounterName, InstanceName
              , CounterValue, TimeGenerated;
// end query

// find CPU count for servers(s)
let FindCPU = Perf
| where TimeGenerated >= ago(1h)
| where ObjectName == "Processor"
              and CounterName == "% Processor Time"
              and InstanceName!="_Total"
| sort by InstanceName asc nulls first
| summarize CPUCount = dcount(InstanceName) by Computer;
// end query

//Join all 3 datasets together
FindCPU | join(TopCPU) on Computer 
| join(TopProcess)on Computer
| extend PercentProcessorUsed = CounterValue1 / CPUCount
| summarize avg(PercentProcessorUsed) by Computer, ObjectName
                  , CounterName, CPUCount 
                  , TotalCPU=CounterValue //rename CounterValue to TotalCPU 
                  , Process=ObjectName1 //rename ObjectName1 to Process 
                  , ProcessTime=CounterName1 //rename CounterName1 to ProcessTime 
                  , ProcessName=InstanceName //rename InstanceName to ProcessName 
                  , TimeGenerated
| where Process == "Process"
and avg_PercentProcessorUsed > 25 // only return processes that are using more than 25%
| top Count by avg_PercentProcessorUsed desc
| project Computer, CPUCount
                , ProcessName , avg_PercentProcessorUsed
                , TotalCPU, Process
                , ProcessTime, TimeGenerated

Danke

Antwort1

Die Abfrage wird einwandfrei ausgeführt (obwohl sie für Ihr Vorhaben etwas zu kompliziert erscheint), Sie müssen jedoch darauf achten, dass Sie beim Ausführen alle Abfragen auswählen.

Wenn sich Ihr Cursor am Ende aller Abfragen befindet, führt Log Analytics standardmäßig nur die letzte Abfrage aus, die offensichtlich einen Fehler verursacht, da „FindCPU“ nicht gefunden werden kann. Markieren Sie alles, führen Sie es aus und es funktioniert einwandfrei.

verwandte Informationen