Мониторинг PostgreSQL с помощью Proto Observability

Сбор метрик PostgreSQL

Сбор метрик PostgreSQL

Конфигурация PostgreSQL

Создайте пользователя с правами read-only для агента ProtoOBP в admin базе данных PostgreSQL:

  • Для PostgreSQL версии 10 и выше:

    create user protoobp with password '<PASSWORD>';
    grant pg_monitor to protoobp;
    grant SELECT ON pg_stat_database to protoobp;
    
  • Для более старых версий PostgreSQL:

    create user protoobp with password '<PASSWORD>';
    grant SELECT ON pg_stat_database to protoobp;
    

Конфигурация ProtoOBP агента

Если агент запускается в виде службы systemd на хосте

  1. В файле конфигурации ProtoOBP агента (/etc/protoobp-agent/conf.d/postgres.d/conf.yaml) укажите адрес и порт PostgreSQL и учетную запись под которой агент сможет подключиться к базе :

    init_config:
    
    instances:
      - hosts: localhost
        port: 5432
        username: protoobp
        password: protoobp
        #По-умолчанию используется dbname - postgresql
        dbname: "<DB_NAME>" 
    
  2. Перезапустите ProtoOBP агента выполнив systemctl restart protoobp-agent

  3. Выполните проверку работы агента и убедитесь, что в разделе Postgres нет ошибок.

Если агент запускается в виде Docker контейнера

  1. Добавьте следующие лейблы к Docker контейнеру с PostgreSQL:

    • в docker-compose.yaml

      labels:
        com.protoobp.ad.check_names: '["postgres"]'
        com.protoobp.ad.init_configs: "[{}]"
        com.protoobp.ad.instances: '[{"host":"%%host%%", "port":5432,"username":"protoobp","password":"<PASSWORD>"}]'
      
    • или в Dockerfile

      LABEL "com.protoobp.ad.check_names"='["postgres"]'
      LABEL "com.protoobp.ad.init_configs"='[{}]'
      LABEL "com.protoobp.ad.instances"='[{"host":"%%host%%", "port":5432,"username":"protoobp","password":"<PASSWORD>"}]'
      
  2. Примените изменения лейблов для для контейнера с Postgres (перезапуском контейнера), а также перезапустите контейнер с агентом ProtoOBP.

  3. Выполните проверку работы агента и убедитесь, что в разделе Postgres нет ошибок.

Собираемые данные

Метрики

