Headers of SQLI-WIN-001/006/007/008/009/010/012/013 and SQLI-SYN-001 follow the rule changes (not measurable instead of passed, caps and summary findings, hourly 24-hour counts, per-user and updater tasks, neutral check titles); SQLI-WIN-010's severity gains Low when the event log cannot be read (also in README.md). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
45 lines
3.5 KiB
SQL
45 lines
3.5 KiB
SQL
-- ===================================================================================================================
|
||
-- SQLI-WIN-010: Serveren er genstartet
|
||
-- ===================================================================================================================
|
||
-- Regel-id: SQLI-WIN-010
|
||
-- Titel: Serveren er genstartet
|
||
-- Alvor: High ved uventet genstart; Info ved genstart uden tegn på at den var uventet; Low når hændelsesloggen ikke kan læses.
|
||
-- Versioner: Windows Server 2008 R2 og nyere.
|
||
--
|
||
-- Hvad tjekkes, og hvorfor:
|
||
-- Serveren er genstartet det seneste døgn. Uventet (strøm, blå skærm, hård nulstilling) afbryder alt midt i det, og
|
||
-- databaser og AX skal gendanne sig selv; en planlagt genstart (fx Windows-opdateringer) er kun til orientering.
|
||
--
|
||
-- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server):
|
||
-- Er LastBootUpTime inden for 24 timer, er serveren genstartet. Er der i hændelsesloggen (seneste 24 timer) en hændelse i
|
||
-- kategorien "uventet nedlukning" – Microsoft-Windows-Kernel-Power 41, EventLog 6008, BugCheck/WER-SystemErrorReporting 1001 –
|
||
-- senest set tidligst en time før starttidspunktet, er genstarten uventet (Høj), ellers Info. "Planlagt" siges kun, når
|
||
-- hændelsesloggen er læst efter starttidspunktet: er den læst sidst før genstarten, er reglen "ikke målbar", indtil den
|
||
-- er indsamlet igen; kan den slet ikke læses, er fundet Low og siger, at årsagen ikke kan ses.
|
||
--
|
||
-- Grænseværdier (fast i koden):
|
||
-- Fast: 24 timer efter LastBootUpTime (ServerEventAnalysis.RecentWindow), derefter forsvinder fundet af sig selv.
|
||
--
|
||
-- Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator):
|
||
-- WMI Enable Account/Remote Enable på root\cimv2 (starttidspunkt); Event Log Readers (hvorfor).
|
||
--
|
||
-- Data kommer fra (collector, fil – medlemmer, interval):
|
||
-- src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetOperatingSystemAsync (CimQueries.OperatingSystemQuery) og
|
||
-- Session.GetEventsAsync, fra src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectPerformanceAsync og CollectEventsAsync.
|
||
-- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : ServerRestartRule
|
||
--
|
||
-- 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 Caption, Version, BuildNumber, LastBootUpTime, TotalVisibleMemorySize, CSName FROM Win32_OperatingSystem
|
||
-- Event Log (MS-EVEN6), XPath for System:
|
||
-- *[System[(Level=1 or Level=2) and TimeCreated[@SystemTime>'2026-10-02T12:00:00.000Z']]]
|
||
--
|
||
-- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto):
|
||
-- (Get-CimInstance -ComputerName SERVER -Query "SELECT LastBootUpTime FROM Win32_OperatingSystem").LastBootUpTime
|
||
-- Get-WinEvent -ComputerName SERVER -FilterHashtable @{ LogName = 'System'; Id = 41, 6008, 1001, 1074; StartTime = (Get-Date).AddDays(-1) }
|