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>
65 lines
3.9 KiB
Transact-SQL
65 lines
3.9 KiB
Transact-SQL
/*
|
||
SQLI-SYN-001 – Et syntetisk tjek fejler
|
||
========================================
|
||
|
||
Hvad og hvorfor
|
||
Agenten gør det, en bruger eller applikation ville gøre – forbinder til en port, henter en side, logger på SQL Server
|
||
og kører en forespørgsel, slår et navn op, logger på Dynamics AX – og det fejler. Er tjekket knyttet til en tjeneste
|
||
på en Windows-server, og kører tjenesten, siges det direkte: "… svarer ikke, selv om tjenesten kører" – den fejl,
|
||
en tjenesteovervågning alene ikke ser.
|
||
|
||
Tærskler (agentens appsettings.json og tjekkets indstillinger)
|
||
SQLInsight:SyntheticChecks:FailuresBeforeFinding standard 2 (fejl i træk før et fund: ét tabt svar er ingen alarm)
|
||
Pr. tjek: interval (standard 300 s, 60–86400) og timeout (standard 15 s, AX 60 s, højst 120).
|
||
|
||
Alvor
|
||
Høj.
|
||
|
||
Rettigheder
|
||
TCP, HTTP(S), DNS: ingen ud over netværksadgang fra agentens server. HTTP med Windows-godkendelse: agentens konto.
|
||
SQL: login'et i tjekket (agentens Windows-konto eller et SQL-login, hvis adgangskode krypteres til agenten som i 1.3)
|
||
skal kunne logge ind og køre forespørgslen; least-privilege-login'et fra grant-least-privilege.sql er nok til standardforespørgslen.
|
||
AX-logon: agentens Windows-konto skal være AX-bruger (i firmaet), og .NET Business Connector skal være installeret på
|
||
agentens server; ellers testes kun AOS-porten (og resultatet siger det).
|
||
Tjenestens tilstand: WMI Remote Enable på root\cimv2 + læseret på Service Control Manager på tjenestens server.
|
||
|
||
Understøttede versioner
|
||
SQL: SQL Server 2005 og nyere (SqlClient, ODBC-fallback for 2005). AX-logon: AX 2009 (kræver Windows PowerShell
|
||
2.0-motoren) og AX 2012. Windows-tjenester: Windows Server 2008 R2 og nyere.
|
||
|
||
Collector
|
||
src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs – SyntheticCheckRunner.RunAsync (TcpAsync, HttpAsync, SqlAsync,
|
||
DnsAsync, AxAsync), AX-logon: src/SQLInsight.Servers/Synthetic/AxBusinessConnector.cs og ax-logon.ps1. Køres efter
|
||
tjekkets interval af src/SQLInsight.Agent/Servers/SyntheticCheckService.cs – RunCheckAsync, som også slår den tilknyttede
|
||
tjenestes tilstand op (CimQueries.SingleServiceQuery).
|
||
Regel
|
||
src/SQLInsight.Rules/Servers/SyntheticCheckRules.cs – SyntheticCheckFailingRule
|
||
|
||
Evaluering
|
||
Har de seneste FailuresBeforeFinding kørsler alle fejlet, er det et fund. Titlen siger, om den tilknyttede tjeneste
|
||
kører, er stoppet, eller om tjekket blot fejler, med fejlteksten som måling (følsom).
|
||
|
||
SQL: Ved et SQL-tjek kører agenten præcis dette på den instans, tjekket peger på (ændrer intet: forespørgslen
|
||
valideres som én skrivebeskyttet SELECT, både når den gemmes og før den køres, og køres i en transaktion, der altid
|
||
rulles tilbage). Hver GO er en separat kommando på samme forbindelse.
|
||
*/
|
||
|
||
-- Variant: SQL-tjek med standardforespørgslen (alle versioner fra SQL Server 2005)
|
||
SET LOCK_TIMEOUT 5000; SET DEADLOCK_PRIORITY LOW; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||
GO
|
||
-- Kun hvis tjekket har en database (tjekkets "Database", ] fordoblet): USE [<database>];
|
||
BEGIN TRANSACTION;
|
||
GO
|
||
SELECT 1
|
||
GO
|
||
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
|
||
GO
|
||
|
||
/*
|
||
Ikke-SQL-tjek, efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto):
|
||
TCP: Test-NetConnection -ComputerName aos01 -Port 2712
|
||
HTTP: Invoke-WebRequest -Uri https://ep.firma.local/ -UseDefaultCredentials -UseBasicParsing | Select-Object StatusCode
|
||
DNS: Resolve-DnsName aos01.firma.local
|
||
AX: Test-NetConnection -ComputerName aos01 -Port 2712 (logon: se src/SQLInsight.Servers/Synthetic/ax-logon.ps1)
|
||
Tjeneste: Get-CimInstance -ComputerName aos01 -Query "SELECT Name, DisplayName, State, StartMode, ExitCode FROM Win32_Service WHERE Name = 'AOS60`$01'"
|
||
*/
|