Имя метрики Тип метрики Единица В единицу Описание
postgresql_connections gauge connection Количество активных соединений с этой базой данных.
postgresql_commits gauge transaction second Количество транзакций, которые были зафиксированы в этой базе данных.
postgresql_rollbacks gauge transaction second Количество транзакций, которые были откачены (rollback) в этой базе данных.
postgresql_disk_read gauge block second Количество дисковых блоков, прочитанных в этой базе данных.
postgresql_buffer_hit gauge hit second Количество раз, когда дисковые блоки оказывались в буферном кэше, предотвращая необходимость чтения из базы данных.
postgresql_rows_returned gauge row second Количество строк, возвращенных запросами в этой базе данных
postgresql_rows_fetched gauge row second Количество строк, полученных запросами в этой базе данных
postgresql_rows_inserted gauge row second Количество строк, вставленных запросами в эту базу данных
postgresql_rows_updated gauge row second Количество строк, обновленных запросами в этой базе данных
postgresql_rows_deleted gauge row second Количество строк, удаленных запросами в этой базе данных
postgresql_database_size gauge byte Дисковое пространство, используемое этой базой данных.
postgresql_db_count gauge item Количество доступных баз данных.
postgresql_deadlocks gauge lock second Количество тупиковых ситуаций (deadlocks), обнаруженных в этой базе данных
postgresql_deadlocks_count count lock Количество тупиковых ситуаций (deadlocks), обнаруженных в этой базе данных
postgresql_temp_bytes gauge byte second Количество данных, записанных во временные файлы запросами в этой базе данных.
postgresql_temp_files gauge file second Количество временных файлов, созданных запросами в этой базе данных.
postgresql_bgwriter_checkpoints_timed count Количество запланированных контрольных точек, которые были выполнены.
postgresql_bgwriter_checkpoints_requested count Количество запрошенных контрольных точек, которые были выполнены.
postgresql_bgwriter_buffers_checkpoint count Количество буферов, записанных во время контрольных точек.
postgresql_bgwriter_buffers_clean count Количество буферов, записанных фоновым писателем.
postgresql_bgwriter_maxwritten_clean count Количество раз, когда фоновая запись останавливала очистку из-за записи слишком большого количества буферов.
postgresql_bgwriter_buffers_backend count buffer Количество буферов, записанных непосредственно бэкендом.
postgresql_bgwriter_buffers_alloc count Количество выделенных буферов
postgresql_bgwriter_buffers_backend_fsync count Количество случаев, когда бэкенд должен был выполнить свой собственный вызов fsync вместо фонового писателя.
postgresql_bgwriter_write_time count millisecond Общее время обработки контрольной точки, затраченное на запись файлов на диск.
postgresql_bgwriter_sync_time count millisecond Общее время обработки контрольной точки, затраченное на синхронизацию файлов с диском.
postgresql_locks gauge lock Количество блокировок, активных для этой базы данных.
postgresql_seq_scans gauge Количество последовательных сканирований, инициированных для этой таблицы.
postgresql_seq_rows_read gauge row second Количество живых строк, полученных при последовательном сканировании.
postgresql_index_scans gauge Количество индексных сканирований, инициированных для этой таблицы, с пометкой по индексу.
postgresql_index_rel_scans gauge Общее количество сканирований индекса, инициированных для этой таблицы.
postgresql_index_rows_fetched gauge row second Количество живых строк, полученных при сканировании индекса.
postgresql_index_rel_rows_fetched gauge row second Количество живых строк, полученных при сканировании индекса.
postgresql_rows_hot_updated gauge row second Количество строк было обновлено HOT, то есть отдельное обновление индекса не потребовалось.
postgresql_live_rows gauge row Предполагаемое количество живых строк.
postgresql_dead_rows gauge row Предполагаемое количество мертвых строк.
postgresql_vacuumed count Количество раз, когда эта таблица была вакуумирована вручную.
postgresql_autovacuumed count Количество раз, когда эта таблица была вакуумирована демоном autovacuum.
postgresql_analyzed count Количество раз, когда эта таблица была проанализирована вручную.
postgresql_autoanalyzed count Количество раз, когда эта таблица была проанализирована демоном autovacuum.
postgresql_index_rows_read gauge row second Количество записей индекса, возвращенных в результате сканирования этого индекса.
postgresql_table_size gauge byte Общее дисковое пространство, используемое указанной таблицей. Включает TOAST, карту свободного пространства и карту видимости. Исключает индексы.
postgresql_index_size gauge byte Общее дисковое пространство, используемое индексами, подключенными к указанной таблице.
postgresql_total_size gauge byte Общее дисковое пространство, используемое таблицей, включая индексы и данные TOAST.
postgresql_table_count gauge table Количество пользовательских таблиц в этой базе данных.
postgresql_max_connections gauge connection Максимальное количество клиентских подключений, разрешенных к этой базе данных.
postgresql_percent_usage_connections gauge fraction Количество подключений к этой базе данных в долях от максимального числа разрешенных подключений.
postgresql_replication_delay gauge second Текущая задержка репликации в секундах. Доступно только в postgresql 9.1 и новее
postgresql_replication_delay_bytes gauge byte Текущая задержка репликации в байтах. Доступно только в postgresql 9.2 и новее
postgresql_replication_wal_write_lag gauge second Время, прошедшее с момента локального стирания недавней записи WAL до получения уведомления о том, что этот резервный сервер записал ее (но еще не стирал и не применил). Доступно только для postgresql 10 и более новых версий.
postgresql_replication_wal_flush_lag gauge second Время, прошедшее с момента локального стирания последних данных WAL до получения уведомления о том, что этот резервный сервер записал и слил их (но еще не применил). Доступно только для postgresql 10 и более новых версий.
postgresql_replication_wal_replay_lag gauge second Время, прошедшее с момента локального стирания последних данных WAL до получения уведомления о том, что этот резервный сервер их записал, слил и применил. Это можно использовать для оценки задержки, которую понесл synchronous_commit уровня remote_apply при коммите, если этот сервер был настроен как синхронный резервный.
postgresql_replication_backend_xmin_age gauge Возраст xmin-горизонта резервного сервера (относительно последнего стабильного xid), о котором сообщает hot_standby_feedback.
postgresql_heap_blocks_read gauge block second Количество дисковых блоков, считанных из этой таблицы.
postgresql_heap_blocks_hit gauge hit second Количество обращений к буферу в этой таблице.
postgresql_index_blocks_read gauge block second Количество дисковых блоков, прочитанных из всех индексов этой таблицы.
postgresql_index_blocks_hit gauge hit second Количество попаданий в буфер во всех индексах этой таблицы.
postgresql_table_bloat gauge percent Предполагаемый процент разбухания таблицы.
postgresql_index_bloat gauge percent Предполагаемый процент разбухания индекса.
postgresql_toast_blocks_read gauge block second Количество дисковых блоков, прочитанных из таблицы TOAST этой таблицы.
postgresql_toast_blocks_hit gauge hit second Количество просмотров буфера в таблице TOAST этой таблицы.
postgresql_toast_index_blocks_read gauge block second Количество дисковых блоков, прочитанных из индекса таблицы TOAST этой таблицы.
postgresql_toast_index_blocks_hit gauge block second Количество попаданий в буфер в индексе таблицы TOAST этой таблицы.
postgresql_transactions_open gauge transaction Количество открытых транзакций в этой базе данных.
postgresql_transactions_idle_in_transaction gauge transaction Количество транзакций ‘idle in transaction’ в этой базе данных.
postgresql_before_xid_wraparound gauge transaction Количество транзакций, которое может произойти до момента обхода транзакции.
postgresql_active_queries gauge Количество активных запросов в этой базе данных.
postgresql_active_waiting_queries gauge Количество ожидающих запросов в этой базе данных в активном состоянии.
postgresql_waiting_queries gauge The number of waiting queries in this database.
postgresql_queries_count count query Общее количество выполненных запросов для query_signature, db и пользователя. (только для DBM)
postgresql_queries_time count nanosecond Общее время выполнения запроса для query_signature, db и пользователя. (только для DBM)
postgresql_queries_rows count row Общее количество строк, полученных или затронутых запросом, для каждого query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_hit count block Общее количество обращений к кэшу разделяемых блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_read count block Общее количество прочитанных общих блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_dirtied count block Общее количество общих блоков, загрязненных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_written count block Общее количество общих блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_hit count block Общее количество обращений к локальному блочному кэшу по query_signature, db и user. (только для DBM)
postgresql_queries_local_blks_read count block Общее количество прочитанных локальных блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_dirtied count block Общее количество локальных блоков, испачканных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_written count block Общее количество локальных блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_temp_blks_read count block Общее количество прочитанных временных блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_temp_blks_written count block Общее количество временных блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_blk_read_time count nanosecond Общее время чтения блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_blk_write_time count nanosecond Общее время, затраченное на запись блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_duration_max gauge nanosecond Возраст самого продолжительного выполнения запроса для пользователя, базы данных и приложения. (только для DBM)
postgresql_queries_duration_sum gauge nanosecond Сумма возраста всех выполняющихся запросов для пользователя, базы данных и приложения. (только для DBM)
postgresql_transactions_duration_max gauge nanosecond Возраст самой продолжительной выполняемой транзакции для пользователя, базы данных и приложения. (только для DBM)
postgresql_transactions_duration_sum gauge nanosecond Сумма возраста всех запущенных транзакций для пользователя, базы данных и приложения. (только для DBM)
postgresql_wal_age gauge second Возраст в секундах самого старого WAL-файла.
postgresql_function_calls rate Количество обращений к функции.