Monitor a Postgres App

App Status

You can use fly status to see a list of VMs and an overview of their status. The output for each VM includes its role within the cluster.

$ fly status --app test-pg
ID              STATE   ROLE    REGION  HEALTH CHECKS       IMAGE                         CREATED               UPDATED
e784079b449483  started leader  iad     3 total, 3 passing  flyio/postgres:14.4 (v0.0.26) 2022-09-26T16:58:50Z  2022-09-26T16:59:04Z
1781957c525989  started replica iad     3 total, 3 passing  flyio/postgres:14.4 (v0.0.26) 2022-09-26T17:05:25Z  2022-09-26T17:05:38Z

To view the status of an individual Machine in more detail:

$ fly machine status e784079b449483 --app test-pg
Machine ID: e784079b449483
Instance ID: 01GDXBSCZ0TSKA40K478CQ0P26
State: started

VM
  ID            = e784079b449483
  Instance ID   = 01GDXBSCZ0TSKA40K478CQ0P26
  State         = started
  Image         = flyio/postgres:14.4 (v0.0.26)
  Name          = nameless-star-9637
  Private IP    = fdaa:0:2e26:a7b:775b:4009:bf60:2
  Region        = iad
  Process Group =
  Memory        = 256
  CPUs          = 1
  Created       = 2022-09-26T16:58:50Z
  Updated       = 2022-09-26T16:59:04Z
  Command       =
  Volume        = vol_w1q85vgg998vzdxe

Event Logs
STATE   EVENT   SOURCE  TIMESTAMP                     INFO
started start   flyd    2022-09-26T11:59:04.889-05:00
created launch  user    2022-09-26T11:58:50.789-05:00

Checks

To view a list of health checks for a Fly Postgres app, run:

fly checks list -a test-pg
Health Checks for shaun-pg-mach-test
  NAME | STATUS  | MACHINE        | LAST UPDATED | OUTPUT
-------*---------*----------------*--------------*-----------------------------------------------------------------------------
  pg   | passing | 1781957c525989 | 3m49s ago    | 200 OK Output: "[✓]
       |         |                |              |
       |         |                |              | transactions: readonly (569.43µs)\n[✓]
       |         |                |              |
       |         |                |              | replication: syncing from fdaa:0:2e26:a7b:775b:4009:bf60:2 (144.39µs)\n[✓]
       |         |                |              |
       |         |                |              | connections: 6 used, 3 reserved, 300 max (6.3ms)"[✓]
       |         |                |              |
       |         |                |              |
  vm   | passing | 1781957c525989 | 3m21s ago    | 200 OK Output: "[✓]
       |         |                |              |
       |         |                |              | checkDisk: 860.8 MB (87.1%) free space on /data/ (520.24µs)\n[✓]
       |         |                |              |
       |         |                |              | checkLoad: load averages: 0.00 0.00 0.00 (350.76µs)\n[✓]
       |         |                |              |
       |         |                |              | memory: system spent 0s of the last 60s waiting on memory (54.97µs)\n[✓]
       |         |                |              |
       |         |                |              | cpu: system spent 930ms of the last 60s waiting on cpu (23.89µs)\n[✓]
       |         |                |              |
       |         |                |              | io: system spent 414ms of the last 60s waiting on io (20.02µs)"[✓]
       |         |                |              |
       |         |                |              |
  role | passing | 1781957c525989 | 3m53s ago    | 200 OK Output: "replica"[✓]
       |         |                |              |
       |         |                |              |
  pg   | passing | e784079b449483 | 10m9s ago    | 200 OK Output: "[✓]
       |         |                |              |
       |         |                |              | transactions: read/write (157.2µs)\n[✓]
       |         |                |              |
       |         |                |              | connections: 9 used, 3 reserved, 300 max (3.7ms)"[✓]
       |         |                |              |
       |         |                |              |
  vm   | passing | e784079b449483 | 10m49s ago   | 200 OK Output: "[✓]
       |         |                |              |
       |         |                |              | checkDisk: 918.45 MB (93.0%) free space on /data/ (48.94µs)\n[✓]
       |         |                |              |
       |         |                |              | checkLoad: load averages: 0.00 0.00 0.00 (91.52µs)\n[✓]
       |         |                |              |
       |         |                |              | memory: system spent 0s of the last 60s waiting on memory (38.75µs)\n[✓]
       |         |                |              |
       |         |                |              | cpu: system spent 114ms of the last 60s waiting on cpu (16.94µs)\n[✓]
       |         |                |              |
       |         |                |              | io: system spent 210ms of the last 60s waiting on io (14.93µs)"[✓]
       |         |                |              |
       |         |                |              |
  role | passing | e784079b449483 | 10m19s ago   | 200 OK Output: "leader"[✓]
       |         |                |              |
       |         |                |              |

Logs

Fly Postgres apps run several processes inside each VM, including Postgres, Stolon keeper, Stolon sentinel, HAProxy, and postgres_export. Each of those processes redirect STDOUT and STDERR to logs which you can view with fly logs.

Metrics

Fly Postgres apps export metrics to Prometheus which can be seen in the Metrics UI or queried from Grafana.

The available metrics are

pg_stat_activity_count
pg_stat_activity_max_tx_duration
pg_stat_archiver_archived_count
pg_stat_archiver_failed_count
pg_stat_bgwriter_buffers_alloc
pg_stat_bgwriter_buffers_backend_fsync
pg_stat_bgwriter_buffers_backend
pg_stat_bgwriter_buffers_checkpoint
pg_stat_bgwriter_buffers_clean
pg_stat_bgwriter_checkpoint_sync_time
pg_stat_bgwriter_checkpoint_write_time
pg_stat_bgwriter_checkpoints_req
pg_stat_bgwriter_checkpoints_timed
pg_stat_bgwriter_maxwritten_clean
pg_stat_bgwriter_stats_reset
pg_stat_database_blk_read_time
pg_stat_database_blk_write_time
pg_stat_database_blks_hit
pg_stat_database_blks_read
pg_stat_database_conflicts_confl_bufferpin
pg_stat_database_conflicts_confl_deadlock
pg_stat_database_conflicts_confl_lock
pg_stat_database_conflicts_confl_snapshot
pg_stat_database_conflicts_confl_tablespace
pg_stat_database_conflicts
pg_stat_database_deadlocks
pg_stat_database_numbackends
pg_stat_database_stats_reset
pg_stat_database_tup_deleted
pg_stat_database_tup_fetched
pg_stat_database_tup_inserted
pg_stat_database_tup_returned
pg_stat_database_tup_updated
pg_stat_database_xact_commit
pg_stat_database_xact_rollback
pg_stat_replication_pg_current_wal_lsn_bytes
pg_stat_replication_pg_wal_lsn_diff
pg_stat_replication_reply_time
pg_replication_lag
pg_database_size_bytes