Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
dbulashev/dasha: PostgreSQL perfomance dashboard

dbulashev/dasha: PostgreSQL perfomance dashboard

14 hours ago

PostgreSQL performance dashboard for analyzing database cluster health, identifying problems, and providing optimization recommendations.

Russian / Русская версия

CI</a> Docker Backend</a> Docker Frontend</a> !License !Go !Vue !PostgreSQL

Dasha — Home, Health Score, Query Stats, Query Report, Locks

| | | |---|---| | 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
> git clone --depth 1 https://github.com/dbulashev/dasha.git && cd dasha
> make demo-lab # http://localhost:3000 >
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.

License

GNU General Public License v3.0

Chat with me