Skip to main content

PostgreSQL

Health CheckScraper

Mission Control integrates with PostgreSQL to monitor your database infrastructure.


Health Check

Use cases:

  • Verify database connectivity and authentication
  • Execute SQL queries and validate results against expected values
  • Monitor replication lag, connection counts, and database health
  • Alert when queries return unexpected results or databases become unavailable

Connection Check

Test database connectivity and run validation queries.

postgres-connection-check.yaml
apiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: postgres-connection
spec:
interval: 30
postgres:
- name: production-db
url: postgres://user:password@postgres:5432/mydb?sslmode=require
query: SELECT 1
Query Validation
postgres-query-check.yaml
apiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: postgres-replication
spec:
interval: 60
postgres:
- name: replication-lag
connection: connection://postgres/production
query: |
SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::INT
AS replication_lag_seconds
test:
expr: results[0].replication_lag_seconds < 30
Using Connection References
postgres-connection-ref.yaml
apiVersion: canaries.flanksource.com/v1
kind: Canary
metadata:
name: postgres-check
spec:
interval: 30
postgres:
- name: user-count
connection: connection://postgres/analytics
query: SELECT COUNT(*) as count FROM users WHERE active = true
test:
expr: results[0].count > 0

Scraper

Use cases:

  • Scrape database metadata and configurations into the catalog
  • Track database settings and schema changes
  • Monitor database users and permissions
postgres-scraper.yaml
apiVersion: configs.flanksource.com/v1
kind: ScrapeConfig
metadata:
name: postgres-config
spec:
schedule: "@every 1h"
sql:
- connection: connection://postgres/production
driver: postgres
query: |
SELECT datname as name,
pg_database_size(datname) as size_bytes,
datconnlimit as connection_limit
FROM pg_database
WHERE datistemplate = false
items:
- type: Postgres::Database
id: .name
name: .name

Next Steps