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

Сбор метрик Tantor (Tantor DB / Tantor Postgres)

Сбор метрик Tantor

Tantor — российская СУБД от Tantor Labs, являющаяся форком PostgreSQL. Wire-протокол и SQL-поведение Tantor полностью совместимы с PostgreSQL, поэтому ProtoOBP-агент собирает метрики Tantor той же проверкой postgres, что и для ванильного PostgreSQL — отдельной интеграции устанавливать не нужно. Инструкция ниже подходит для редакций Tantor BE (Basic Edition), SE (Standard Edition), SE 1C и Certified, для версий PostgreSQL-ядра 14, 15, 16 и 17.

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

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

  • Для версий с ядром PostgreSQL 10 и выше (вся актуальная линейка Tantor 14/15/16/17):

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

Если требуется собирать query-level метрики (postgresql.queries.*), загрузите расширение pg_stat_statements через shared_preload_libraries в postgresql.conf и выполните в наблюдаемой базе:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

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

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

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

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

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

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

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

    • в 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. Примените изменения лейблов для контейнера с Tantor (перезапуском контейнера), а также перезапустите контейнер с агентом ProtoOBP.

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

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

Метрики

Список метрик идентичен PostgreSQL — Tantor использует ту же модель данных и те же pg_stat_* представления, поэтому проверка postgres собирает с него ровно те же postgresql.* серии.

