Мониторинг PostgreSQL с помощью Proto Observability
Сбор метрик 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 на хосте
-
В файле конфигурации 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>"
-
Перезапустите ProtoOBP агента выполнив
systemctl restart protoobp-agent
-
Выполните проверку работы агента и убедитесь, что в разделе Postgres нет ошибок.
Обратите внимание
Для отображения нового хоста СУБД следует обновить страницу браузера целиком (кнопкаОбновить
в правом верхнем углу веб-консоли обновляет только значения метрик на дашборде, но не список серверов).
Если агент запускается в виде Docker контейнера
-
Добавьте следующие лейблы к 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>"}]'
-
-
Примените изменения лейблов для для контейнера с Postgres (перезапуском контейнера), а также перезапустите контейнер с агентом ProtoOBP.
-
Выполните проверку работы агента и убедитесь, что в разделе 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 | Количество обращений к функции. |