Skip to content

Update main branch#59

Merged
imajaydwivedi merged 106 commits into
mainfrom
dev
Apr 19, 2026
Merged

Update main branch#59
imajaydwivedi merged 106 commits into
mainfrom
dev

Conversation

@imajaydwivedi

Copy link
Copy Markdown
Owner

Update main branch

imajaydwivedi and others added 29 commits March 27, 2026 14:24
- Add mkdocs.yml (Material theme, Mermaid, search, git-revision, edit URI)
- Add .github/workflows/docs.yml to auto-deploy to GitHub Pages on push to dev
- Add docs/ with Architecture, Deployment, Dashboards, Jobs, Alerting,
  Prometheus/sql_exporter, AI Agent and Support sections
- Jobs catalog generated from DDLs/SCH-Job-*.sql (46 jobs)
- Deployment parameters and 59 install steps extracted from Install-SQLMonitor.ps1
- Dashboard catalog cross-referenced with live Grafana inventory
- Rewrite README.md (400 -> 104 lines) as a concise landing page pointing to
  https://imajaydwivedi.github.io/SQLMonitor/
Add three new collectors and register them in sql_exporter.yml under
two new jobs (mssql_msdb, mssql_xevent):

- mssql_sqlagent_jobs: per-job enabled / last_run_outcome /
  last_run_duration_seconds / last_run_end_time_utc /
  next_run_time_utc / is_running / step_failures_last_24h, sourced
  from msdb.dbo.sysjobs/sysjobhistory/sysjobactivity/sysjobschedules.

- mssql_backup_history: per-(database, backup_type) last_time_utc /
  last_duration_seconds / last_size_bytes / last_compressed_size_bytes
  / age_seconds / count_last_24h, sourced from msdb.dbo.backupset.

- mssql_xevent: aggregated events_count / cpu_time_ms_sum /
  duration_seconds_sum / logical_reads_sum / physical_reads_sum /
  writes_sum per (event_name, database_name, result, client_app_name)
  over the most recent 5 minutes. Caps at TOP 500 to bound cardinality.
  Guarded with an existence check on DBA.dbo.xevent_metrics so the
  collector is a no-op on instances that don't run the XEvent
  collector proc.
Port 12 SQLMonitor Grafana dashboards to Prometheus under
sql_exporter/Prometheus-Dashboards/. Each dashboard is generated from a
small Python spec; every spec produces a *.json that imports directly
into Grafana (schemaVersion 42, __inputs-bound DS_PROMETHEUS).

Dashboards (UID / data panels / text-link panels):

  prom_core_metrics_trend             9 / 0
  prom_wait_stats                     4 / 0
  prom_disk_space                     5 / 0
  prom_ag_health_state                3 / 0
  prom_sql_agent_jobs                 6 / 0
  prom_backup_history                 6 / 0
  prom_xevent_trend                   4 / 0
  prom_database_file_io_stats        12 / 0
  prom_dba_inventory                  6 / 8
  prom_monitoring_live_all_servers   15 / 6
  prom_monitoring_live_distributed   52 / 6
  prom_monitoring_perfmon_quest      51 / 4

Helper library (_lib/prom_dashboard.py, _lib/build.py):
  - Panel, Target, query_var, custom_var, constant_var dataclasses.
  - row() and legacy_link_panel() helpers.
  - build_dashboard(): per-panel-type options, thresholds, transforms.
  - write_dashboard(): JSON serialization.

Specs (_specs/*.py) use high-fidelity PromQL patterns:
  - increase(metric[$__range]) for selective-duration deltas.
  - @ end() offset $__range for prior-window comparison tables.
  - quantile_over_time($percentile_q, (expr)[$trend_window:]) for
    percentile trends.
  - topk($top_n, sum by (…) (…)) for bounded series rendering.

Panels that require the SQLMonitor inventory DB (alert history,
AG-vs-nonAG backup split, LAMA config-change deltas, dm_os_memory_clerks
snapshot, tempdb/log_space cache tables, sql_server_patching) use
legacy_link_panel(...) to markdown-link back to the SQL-backed
dashboard, keeping every source section accounted for.

Developer tooling (_tools/):
  - inspect_panels.py: source dashboard panel inventory.
  - validate.py: structural JSON + target/expr sanity check; all 12
    generated dashboards validate clean.
- docs/prometheus.md: add rows for mssql_sqlagent_jobs, mssql_backup_history,
  mssql_xevent to the collectors table; add a 'Prometheus-backed dashboard
  pack' section with the 12 Phase 1 dashboards and regeneration commands.

- sql_exporter/README-sql_exporter.md: add a 'Collectors' table describing
  every mssql_*.collector.yml file, its job binding, scrape interval and
  the metric prefix it publishes.
…phase-1

feat: Prometheus dashboards — Phase 1 (12 dashboards + 3 new collectors)
@imajaydwivedi imajaydwivedi merged commit 8af0e2d into main Apr 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant