- TSQL 96.5%
- PowerShell 2.5%
- HTML 0.7%
| Config | ||
| docs | ||
| ExternalTools | ||
| Modules | ||
| SqlScripts | ||
| tests | ||
| .gitignore | ||
| CHANGELOG.md | ||
| Invoke-SqlMonitorCheckServer.ps1 | ||
| README.md | ||
| SqlAgentJob-CheckServer.template.sql | ||
| Start-SqlMonitorConfigManager.ps1 | ||
| Start-SqlScriptConsole.ps1 | ||
SQLServerMonitor
SQLServerMonitor es una plataforma PowerShell para observabilidad DBA, ejecucion de checks y reporteria sobre SQL Server, Azure SQL Database y Azure SQL Managed Instance.
La entrega 3.2.0 consolida el core del proyecto alrededor de un motor unico de ejecucion, contrato normalizado de resultados, historico basico por corrida, baseline/delta inicial y una base real de checks read-only para operacion DBA.
Que trae esta version
- engine unico para
ValidateConfigyRunChecks - configuracion separada y versionada:
sqlmonitor.local.jsonservers.local.jsonmail.local.jsonchecks.manifest.json
- contrato comun de resultados para JSON, HTML, auditoria y notificacion
- reporte HTML consolidado por run y por target
- auditoria JSON Lines y resumen historico por corrida
- comparacion baseline/delta contra la corrida anterior del mismo perfil
- filtros de compatibilidad por plataforma y version
- checks DBA read-only iniciales:
BackupFreshnessJobFailuresBlockingSnapshotTempDbUsageTopWaits
Estructura
Config/ Configuracion principal, servidores, correo y manifest
Modules/ Core PowerShell de la plataforma
SqlScripts/ Biblioteca DBA organizada por area
docs/ Arquitectura, configuracion y operacion
tests/ Pruebas Pester
Logs/ Auditoria JSON Lines
Output/ JSON, resumen historico y reportes HTML
ExternalTools/ Espacio reservado para integraciones futuras
Flujo de ejecucion
Invoke-SqlMonitorcarga y valida configuracion.- Resuelve targets y checks del perfil.
- Detecta plataforma/version del target.
- Filtra checks incompatibles.
- Ejecuta el provider SQL y normaliza resultados.
- Calcula baseline/delta contra la corrida anterior.
- Genera JSON, resumen historico, auditoria JSONL y HTML consolidado.
- Envia correo si corresponde.
Contrato de resultados
Cada check devuelve un objeto normalizado con estos campos:
RunId
Profile
CheckId
CheckName
ScriptName
Area
Target
Platform
Status
Severity
StartedAt
FinishedAt
DurationMs
Summary
Findings[]
Metrics[]
Errors[]
Output
RecommendedActions[]
Delta
Source
Severidades:
InfoWarningCriticalTechnicalFailure
Estados:
PassedWarningCriticalTechnicalFailureSkipped
Configuracion
Archivo principal
.\Config\sqlmonitor.local.json
Archivos separados
Servers.Path->servers.local.jsonMail.Path->mail.local.jsonChecks.ManifestPath->checks.manifest.json
Todos los archivos versionados usan SchemaVersion = "2.0".
Validar configuracion
Import-Module .\Modules\SqlServerMonitor.psd1 -Force
Invoke-SqlMonitor -ConfigPath .\Config\sqlmonitor.local.json -Action ValidateConfig
Ejecucion
Ejecutar perfil CoreHealth
Import-Module .\Modules\SqlServerMonitor.psd1 -Force
Invoke-SqlMonitor -ConfigPath .\Config\sqlmonitor.local.json -Action RunChecks -Profile CoreHealth
Consola interactiva
.\Start-SqlScriptConsole.ps1 -ConfigPath .\Config\sqlmonitor.local.json
SQL Server Agent
.\Invoke-SqlMonitorCheckServer.ps1 -ConfigPath .\Config\sqlmonitor.local.json -SendMail -FailOnScriptError
Todo .sql agregado a SqlScripts\CheckServer entra automaticamente al flujo del perfil CheckServer.
Output y auditoria
Por defecto la plataforma genera:
Output\Runs\*.jsonOutput\History\*.summary.jsonOutput\Reports\*.htmlLogs\Audit\sqlmonitor.audit.jsonl
El baseline/delta compara cada Target + CheckId contra la corrida anterior del mismo perfil.
Correo
La configuracion SMTP vive en mail.local.json.
Comportamiento actual:
- subject segun severidad maxima del run
- opcion
SendOnlyOnAlert - HTML consolidado en el cuerpo
- adjuntos: reporte HTML y JSON del run
- errores SMTP devueltos al resultado de mail
Extensibilidad
El core ya queda separado para crecer mediante:
providersmanifestsadapterscontracts
Eso deja el camino preparado para integrar checks externos o repositorios especializados como SQL.Check sin mezclar el core con logica externa.
Pruebas
Invoke-Pester -Path .\tests
Cobertura inicial:
- config loading
- contract de resultados
- compatibility filtering
- render HTML