sqlinsight-pro/docs/installation.md
Søren Eggert Lundsteen Olsen 4c2d5252ad Docs: Windows-servere og syntetiske tjek (1.5)
- docs/windows-servere.md: what is collected and how often, how the agent reads
  servers (WS-Man, DCOM fallback, event log over MS-EVEN6), the exact least-privilege
  rights and grant-windows-server.ps1 (never local administrator), known limits,
  "ikke målbar" with the exact reason, firewall ports, the disk forecast, event
  noise filtering, rules with their thresholds, retention, configuration and API.
- docs/syntetiske-tjek.md: the kinds, the AX logon (port, then .NET Business
  Connector in a separate process, or clearly only the port), service running but
  not answering, sealed SQL passwords, rules, firewall, configuration and API.
- Linked from installation, integration (API table) and databehandling (retention,
  nothing sent to the hub); on the website in the documentation index, and the rule
  list shows the Windows server and synthetic check rules in their own areas.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 14:59:22 +02:00

14 KiB

Installation

SQLInsight Pro består af to programmer, som begge installeres hos jer (on-prem):

Del Hvad den gør Kører som
SQLInsight Agent Overvåger SQL Server-instanserne og gemmer fund i repository-databasen Windows-tjeneste (eller systemd på Linux)
SQLInsight Web Lokalt websted, der viser fund, trends og anbefalinger IIS-websted eller selvstændig Windows-tjeneste med indbygget webserver (Kestrel)

Begge bruger en repository-database på en SQL Server 2016+-instans, der helst ikke er en af de overvågede.

Installationstrinene er skrevet ud fra Microsofts dokumentation for ASP.NET Core-hosting. De er endnu ikke gennemtestet på en ren Windows Server. Meld gerne afvigelser tilbage som issue.

Hurtigst: MSI-installeren

SQLInsight-Pro-<version>-x64.msi installerer agent og web som Windows-tjenester. .NET er indbygget, så serveren behøver ingen runtime. Hent den nyeste under Releases, eller med installer\get-latest-msi.ps1. Kør installeren som administrator, logget ind som en bruger, der er sysadmin på den SQL Server, repositoriet skal ligge på (eller har dbcreator og securityadmin). Installeren opretter selv repository-databasen, logins og rettigheder (trin 2 og 3), så de ikke skal laves i hånden:

  • Med installationsguiden: Første side spørger om forbindelsesstrengen til repositoriet, den første SQL Server, tjenestekonti og port.
  • Stille, fx med SCCM/Intune:
msiexec /i SQLInsight-Pro-1.0.0-x64.msi /qn /l*v install.log `
  REPOSITORY_CONNECTION="Server=sqlmon01;Database=SQLInsight;Integrated Security=true;Encrypt=true" `
  MONITOR_SERVER="sql01" `
  AGENT_ACCOUNT="DOMÆNE\svc-sqlinsight$" WEB_ACCOUNT="DOMÆNE\svc-sqlinsight-web$" WEB_PORT=5080 `
  ADMIN_GROUPS="DOMÆNE\SQL-Admins" `
  ADDLOCAL=ALL
Egenskab Standard
REPOSITORY_CONNECTION (ingen) Forbindelsesstreng til repository-databasen. Uden den installeres tjenesterne, men startes ikke
MONITOR_SERVER (ingen) Første instans, der skal overvåges. Flere tilføjes i webbrugerfladen under Servere og databaser (se servere-og-databaser.md) eller i appsettings.json
AGENT_ACCOUNT NT SERVICE\SQLInsight Agent Tjenestekonto til agenten. Den virtuelle konto når andre servere som computerkontoen (DOMÆNE\SERVER$), så det er den, der skal have login og rettigheder på de overvågede instanser. En gMSA angives som DOMÆNE\navn$
WEB_ACCOUNT NT SERVICE\SQLInsight Web Tjenestekonto til web. Skal have db_datareader på repositoriet
WEB_PORT 5080 Port til webbrugerfladen. Installeren åbner den i Windows Firewall
ADMIN_GROUPS (ingen) Windows-grupper, der må ændre, hvilke servere og databaser der overvåges, adskilt af ; (fx DOMÆNE\SQL-Admins;DOMÆNE\DBA). Skrives som SQLInsight:Web:AdminGroups i webbens sqlinsight.ini. Uden den må den lokale gruppe Administratorer på webserveren (se servere-og-databaser.md)
ADDLOCAL Agent,Web Agent, Web og UpdateTask (planlagt opgave, der installerer hentede opdateringer som SYSTEM, se opdatering.md). ALL = alle tre
SKIP_REPOSITORY_SETUP (ingen) 1 = installeren opretter ikke database, logins og rettigheder. Brug det, når en DBA gør det (trin 2 og 3), eller når installationen kører som SYSTEM (SCCM/Intune) uden rettigheder på SQL Server

Installeren gør følgende:

  • Programmerne lægges i C:\Program Files\SQLInsight\Agent og \Web, og tjenesterne SQLInsight Agent og SQLInsight Web oprettes med automatisk start.

  • Værdierne fra installationen skrives i sqlinsight.ini ved siden af programmerne. Den læses efter appsettings.json, så begge filer kan redigeres bagefter. Genstart tjenesten efter en ændring.

  • Repositoriet sættes op med din Windows-konto (ikke tjenesternes), før tjenesterne starter:

    • databasen fra Database=… oprettes, hvis den mangler;
    • tjenestekontiene får login og bruger: agenten db_owner, web db_datareader. Ligger SQL Server på en anden computer, kommer NT SERVICE\…-kontiene dertil som computerkontoen (DOMÆNE\COMPUTER$), og den får login'et i stedet;
    • skemaet oprettes;
    • på MONITOR_SERVER oprettes agentens login, og den får rettighederne fra grant-least-privilege.sql. Lykkes det ikke (fx ingen sysadmin dér), fortsætter installationen, og scriptet kan køres senere.

    Fejler opsætningen af repositoriet, stopper installationen og rulles tilbage. Årsagen står i hændelsesloggen (Application, kilden SQLInsight Pro). Opsætningen kan også køres igen bagefter, fx efter en ændret forbindelsesstreng: "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" setup-repository --grant-monitored (med --agent-account/--web-account, hvis der ikke bruges standardkonti).

  • C:\ProgramData\SQLInsight oprettes med adgang for kun SYSTEM, Administrators og agentens konto. Mappen indeholder lokale regler, regelpakker og ventende opdateringer.

  • Kilden SQLInsight Pro registreres i hændelsesloggen (se integration.md).

Opgradering: Kør en nyere MSI; der skal ingen parametre med. appsettings.json og sqlinsight.ini bevares, og det samme gælder de valgte dele (fx opdateringsopgaven).

Afinstallation: Brug Programmer og funktioner eller msiexec /x. Tjenester, programfiler, firewallregel og opdateringsopgave fjernes. appsettings.json, sqlinsight.ini og C:\ProgramData\SQLInsight bliver liggende, så en geninstallation beholder indstillingerne.

Web kører her på Kestrel over http med Windows-login. Skal den bruge https eller køre i IIS, så se trin 5a/5b.

Til SEOSoft: MSI'en bygges på Linux med installer/build-msi.sh <version> (kræver apt install wixl msitools) og bygges også af CI ved hvert tag v*. Scriptet kontrollerer selv MSI-tabellerne. installer/test-msi-wine.sh afprøver installation, opgradering og afinstallation under Wine.

1. Forudsætninger

  • Windows Server 2016 eller nyere (eller Linux til agenten)
  • Ved manuel installation (ikke MSI): .NET 10 Runtime på agent-serveren; ASP.NET Core Hosting Bundle på webserveren, hvis IIS bruges
  • To tjenestekonti, gerne gMSA: én til agenten og én til web-UI'et
  • Til SQL Server 2000: en Windows-agent med en ODBC-driver, der understøtter 2000 (se legacy-versions.md)

2. Repository-databasen

MSI-installeren gør dette selv (medmindre SKIP_REPOSITORY_SETUP=1). Ved manuel installation, eller når en DBA skal gøre det:

CREATE DATABASE SQLInsight;
GO
USE SQLInsight;
CREATE LOGIN [DOMÆNE\svc-sqlinsight-agent$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-agent$];
ALTER ROLE db_owner ADD MEMBER [DOMÆNE\svc-sqlinsight-agent$];   -- agenten opretter og opgraderer skemaet

CREATE LOGIN [DOMÆNE\svc-sqlinsight-web$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-web$];
ALTER ROLE db_datareader ADD MEMBER [DOMÆNE\svc-sqlinsight-web$]; -- web-UI'et læser kun

Agenten opretter tabellerne selv ved første start.

3. Rettigheder på de overvågede instanser

Kør db/permissions/grant-least-privilege.sql på hver instans efter at have oprettet agentens login. Agenten bliver aldrig sysadmin.

Overvåges Dynamics AX, kan agenten desuden få læseadgang til nogle få AX-systemtabeller (batchjob, nummerserier, RecId) med db/permissions/grant-dynamics-ax-read.sql. Det er et tilvalg pr. database; se dynamics-ax.md.

Windows-serverne (CPU, diske, tjenester, hændelseslog, opgaver) læses med db/permissions/grant-windows-server.ps1, som giver agentens konto læseadgang uden lokal administrator; se windows-servere.md.

4. Agenten som Windows-tjeneste

dotnet publish src/SQLInsight.Agent -c Release -r win-x64 --self-contained false -o C:\Program Files\SQLInsight\Agent

Ret C:\Program Files\SQLInsight\Agent\appsettings.json: SQLInsight:Repository:ConnectionString og eventuelt listen SQLInsight:Instances (servere kan også tilføjes i webbrugerfladen, se servere-og-databaser.md). Opret derefter tjenesten:

sc.exe create "SQLInsight Agent" binPath= "\"C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe\"" obj= "DOMÆNE\svc-sqlinsight-agent$" start= delayed-auto
sc.exe description "SQLInsight Agent" "Overvåger SQL Server og gemmer fund i SQLInsight-repositoriet."
sc.exe start "SQLInsight Agent"

For en gMSA angives ingen adgangskode. Loggen kan ses i Windows' Event Viewer under Application.

5a. Web-UI'et på IIS

  1. Installér ASP.NET Core Hosting Bundle for .NET 10, og kør iisreset.
  2. Publicér:
    dotnet publish src/SQLInsight.Web -c Release -o C:\inetpub\SQLInsight
    
    Publiceringen danner en web.config med ASP.NET Core Module (in-process).
  3. Opret en application pool med .NET CLR version = No Managed Code, og sæt dens identitet til DOMÆNE\svc-sqlinsight-web$.
  4. Opret et websted, der peger på C:\inetpub\SQLInsight, med en HTTPS-binding og et certifikat fra jeres interne CA.
  5. Under Authentication: slå Windows Authentication til og Anonymous Authentication fra.
  6. Ret appsettings.json: SQLInsight:Repository:ConnectionString (Integrated Security, så app pool-identiteten bruges), eventuelt SQLInsight:Web:AllowedGroups, fx ["DOMÆNE\\SQL-Brugere"], og SQLInsight:Web:AdminGroups, fx ["DOMÆNE\\SQL-Admins"] (må ændre, hvilke servere og databaser der overvåges).

5b. Web-UI'et som selvstændig Windows-tjeneste (uden IIS)

Web-UI'et har sin egen webserver (Kestrel) og kan køre som tjeneste på en server uden IIS.

dotnet publish src/SQLInsight.Web -c Release -r win-x64 --self-contained false -o "C:\Program Files\SQLInsight\Web"

Tilføj et HTTPS-endpoint i appsettings.json med et certifikat fra maskinens certifikatlager:

"Kestrel": {
  "Endpoints": {
    "Https": {
      "Url": "https://*:8443",
      "Certificate": { "Subject": "sqlinsight.domæne.local", "Store": "My", "Location": "LocalMachine" }
    }
  }
}

Opret tjenesten og en SPN, så Kerberos-login virker:

sc.exe create "SQLInsight Web" binPath= "\"C:\Program Files\SQLInsight\Web\SQLInsight.Web.exe\"" obj= "DOMÆNE\svc-sqlinsight-web$" start= delayed-auto
setspn -S HTTP/sqlinsight.domæne.local DOMÆNE\svc-sqlinsight-web$
sc.exe start "SQLInsight Web"

Åbn porten i Windows Firewall for de brugere, der skal se UI'et.

Notifikationer

Agenten kan give besked om nye og løste fund, og når en instans ikke kan nås. Det sættes op under SQLInsight:Notifications i agentens appsettings.json:

Kanal Opsætning
E-mail Email:Enabled, Host, Port, Security (StartTls, SslOnConnect eller None), From, To, eventuelt UserName/Password
Microsoft Teams Opret i Teams et workflow "Post to a channel when a webhook request is received", og sæt URL'en i Teams:WebhookUrl
Webhook Webhook:Url og eventuelt Secret. Så har hver request headeren X-SQLInsight-Signature: sha256=<HMAC-SHA256 af body>

Hver kanal har sin egen MinSeverity (standard: High til e-mail og Teams, Medium til webhook). En instans, der ikke kan nås, meldes altid. Sæt WebUrl til adressen på SQLInsight Web, så beskederne linker direkte til fundet. MaxMessagesPerHour begrænser antallet af beskeder pr. kanal.

Azure SQL Managed Instance

Tilføj instansen som en almindelig instans. Log ind med Microsoft Entra ID:

{ "Name": "mi-prod", "Server": "mi-prod.abc123.database.windows.net", "Authentication": "EntraManagedIdentity" }

Mulighederne er EntraManagedIdentity (agentens managed identity; UserName kan være client id for en user-assigned identity), EntraServicePrincipal (UserName = client id, Password = secret, TenantId) og EntraDefault. Opret login'et med CREATE LOGIN [navn] FROM EXTERNAL PROVIDER, og kør derefter grant-least-privilege.sql.

På Managed Instance håndterer Azure backup, patching, filer, tempdb og hukommelse. De regler vises derfor som "Håndteres af Azure" og ikke som fund. MI-understøttelsen er bygget ud fra Microsofts dokumentation, men er endnu ikke testet mod en rigtig Managed Instance.

Linux (systemd)

Begge programmer understøtter systemd (Type=notify). Windows-login på Linux kræver en Kerberos keytab; se Microsofts dokumentation for Negotiate-autentificering på Linux.

Opdatering

Se opdatering.md: regelpakken opdateres automatisk, og nye versioner kan installeres med SQLInsight.Agent update apply eller automatisk af en planlagt opgave. Manuelt: stop tjenesten (eller app poolen), kopiér de nye filer ind uden at overskrive appsettings.json, og start igen. Agenten opgraderer repository-skemaet selv.

Menuen i webbrugerfladen

Menuen er delt i grupper, der kan foldes ud og sammen: Overvågning (med Servere og databaser, se servere-og-databaser.md), Servere (Windows-servere og Syntetiske tjek, se windows-servere.md og syntetiske-tjek.md), Analyse, Konfiguration og sikkerhed, Rapporter, Dynamics AX (AX-databaser, Batchjob, Nummerserier, RecId og AX-brugere bag blokering; kun når en database er genkendt som AX, se dynamics-ax.md), Support, System og Community. Gruppen med den side, man står på, er åben. Sider, der findes pr. instans (fx Analyse af tidsrum og Konfiguration), åbner et valg af instans; er der kun én instans, går de direkte til den. På en smal skærm (mobil) folder hele menuen sig sammen bag knappen Menu. Alt virker uden JavaScript.