Skip to content

Collectors not initializing if exporter is started before postgres #880

Closed
@Sticksman

Description

@Sticksman

What did you do?

Tried to reproduce a reported bug where collectors were not outputting stats with the below docker-compose file:

version: "3.9"
services:
  postgres:
    restart: always
    image: postgres:14
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=dev
  exporter:
    restart: always
    image: quay.io/prometheuscommunity/postgres-exporter:v0.13.2
    ports:
      - 9187:9187
    environment:
      - DATA_SOURCE_NAME=postgresql://root:password@postgres:5432/dev?sslmode=disable
    command: --collector.stat_statements --log.level=debug

Afterwards ran curl 127.0.0.1:9187/metrics and noted that no metrics were appearing from collectors. After adding a depends_on attribute to the exporter block, the collectors behaved as expected.

See more here: #685 (comment)

What did you expect to see?

I expected that the collectors would emit metrics on the metrics endpoint.

What did you see instead? Under which circumstances?

The collectors did not emit metrics when the exporter started before postgres, and did if the collector was started after postgres.

Environment

  • System information:

    Darwin 22.5.0 arm64

  • postgres_exporter version:

    v0.13.2

  • postgres_exporter flags:

--collector.stat_statements 
--log.level=debug
  • PostgreSQL version:

    14

  • Logs:

without depends_on

