-- =================================================================================================================== -- SQLI-WIN-006: Et drev bliver fuldt om få dage -- =================================================================================================================== -- Regel-id: SQLI-WIN-006 -- Titel: Et drev bliver fuldt om få dage -- Alvor: Medium; High inden for 7 dage; Critical inden for 2 dage. -- Versioner: Windows Server 2008 R2 og nyere. -- -- Hvad tjekkes, 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. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- 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. -- -- Grænseværdier (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. -- -- 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 -- -- Data kommer fra (collector, fil – medlemmer, interval): -- 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. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : DiskForecastRule -- -- Read-only: Ja. Reglen sender ingen SQL. Agenten læser kun fra Windows: CIM/WQL-forespørgsler (SELECT), -- hændelsesloggen og for planlagte opgaver Task Schedulers skrivebeskyttede GetInfo. Den starter, stopper -- eller ændrer intet på serveren. Filen indeholder kun kommentarer; forespørgslerne mod Windows står herunder. -- =================================================================================================================== -- 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)}}