/* 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 []; 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'" */