Имя метрикиТип метрикиЕдиницаВ единицуОписание
postgresql_connectionsgaugeconnectionКоличество активных соединений с этой базой данных.
postgresql_commitsgaugetransactionsecondКоличество транзакций, которые были зафиксированы в этой базе данных.
postgresql_rollbacksgaugetransactionsecondКоличество транзакций, которые были откачены (rollback) в этой базе данных.
postgresql_disk_readgaugeblocksecondКоличество дисковых блоков, прочитанных в этой базе данных.
postgresql_buffer_hitgaugehitsecondКоличество раз, когда дисковые блоки оказывались в буферном кэше, предотвращая необходимость чтения из базы данных.
postgresql_rows_returnedgaugerowsecondКоличество строк, возвращенных запросами в этой базе данных
postgresql_rows_fetchedgaugerowsecondКоличество строк, полученных запросами в этой базе данных
postgresql_rows_insertedgaugerowsecondКоличество строк, вставленных запросами в эту базу данных
postgresql_rows_updatedgaugerowsecondКоличество строк, обновленных запросами в этой базе данных
postgresql_rows_deletedgaugerowsecondКоличество строк, удаленных запросами в этой базе данных
postgresql_database_sizegaugebyteДисковое пространство, используемое этой базой данных.
postgresql_db_countgaugeitemКоличество доступных баз данных.
postgresql_deadlocksgaugelocksecondКоличество тупиковых ситуаций (deadlocks), обнаруженных в этой базе данных
postgresql_deadlocks_countcountlockКоличество тупиковых ситуаций (deadlocks), обнаруженных в этой базе данных
postgresql_temp_bytesgaugebytesecondКоличество данных, записанных во временные файлы запросами в этой базе данных.
postgresql_temp_filesgaugefilesecondКоличество временных файлов, созданных запросами в этой базе данных.
postgresql_bgwriter_checkpoints_timedcountКоличество запланированных контрольных точек, которые были выполнены.
postgresql_bgwriter_checkpoints_requestedcountКоличество запрошенных контрольных точек, которые были выполнены.
postgresql_bgwriter_buffers_checkpointcountКоличество буферов, записанных во время контрольных точек.
postgresql_bgwriter_buffers_cleancountКоличество буферов, записанных фоновым писателем.
postgresql_bgwriter_maxwritten_cleancountКоличество раз, когда фоновая запись останавливала очистку из-за записи слишком большого количества буферов.
postgresql_bgwriter_buffers_backendcountbufferКоличество буферов, записанных непосредственно бэкендом.
postgresql_bgwriter_buffers_alloccountКоличество выделенных буферов
postgresql_bgwriter_buffers_backend_fsynccountКоличество случаев, когда бэкенд должен был выполнить свой собственный вызов fsync вместо фонового писателя.
postgresql_bgwriter_write_timecountmillisecondОбщее время обработки контрольной точки, затраченное на запись файлов на диск.
postgresql_bgwriter_sync_timecountmillisecondОбщее время обработки контрольной точки, затраченное на синхронизацию файлов с диском.
postgresql_locksgaugelockКоличество блокировок, активных для этой базы данных.
postgresql_seq_scansgaugeКоличество последовательных сканирований, инициированных для этой таблицы.
postgresql_seq_rows_readgaugerowsecondКоличество живых строк, полученных при последовательном сканировании.
postgresql_index_scansgaugeКоличество индексных сканирований, инициированных для этой таблицы, с пометкой по индексу.
postgresql_index_rel_scansgaugeОбщее количество сканирований индекса, инициированных для этой таблицы.
postgresql_index_rows_fetchedgaugerowsecondКоличество живых строк, полученных при сканировании индекса.
postgresql_index_rel_rows_fetchedgaugerowsecondКоличество живых строк, полученных при сканировании индекса.
postgresql_rows_hot_updatedgaugerowsecondКоличество строк было обновлено HOT, то есть отдельное обновление индекса не потребовалось.
postgresql_live_rowsgaugerowПредполагаемое количество живых строк.
postgresql_dead_rowsgaugerowПредполагаемое количество мертвых строк.
postgresql_vacuumedcountКоличество раз, когда эта таблица была вакуумирована вручную.
postgresql_autovacuumedcountКоличество раз, когда эта таблица была вакуумирована демоном autovacuum.
postgresql_analyzedcountКоличество раз, когда эта таблица была проанализирована вручную.
postgresql_autoanalyzedcountКоличество раз, когда эта таблица была проанализирована демоном autovacuum.
postgresql_index_rows_readgaugerowsecondКоличество записей индекса, возвращенных в результате сканирования этого индекса.
postgresql_table_sizegaugebyteОбщее дисковое пространство, используемое указанной таблицей. Включает TOAST, карту свободного пространства и карту видимости. Исключает индексы.
postgresql_index_sizegaugebyteОбщее дисковое пространство, используемое индексами, подключенными к указанной таблице.
postgresql_total_sizegaugebyteОбщее дисковое пространство, используемое таблицей, включая индексы и данные TOAST.
postgresql_table_countgaugetableКоличество пользовательских таблиц в этой базе данных.
postgresql_max_connectionsgaugeconnectionМаксимальное количество клиентских подключений, разрешенных к этой базе данных.
postgresql_percent_usage_connectionsgaugefractionКоличество подключений к этой базе данных в долях от максимального числа разрешенных подключений.
postgresql_replication_delaygaugesecondТекущая задержка репликации в секундах. Доступно только в postgresql 9.1 и новее
postgresql_replication_delay_bytesgaugebyteТекущая задержка репликации в байтах. Доступно только в postgresql 9.2 и новее
postgresql_replication_wal_write_laggaugesecondВремя, прошедшее с момента локального стирания недавней записи WAL до получения уведомления о том, что этот резервный сервер записал ее (но еще не стирал и не применил). Доступно только для postgresql 10 и более новых версий.
postgresql_replication_wal_flush_laggaugesecondВремя, прошедшее с момента локального стирания последних данных WAL до получения уведомления о том, что этот резервный сервер записал и слил их (но еще не применил). Доступно только для postgresql 10 и более новых версий.
postgresql_replication_wal_replay_laggaugesecondВремя, прошедшее с момента локального стирания последних данных WAL до получения уведомления о том, что этот резервный сервер их записал, слил и применил. Это можно использовать для оценки задержки, которую понесл synchronous_commit уровня remote_apply при коммите, если этот сервер был настроен как синхронный резервный.
postgresql_replication_backend_xmin_agegaugeВозраст xmin-горизонта резервного сервера (относительно последнего стабильного xid), о котором сообщает hot_standby_feedback.
postgresql_heap_blocks_readgaugeblocksecondКоличество дисковых блоков, считанных из этой таблицы.
postgresql_heap_blocks_hitgaugehitsecondКоличество обращений к буферу в этой таблице.
postgresql_index_blocks_readgaugeblocksecondКоличество дисковых блоков, прочитанных из всех индексов этой таблицы.
postgresql_index_blocks_hitgaugehitsecondКоличество попаданий в буфер во всех индексах этой таблицы.
postgresql_table_bloatgaugepercentПредполагаемый процент разбухания таблицы.
postgresql_index_bloatgaugepercentПредполагаемый процент разбухания индекса.
postgresql_toast_blocks_readgaugeblocksecondКоличество дисковых блоков, прочитанных из таблицы TOAST этой таблицы.
postgresql_toast_blocks_hitgaugehitsecondКоличество просмотров буфера в таблице TOAST этой таблицы.
postgresql_toast_index_blocks_readgaugeblocksecondКоличество дисковых блоков, прочитанных из индекса таблицы TOAST этой таблицы.
postgresql_toast_index_blocks_hitgaugeblocksecondКоличество попаданий в буфер в индексе таблицы TOAST этой таблицы.
postgresql_transactions_opengaugetransactionКоличество открытых транзакций в этой базе данных.
postgresql_transactions_idle_in_transactiongaugetransactionКоличество транзакций ‘idle in transaction’ в этой базе данных.
postgresql_before_xid_wraparoundgaugetransactionКоличество транзакций, которое может произойти до момента обхода транзакции.
postgresql_active_queriesgaugeКоличество активных запросов в этой базе данных.
postgresql_active_waiting_queriesgaugeКоличество ожидающих запросов в этой базе данных в активном состоянии.
postgresql_waiting_queriesgaugeThe number of waiting queries in this database.
postgresql_queries_countcountqueryОбщее количество выполненных запросов для query_signature, db и пользователя. (только для DBM)
postgresql_queries_timecountnanosecondОбщее время выполнения запроса для query_signature, db и пользователя. (только для DBM)
postgresql_queries_rowscountrowОбщее количество строк, полученных или затронутых запросом, для каждого query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_hitcountblockОбщее количество обращений к кэшу разделяемых блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_readcountblockОбщее количество прочитанных общих блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_dirtiedcountblockОбщее количество общих блоков, загрязненных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_shared_blks_writtencountblockОбщее количество общих блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_hitcountblockОбщее количество обращений к локальному блочному кэшу по query_signature, db и user. (только для DBM)
postgresql_queries_local_blks_readcountblockОбщее количество прочитанных локальных блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_dirtiedcountblockОбщее количество локальных блоков, испачканных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_local_blks_writtencountblockОбщее количество локальных блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_temp_blks_readcountblockОбщее количество прочитанных временных блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_temp_blks_writtencountblockОбщее количество временных блоков, записанных для query_signature, db и пользователя. (только для DBM)
postgresql_queries_blk_read_timecountnanosecondОбщее время чтения блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_blk_write_timecountnanosecondОбщее время, затраченное на запись блоков для query_signature, db и пользователя. (только для DBM)
postgresql_queries_duration_maxgaugenanosecondВозраст самого продолжительного выполнения запроса для пользователя, базы данных и приложения. (только для DBM)
postgresql_queries_duration_sumgaugenanosecondСумма возраста всех выполняющихся запросов для пользователя, базы данных и приложения. (только для DBM)
postgresql_transactions_duration_maxgaugenanosecondВозраст самой продолжительной выполняемой транзакции для пользователя, базы данных и приложения. (только для DBM)
postgresql_transactions_duration_sumgaugenanosecondСумма возраста всех запущенных транзакций для пользователя, базы данных и приложения. (только для DBM)
postgresql_wal_agegaugesecondВозраст в секундах самого старого WAL-файла.