PostgreSQL performance dashboard for analyzing database cluster health, identifying problems, and providing optimization recommendations.
!License
!Go
!Vue
!PostgreSQL
| | |
|---|---|
| Cluster discovery | Static list in dasha.yaml, Patroni clusters from etcd v3 or Consul (members, roles, standby cluster links), Yandex Managed Service for PostgreSQL; databases discovered from the cluster itself, no restart needed — Patroni · Yandex MDB · databases |
| Log search | PostgreSQL and pooler logs from VictoriaLogs, OpenSearch / Elasticsearch or the Yandex MDB API: filters, deduplication by template, histogram, presets — setup · VictoriaLogs · OpenSearch |
| Plans from logs | auto_explain plans grouped by statement and shape, plan regressions between windows, plan evidence for index recommendations — Log insights |
| Health Score | 0–100 score with prioritized recommendations; point-in-time SQL out of the box, or trend and seasonal baseline from Prometheus / VictoriaMetrics (pgSCV, Yandex MDB, pgbouncer, host metrics) — model · metrics mode |
| Index advisor | Missing btree indexes proposed from pg_stat_statements parsed with the PostgreSQL parser, with a ready CREATE INDEX — setup |
| Snapshots | pg_stat_statements, lock and hot-object snapshots, comparison, auto-snapshots on activity spikes and failovers — Snapshots |
| Schema checks | 17 structural checks with fixes, from sequence exhaustion to tables without a primary key — setup |
| Access control | none / static tokens / OIDC (Keycloak, Google, …), admin and viewer roles, personal access tokens — Authentication |
| AI assistants | dasha-mcp: read-only MCP server, 34 tools for fleet diagnostics — MCP connector |
| Deployment | Docker Compose, Docker Hub images, Helm chart — Deployment |
PostgreSQL 14–18 and Postgres Pro (pgpro_stats is picked up automatically).
Features
Query Analysis · Index Analysis · Table Analysis · Foreign Key Analysis · Maintenance & Vacuum · Connections & Locks · I/O · Progress Tracking · Settings Analysis · Schema Checks · Health Score · Log Search · Log Insights · Authentication & Authorization · Infrastructure · User Preferences · Auto-snapshots · MCP connector
The full list with details: doc/en/features.md.
Quick Start
[!TIP]
Demo lab
> make demo-lab # http://localhost:3000 >> git clone --depth 1 https://github.com/dbulashev/dasha.git && cd dasha
A PostgreSQL 18 cluster with a replica, a load generator and the MCP server. No login needed.
> Full demo lab
>> make demo-lab-full
Adds two more PostgreSQL clusters, an OIDC provider, metrics and log search.
Log in through Keycloak:admin/admin.
> More on the demo labs: doc/en/development.md.
For your own clusters, create dasha.yaml (searched in ., $HOME/.dasha/, /etc/dasha/):
clusters:
- name: production
username: monitoring_user
password: secret
port: 5432
databases:
- myapp
hosts:
- pg-master.example.com
- pg-replica-1.example.com
The role Dasha connects as needs CONNECT on every monitored database; with pg_monitor it sees the statements of the other roles too:
CREATE ROLE monitoring_user LOGIN PASSWORD 'secret';
GRANT pg_monitor TO monitoring_user;
GRANT CONNECT ON DATABASE myapp TO monitoring_user;
Without pg_monitor the query report and the Top 10 panels hold the statements of that role alone.
Run with the pre-built images:
cd deploy/compose
Edit dasha.yaml with your cluster settings
docker compose up -d
Open http://localhost:3000
Everything else — service discovery, log search, schema checks, authentication, snapshot storage — is optional and documented in Configuration.
Documentation
| Document | Contents |
|---|---|
| Features | Full capability list by domain |
| Architecture | Components, data flows, technology stack |
| Configuration | dasha.yaml, service discovery, log search, schema checks |
| Authentication | none / token / OIDC modes, RBAC, personal access tokens |
| Snapshots | Snapshot storage and the auto-snapshot daemon |
| Deployment | Docker Compose, images, Helm chart |
| MCP connector | dasha-mcp — read-only diagnostics for AI assistants |
| Development | Local run, demo lab, project layout, code generation, CI/CD |
| Health Score model | Formula, weights, all rules and thresholds |
Russian translation: doc/ru/ — except the Health Score model, which keeps its own root-level file, README-health-score.ru.md.
Changelog
See CHANGELOG.md for release notes.
Authors
Contributors
Third-party components
Many of the index, table, maintenance, connection, replication and running/blocked query checks are derived from pghero (MIT, © 2014-2026 Andrew Kane, 2008-2014 Heroku). Licence text: backend/internal/query/LICENSE-pghero; per-template attribution: backend/internal/query/README.md.
The SQL behind Schema Checks is derived from db_verifier
(MIT, © 2024 Nikonov — licence text in the project's LICENSE file), a set of structural checks for
PostgreSQL. Per-template attribution: backend/internal/query/README.md.
The lock tree query comes from postgres_dba
(BSD 3-Clause, © 2017 Nikolay Samokhvalov) — sql/l2_lock_trees.sql, adapted to run as a single
statement without psql version branches. Licence text:
backend/internal/query/LICENSE-postgres_dba.
Index bloat estimation, taken from pghero, descends from pgsql-bloat-estimation
(BSD-style — the PostgreSQL licence, © 2015-2019 Jehan-Guillaume (ioguix) de Rorthais; licence text in the
project's LICENSE file).
Table bloat estimation comes from pgx_scripts
(BSD 3-Clause, © 2014 PostgreSQL Experts, Inc.) — bloat/table_bloat_check.sql. Licence text:
backend/internal/query/LICENSE-pgx_scripts.