# HELP pg_stat_database_conflicts_confl_bufferpin Number of queries in this database that have been canceled due to pinned buffers
# TYPE pg_stat_database_conflicts_confl_bufferpin counter
pg_stat_database_conflicts_confl_bufferpin{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_deadlock Number of queries in this database that have been canceled due to deadlocks
# TYPE pg_stat_database_conflicts_confl_deadlock counter
pg_stat_database_conflicts_confl_deadlock{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_lock Number of queries in this database that have been canceled due to lock timeouts
# TYPE pg_stat_database_conflicts_confl_lock counter
pg_stat_database_conflicts_confl_lock{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_snapshot Number of queries in this database that have been canceled due to old snapshots
# TYPE pg_stat_database_conflicts_confl_snapshot counter
pg_stat_database_conflicts_confl_snapshot{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_tablespace Number of queries in this database that have been canceled due to dropped tablespaces
# TYPE pg_stat_database_conflicts_confl_tablespace counter
pg_stat_database_conflicts_confl_tablespace{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="16384",datname="dev",server="postgres:5432"} 0

with depends_on

# HELP pg_stat_database_blk_read_time Time spent reading data file blocks by backends in this database, in milliseconds
# TYPE pg_stat_database_blk_read_time counter
pg_stat_database_blk_read_time{datid="0",datname="unknown"} 0
pg_stat_database_blk_read_time{datid="1",datname="template1"} 0
pg_stat_database_blk_read_time{datid="13779",datname="template0"} 0
pg_stat_database_blk_read_time{datid="13780",datname="postgres"} 0
pg_stat_database_blk_read_time{datid="16384",datname="dev"} 0
# HELP pg_stat_database_blk_write_time Time spent writing data file blocks by backends in this database, in milliseconds
# TYPE pg_stat_database_blk_write_time counter
pg_stat_database_blk_write_time{datid="0",datname="unknown"} 0
pg_stat_database_blk_write_time{datid="1",datname="template1"} 0
pg_stat_database_blk_write_time{datid="13779",datname="template0"} 0
pg_stat_database_blk_write_time{datid="13780",datname="postgres"} 0
pg_stat_database_blk_write_time{datid="16384",datname="dev"} 0
# HELP pg_stat_database_blks_hit Number of times disk blocks were found already in the buffer cache, so that a read was not necessary (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache)
# TYPE pg_stat_database_blks_hit counter
pg_stat_database_blks_hit{datid="0",datname="unknown"} 1189
pg_stat_database_blks_hit{datid="1",datname="template1"} 0
pg_stat_database_blks_hit{datid="13779",datname="template0"} 0
pg_stat_database_blks_hit{datid="13780",datname="postgres"} 8410
pg_stat_database_blks_hit{datid="16384",datname="dev"} 22086
# HELP pg_stat_database_blks_read Number of disk blocks read in this database
# TYPE pg_stat_database_blks_read counter
pg_stat_database_blks_read{datid="0",datname="unknown"} 108
pg_stat_database_blks_read{datid="1",datname="template1"} 0
pg_stat_database_blks_read{datid="13779",datname="template0"} 0
pg_stat_database_blks_read{datid="13780",datname="postgres"} 378
pg_stat_database_blks_read{datid="16384",datname="dev"} 1595
# HELP pg_stat_database_conflicts Number of queries canceled due to conflicts with recovery in this database. (Conflicts occur only on standby servers; see pg_stat_database_conflicts for details.)
# TYPE pg_stat_database_conflicts counter
pg_stat_database_conflicts{datid="0",datname="unknown"} 0
pg_stat_database_conflicts{datid="1",datname="template1"} 0
pg_stat_database_conflicts{datid="13779",datname="template0"} 0
pg_stat_database_conflicts{datid="13780",datname="postgres"} 0
pg_stat_database_conflicts{datid="16384",datname="dev"} 0
# HELP pg_stat_database_conflicts_confl_bufferpin Number of queries in this database that have been canceled due to pinned buffers
# TYPE pg_stat_database_conflicts_confl_bufferpin counter
pg_stat_database_conflicts_confl_bufferpin{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_bufferpin{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_deadlock Number of queries in this database that have been canceled due to deadlocks
# TYPE pg_stat_database_conflicts_confl_deadlock counter
pg_stat_database_conflicts_confl_deadlock{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_deadlock{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_lock Number of queries in this database that have been canceled due to lock timeouts
# TYPE pg_stat_database_conflicts_confl_lock counter
pg_stat_database_conflicts_confl_lock{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_lock{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_snapshot Number of queries in this database that have been canceled due to old snapshots
# TYPE pg_stat_database_conflicts_confl_snapshot counter
pg_stat_database_conflicts_confl_snapshot{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_snapshot{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_conflicts_confl_tablespace Number of queries in this database that have been canceled due to dropped tablespaces
# TYPE pg_stat_database_conflicts_confl_tablespace counter
pg_stat_database_conflicts_confl_tablespace{datid="1",datname="template1",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="13779",datname="template0",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="13780",datname="postgres",server="postgres:5432"} 0
pg_stat_database_conflicts_confl_tablespace{datid="16384",datname="dev",server="postgres:5432"} 0
# HELP pg_stat_database_deadlocks Number of deadlocks detected in this database
# TYPE pg_stat_database_deadlocks counter
pg_stat_database_deadlocks{datid="0",datname="unknown"} 0
pg_stat_database_deadlocks{datid="1",datname="template1"} 0
pg_stat_database_deadlocks{datid="13779",datname="template0"} 0
pg_stat_database_deadlocks{datid="13780",datname="postgres"} 0
pg_stat_database_deadlocks{datid="16384",datname="dev"} 0
# HELP pg_stat_database_numbackends Number of backends currently connected to this database. This is the only column in this view that returns a value reflecting current state; all other columns return the accumulated values since the last reset.
# TYPE pg_stat_database_numbackends gauge
pg_stat_database_numbackends{datid="0",datname="unknown"} 0
pg_stat_database_numbackends{datid="1",datname="template1"} 0
pg_stat_database_numbackends{datid="13779",datname="template0"} 0
pg_stat_database_numbackends{datid="13780",datname="postgres"} 0
pg_stat_database_numbackends{datid="16384",datname="dev"} 2
# HELP pg_stat_database_stats_reset Time at which these statistics were last reset
# TYPE pg_stat_database_stats_reset counter
pg_stat_database_stats_reset{datid="0",datname="unknown"} 1.690824995e+09
pg_stat_database_stats_reset{datid="1",datname="template1"} 0
pg_stat_database_stats_reset{datid="13779",datname="template0"} 0
pg_stat_database_stats_reset{datid="13780",datname="postgres"} 1.690824995e+09
pg_stat_database_stats_reset{datid="16384",datname="dev"} 1.690825004e+09
# HELP pg_stat_database_temp_bytes Total amount of data written to temporary files by queries in this database. All temporary files are counted, regardless of why the temporary file was created, and regardless of the log_temp_files setting.
# TYPE pg_stat_database_temp_bytes counter

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions