One reviewable file per rule id with a Danish header: what and why, thresholds with config keys and defaults, severity, required rights (never local administrator), supported versions, collector file and member, and the evaluation in plain Danish. The Windows rules use no SQL: their exact CIM/WQL queries, event log XPath and a read-only PowerShell snippet to verify them are in a comment block. SQLI-SYN-001/002 carry the exact SQL a SQL check runs (session settings, transaction that is always rolled back, SELECT 1). A test checks every server and check rule has its file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
48 lines
3 KiB
SQL
48 lines
3 KiB
SQL
/*
|
||
SQLI-WIN-001 – CPU-forbruget er højt i længere tid
|
||
===================================================
|
||
|
||
Hvad og hvorfor
|
||
Serverens processorer har i gennemsnit været næsten fuldt belastet i en længere periode. Alt på serveren bliver
|
||
langsommere (forespørgsler, AOS-kald, fildeling, logon). Korte toppe er normale og giver intet fund.
|
||
|
||
Tærskler (agentens appsettings.json)
|
||
SQLInsight:Servers:Cpu:HighPercent standard 90 (gennemsnitlig CPU i procent)
|
||
SQLInsight:Servers:Cpu:SustainedMinutes standard 15 (perioden gennemsnittet tages over)
|
||
Målingerne skal dække mindst 80 % af perioden (en kort top efter et hul tæller ikke).
|
||
|
||
Alvor
|
||
Høj; Kritisk når gennemsnittet er 98 % eller derover.
|
||
|
||
Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator)
|
||
Performance Monitor Users (ydelsestællere) + WMI Enable Account/Remote Enable på root\cimv2
|
||
WS-Man: Remote Management Users · DCOM: Distributed COM Users
|
||
|
||
Understøttede versioner
|
||
Windows Server 2008 R2 og nyere (WS-Man fra Windows Server 2012 / WinRM 3.0; DCOM på alle).
|
||
|
||
Collector
|
||
src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetPerformanceAsync (CimQueries.ProcessorQuery),
|
||
hvert minut (SQLInsight:Servers:Intervals:performance) fra src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectPerformanceAsync.
|
||
Beregning: src/SQLInsight.Core/Servers/ServerPerformance.cs – ServerPerformanceMath.Cpu.
|
||
Regel
|
||
src/SQLInsight.Rules/Servers/WindowsServerRules.cs – ServerCpuRule
|
||
|
||
Evaluering
|
||
Hvert minut læses tælleren Processor(_Total)\% Processor Time som rå værdi. CPU for minuttet er
|
||
100 × (1 − Δ tomgangstid / Δ tid) mellem to læsninger (PERF_100NSEC_TIMER_INV), altså gennemsnittet over hele
|
||
minuttet, ikke et øjebliksbillede. Er gennemsnittet af minutterne i de seneste SustainedMinutes minutter mindst
|
||
HighPercent, er det et fund. Uden to læsninger endnu: "ikke målbar".
|
||
|
||
Reglen bruger ikke SQL. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet.
|
||
|
||
CIM/WQL (namespace root\cimv2):
|
||
SELECT PercentProcessorTime, Timestamp_Sys100NS FROM Win32_PerfRawData_PerfOS_Processor WHERE Name = '_Total'
|
||
SELECT NumberOfLogicalProcessors FROM Win32_ComputerSystem
|
||
|
||
Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto):
|
||
$s = New-CimSession -ComputerName SERVER # DCOM: -SessionOption (New-CimSessionOption -Protocol Dcom)
|
||
$q = "SELECT PercentProcessorTime, Timestamp_Sys100NS FROM Win32_PerfRawData_PerfOS_Processor WHERE Name = '_Total'"
|
||
$a = Get-CimInstance -CimSession $s -Query $q; Start-Sleep -Seconds 60; $b = Get-CimInstance -CimSession $s -Query $q
|
||
100 * (1 - ($b.PercentProcessorTime - $a.PercentProcessorTime) / ($b.Timestamp_Sys100NS - $a.Timestamp_Sys100NS))
|
||
*/
|