Skip to main content
View rawEdit

Architecture

Deep-dive into PostgresAI monitoring system components and data flow.

System overviewโ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PostgresAI Monitoring โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚ PostgreSQL โ”‚ โ”‚
โ”‚ โ”‚ Cluster A โ”‚ โ”‚ Cluster B โ”‚ โ”‚ Cluster C โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ pgwatch โ”‚ โ”‚
โ”‚ โ”‚ (collector)โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ Prometheus format โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚VictoriaMetricsโ”‚ โ”‚
โ”‚ โ”‚ (storage) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ PromQL โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Grafana โ”‚ โ”‚
โ”‚ โ”‚(visualization)โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Componentsโ€‹

pgwatch โ€” Metrics collectorโ€‹

Purpose: Collect PostgreSQL metrics and expose in Prometheus format

Key functions:

  • Execute SQL queries against PostgreSQL
  • Transform results to Prometheus metrics
  • Expose the /pgwatch metrics endpoint on :9091 (Prometheus sink)

Configuration:

SettingDefaultDescription
Scrape interval30sVictoriaMetrics scrapes the pgwatch-prometheus job every 30s (the 15s global default is overridden for this job; the separate query-info job โ€” metrics_path: /query_info_metrics โ€” runs every 300s)
Collection intervalper-metricEach metric group has its own interval in metrics.yml (most 30s; pg_stat_activity/wait_events 15s)

Collected data sources:

ViewMetrics
pg_stat_statementsQuery performance
pg_stat_activitySession state
wait_events (from pg_stat_activity)Wait event sampling
pg_stat_all_tables / table_statsTable access patterns
pg_stat_all_indexesIndex usage
db_stats (from pg_stat_database)Database-level stats
bgwriterCheckpoint behavior

VictoriaMetrics โ€” time-series databaseโ€‹

Purpose: Store and query metrics

Key functions:

  • Ingest metrics from pgwatch
  • Compress and store time-series data
  • Execute PromQL queries

Performance characteristics:

AspectVictoriaMetricsPrometheus
Compression10x betterBaseline
Query speed2-5x fasterBaseline
Memory usage3-5x lowerBaseline
High availabilityBuilt-in clusteringFederation

Storage model:

In this deployment VictoriaMetrics is started with -storageDataPath=/victoria-metrics-data, and the victoria_metrics_data Docker volume is mounted at /victoria-metrics-data. The on-disk layout under that path follows VictoriaMetrics' standard structure (recent vs. historical data parts, a label index, and optional snapshots).

Grafana โ€” Visualizationโ€‹

Purpose: Dashboard and alerting UI

Key functions:

  • Render time-series charts
  • Dashboard templating with variables
  • Unified alerting

Dashboard structure:

PostgresAI dashboards:
โ”œโ”€โ”€ 01. Node overview (cluster-level)
โ”œโ”€โ”€ 02. Query analysis (top-N queries)
โ”œโ”€โ”€ 03. Single query (query deep-dive)
โ”œโ”€โ”€ 04. Wait events (session analysis)
โ”œโ”€โ”€ 05. Backups (WAL archiving)
โ”œโ”€โ”€ 06. Replication (lag monitoring)
โ”œโ”€โ”€ 07. Autovacuum (vacuum status)
โ”œโ”€โ”€ 08. Table stats (table analysis)
โ”œโ”€โ”€ 09. Single table (table deep-dive)
โ”œโ”€โ”€ 10. Index health (index analysis)
โ”œโ”€โ”€ 11. Single index (index deep-dive)
โ”œโ”€โ”€ 12. SLRU (cache stats)
โ”œโ”€โ”€ 13. Lock contention (lock waits)
โ”œโ”€โ”€ 14. I/O statistics (pg_stat_io, PG16+)
โ””โ”€โ”€ Self-monitoring (stack health)

Data flowโ€‹

Collection flowโ€‹

1. pgwatch connects to PostgreSQL
โ””โ”€โ”€ Uses monitoring user credentials
โ””โ”€โ”€ Executes metric collection queries

2. Query results transformed to metrics
โ””โ”€โ”€ Column values โ†’ metric values
โ””โ”€โ”€ Column names โ†’ labels

3. Metrics exposed on the `/pgwatch` endpoint (`:9091`)
โ””โ”€โ”€ Prometheus exposition format
โ””โ”€โ”€ Timestamp attached

4. VictoriaMetrics scrapes the pgwatch-prometheus sink
โ””โ”€โ”€ HTTP GET pgwatch-prometheus:9091/pgwatch
โ””โ”€โ”€ `pgwatch-prometheus` job scrape_interval: 30s (scrape_timeout 25s)

5. Metrics stored in VictoriaMetrics
โ””โ”€โ”€ Compressed time-series storage
โ””โ”€โ”€ Indexed by labels

Query flowโ€‹

1. User opens Grafana dashboard
โ””โ”€โ”€ Dashboard loads panel queries

2. Grafana sends PromQL to VictoriaMetrics
โ””โ”€โ”€ Variables substituted
โ””โ”€โ”€ Time range applied

3. VictoriaMetrics executes query
โ””โ”€โ”€ Index lookup by labels
โ””โ”€โ”€ Data retrieval from storage
โ””โ”€โ”€ Aggregation/calculation

4. Results returned to Grafana
โ””โ”€โ”€ Time series data
โ””โ”€โ”€ Rendered as charts

Metric namingโ€‹

Conventionโ€‹

