-- =================================================================================================================== -- SQLI-WIN-005: Lidt ledig plads på et drev -- =================================================================================================================== -- Regel-id: SQLI-WIN-005 -- Titel: Lidt ledig plads på et drev -- Alvor: Medium under FreePercent, High under CriticalFreePercent, Critical under 1 GB eller 1 %. -- Versioner: Windows Server 2008 R2 og nyere. -- -- Hvad tjekkes, og hvorfor: -- Når et drev løber fuldt, stopper alt, der skriver til det: SQL Server kan ikke vokse data- og logfiler, backup -- fejler, AOS og Windows kan ikke skrive logfiler og midlertidige filer, og brugere kan ikke gemme. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Lokale diske (DriveType 3) med drevbogstav eller monteringssti; partitioner uden (system/recovery, navn \\?\Volume{…}) -- springes over. Ledig andel = FreeSpace / Capacity. Et fund pr. drev, der er under FreePercent og samtidig har -- mindre end EnoughFreeGigabytes ledig. -- -- Grænseværdier (agentens appsettings.json): -- SQLInsight:Servers:Disks:FreePercent standard 10 (ledig andel, under: Middel) -- SQLInsight:Servers:Disks:CriticalFreePercent standard 5 (under: Høj) -- SQLInsight:Servers:Disks:EnoughFreeGigabytes standard 50 (er der mindst så mange GB ledige, er der intet fund, -- uanset andelen: store drev med lille andel ledig kan være fine) -- -- 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, ellers -- CimQueries.LogicalDiskQuery), hvert 15. minut (SQLInsight:Servers:Intervals:disks) fra -- src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectDisksAsync. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : DiskFreeSpaceRule -- -- 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. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet. -- -- CIM/WQL (namespace root\cimv2): -- SELECT Name, Label, FileSystem, Capacity, FreeSpace FROM Win32_Volume WHERE DriveType = 3 -- SELECT DeviceID, VolumeName, FileSystem, Size, FreeSpace FROM Win32_LogicalDisk WHERE DriveType = 3 (fallback) -- -- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto): -- $s = New-CimSession -ComputerName SERVER -- Get-CimInstance -CimSession $s -Query "SELECT Name, Label, FileSystem, Capacity, FreeSpace FROM Win32_Volume WHERE DriveType = 3" | -- Where-Object { $_.Name -notlike '\\?\*' } | -- Select-Object Name, Label, @{n='LedigGB';e={[math]::Round($_.FreeSpace / 1GB, 1)}}, @{n='Ledig%';e={[math]::Round(100 * $_.FreeSpace / $_.Capacity, 1)}}