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>
55 lines
3.4 KiB
SQL
55 lines
3.4 KiB
SQL
/*
|
||
SQLI-WIN-006 – Et drev bliver fuldt om få dage
|
||
===============================================
|
||
|
||
Hvad og hvorfor
|
||
Varsler, at disken løber fuld om et antal dage, før det sker: pladsen på drevet er de seneste uger brugt i et jævnt
|
||
tempo, og fortsætter det, er drevet fuldt inden for prognosegrænsen.
|
||
|
||
Tærskler (agentens appsettings.json)
|
||
SQLInsight:Servers:Disks:ForecastDays standard 30 (fund når drevet forventes fuldt inden for så mange dage)
|
||
SQLInsight:Servers:Disks:ForecastHistoryDays standard 14 (dage med SQLInsights egne målinger, linjen beregnes over)
|
||
SQLInsight:Servers:DiskHistoryDays standard 35 (hvor længe målingerne gemmes i insight.ServerDiskSamples)
|
||
Faste fornuftsgrænser (src/SQLInsight.Core/Servers/DiskForecast.cs – DiskForecastSettings): mindst 2 dages historik og
|
||
12 målinger, R² mindst 0,5, vækst mindst 0,01 GB pr. dag, højst 365 dage frem.
|
||
|
||
Alvor
|
||
Middel; Høj inden for 7 dage; Kritisk inden for 2 dage.
|
||
|
||
Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator)
|
||
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.
|
||
|
||
Collector
|
||
src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetDisksAsync (CimQueries.VolumeQuery), hvert 15. minut fra
|
||
src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectDisksAsync, som gemmer målingen og beregner prognosen.
|
||
Prognose: src/SQLInsight.Core/Servers/DiskForecast.cs – DiskForecaster.Forecast.
|
||
Regel
|
||
src/SQLInsight.Rules/Servers/WindowsServerRules.cs – DiskForecastRule
|
||
|
||
Evaluering
|
||
Ledig plads pr. drev hver 15. minut gemmes i repositoriet. Prognosen tager timegennemsnit af de seneste
|
||
ForecastHistoryDays dage – kun siden drevet sidst skiftede størrelse (et udvidet drev starter en ny tendens) – og
|
||
lægger en ret linje (mindste kvadraters metode) gennem den ledige plads. Hælder linjen nedad, passer den rimeligt
|
||
(R²), og er der nok historik, er "fuld om ca. N dage" = ledig plads nu / forbrug pr. dag. Svinger pladsen op og ned
|
||
(backup skrevet og slettet), er der ingen prognose frem for et skræmmende gæt.
|
||
|
||
Reglen bruger ikke SQL mod den overvågede server. Forespørgslen mod Windows står herunder, og den forespørgsel, agenten
|
||
bruger mod sit eget repository (ikke den overvågede server), står til sidst. Filen indeholder kun kommentarer.
|
||
|
||
CIM/WQL (namespace root\cimv2):
|
||
SELECT Name, Label, FileSystem, Capacity, FreeSpace FROM Win32_Volume WHERE DriveType = 3
|
||
|
||
Historikken i SQLInsight-repositoriet (src/SQLInsight.Repository/InsightRepository.WindowsServers.cs – GetServerDiskHistoryAsync):
|
||
SELECT Volume, DATEADD(hour, DATEDIFF(hour, 0, SampledAt), 0) AS [Hour], MAX(SizeGb), AVG(FreeGb)
|
||
FROM insight.ServerDiskSamples WHERE ServerId = @id AND SampledAt >= @from
|
||
GROUP BY Volume, DATEADD(hour, DATEDIFF(hour, 0, SampledAt), 0)
|
||
ORDER BY Volume, [Hour];
|
||
|
||
Efterprøv med PowerShell (skrivebeskyttet; ledig plads nu):
|
||
Get-CimInstance -ComputerName SERVER -Query "SELECT Name, Capacity, FreeSpace FROM Win32_Volume WHERE DriveType = 3" |
|
||
Select-Object Name, @{n='LedigGB';e={[math]::Round($_.FreeSpace / 1GB, 1)}}
|
||
*/
|