pgwatch exports series as pgwatch_<metric-group>_<column>. The Prometheus metric type is driven by each metric group's gauges: list in config/pgwatch-prometheus/metrics.yml: a column is emitted as a Prometheus gauge only if its group lists it (or uses gauges: ['*']); otherwise it is emitted as a counter. Note this is the exported type, not the PostgreSQL semantics โ€” the db_stats and pg_stat_statements groups use gauges: ['*'] / explicit gauge lists, so their cumulative columns (e.g. xact_commit, exec_time_total) are exported as gauges even though they only ever increase. Cumulative columns in the pg_stat_database family are also not _total-suffixed.

pgwatch_<metric-group>_<column>

Examples (Type = the exporter's emitted Prometheus type):
pgwatch_db_stats_xact_commit # Gauge (transactions committed; db_stats uses gauges: ['*'])
pgwatch_db_stats_numbackends # Gauge (current backends)
pgwatch_pg_stat_statements_exec_time_total # Gauge (total exec time, ms; listed in pg_stat_statements gauges)

Labelsโ€‹

The cluster label is cluster (set from custom_tags.cluster). cluster_name is only the Grafana template variable; dashboard filters select with cluster="$cluster_name".

pgwatch_<metric-group>_<column>{
cluster="production",
node_name="primary",
datname="myapp",
schemaname="public",
relname="users"
}

Storage requirementsโ€‹

Calculationโ€‹

Storage = metrics_per_second ร— bytes_per_sample ร— retention_seconds

Typical values:
- metrics_per_second: 50-200 per database
- bytes_per_sample: 3-5 bytes (VictoriaMetrics compressed)
- retention: 1,209,600 seconds (14 days)

Example: 5 databases, 14-day retention
= 5 ร— 100 ร— 1.5 ร— 1,209,600
= 907,200,000 bytes โ‰ˆ 907 MB (โ‰ˆ 865 MiB)

Scaling factorsโ€‹

FactorImpact
More databasesLinear increase
More tables/indexesSublinear (only active tracked)
Longer retentionLinear increase
Shorter scrape intervalLinear increase

High availabilityโ€‹

HA architectureโ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Load Balancer โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
โ”‚pgwatch-1โ”‚ โ”‚pgwatch-2โ”‚ โ”‚pgwatch-3โ”‚
โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ remote_write
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ VictoriaMetrics Cluster โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚vmstorage1โ”‚ โ”‚vmstorage2โ”‚ โ”‚vmstorage3โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
โ”‚ Grafana โ”‚
โ”‚ (HA) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Failure modesโ€‹

Component failureImpactRecovery
Single pgwatchPartial data lossAutomatic failover
Single vmstorageNo data loss (replication)Automatic
All pgwatchCollection stopsManual restart
All vmstorageQuery unavailableRestore from backup
GrafanaUI unavailableLoad balancer failover

Data privacy โ€” metadata onlyโ€‹

PostgresAI monitoring collects only database metadata โ€” no actual data or query parameters are ever accessed.

Collected data typesโ€‹

Data typeExampleStorage location
Database statisticsConnections, transactions, cache hit ratioPrometheus (VictoriaMetrics)
Normalized queriesselect * from users where id = $1PostgreSQL sink
Wait eventsCPU, IO, Lock, LWLockPrometheus (VictoriaMetrics)
Table statisticsRow count, dead tuples, last vacuumPrometheus (VictoriaMetrics)
Index statisticsSize, scans, tuples readPrometheus (VictoriaMetrics)
Column statisticsFrom pg_statistic for bloat estimatesPrometheus (VictoriaMetrics)

NOT collectedโ€‹

  • Actual table data (row contents)
  • Query parameter values ($1, $2 remain as placeholders)
  • Application secrets or credentials
  • Connection passwords

Metric definitionsโ€‹

Review exactly what is collected:

Verify monitoring database role and its permissionsโ€‹

# See exact SQL for creating monitoring role
npx postgresai@latest prepare-db --print-sql

Security architectureโ€‹

Networkโ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ DMZ / Public โ”‚
โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Grafana โ”‚ โ† HTTPS (443) โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Internal Network โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ VictoriaMetrics (sink-prometheus) โ”‚ โ”‚
โ”‚ โ”‚ (port 9090 internal, host 59090) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ scrapes pgwatch-prometheus:9091/pgwatch โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ pgwatch (pgwatch-postgres, pgwatch-prometheus)โ”‚ โ”‚
โ”‚ โ”‚ metrics scraped on pgwatch-prometheus:9091 โ”‚ โ”‚
โ”‚ โ”‚ (web/health ports 8080/8089 are internal) โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Database Network โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚PostgreSQLโ”‚ โ”‚PostgreSQLโ”‚ โ”‚PostgreSQLโ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Credentialsโ€‹

ComponentCredential typeStorage
PostgreSQLPasswordEnvironment variable / secret
VictoriaMetricsBasic authConfig file
GrafanaOAuth/LDAPDatabase

Performance characteristicsโ€‹

Collection overheadโ€‹

Frequencies below are the full preset intervals from config/pgwatch-prometheus/metrics.yml (see the per-metric note above):

Metric typeQuery costFrequency
pg_stat_database (db_stats)Low30s
pg_stat_statementsMedium30s
pg_stat_all_tables / table_statsMedium30s
Bloat estimation (pg_table_bloat, pg_btree_bloat)High7200s (2h)

Query performanceโ€‹

Query typeTypical latency
Instant query10-100ms
Range query (1h)50-200ms
Range query (24h)200-500ms
Range query (7d)500ms-2s

Resource usageโ€‹

ComponentCPUMemoryDisk I/O
pgwatchLow256 MiBMinimal
VictoriaMetricsMedium2 GiB+Medium
GrafanaLow512 MiBLow