pg_eyes

October 8, 2017 · View on GitHub

Расширение включает в себя набор функций и представлений для мониторинга состояния базы данных PostgreSQL.

Установка

Версии расширения

В настоящий момент поддерживаются две ветки расширения для разных версий PostgreSQL:

  • 0.x - для версии 9.4-9.5
  • 1.x - для версии 9.6

Для установки файлов расширения можно выполнить suso make install или скопировать вручную файлы расширения(pg_eyes.control и sql/pg_eyes*.sql) в директорию SHAREDIR/extension/

Зависимости

pg_stat_statements

Создание расширения

CREATE EXTENSION pg_eyes CASCADE;

Описание

Функции мониторинга

Функции мониторинга представляют собой api для различных инструментов мониторинга, позволяющий получить из базы данных набор метрик в готовом виде. При вызове функции клиенту возвращаются метрики в виде таблицы: метрика, значение. Функции создаются с опцией SECURITY DEFINER, поэтому пользователю системы мониторинга достаточно привилегий на выполнение функций в схеме eyes.

eyes.get_activity()

Возвращает базовый набор метрик БД PostgreSQL, который можно собирать на всех экземплярах. Кол-во метрик, возвращаемых функцией, в разных экземплярах может отличатся в зависимости от наличия standby серверов.

Описание метрик:

Большинство метрик включают в себя имена view, на основе которых формируются(имя_представления.метрика).

Большая часть метрик из pg_stat_database и pg_stat_bgwriter накопительные. Для построения графиков по ним необходимо вычислять разницу между точками.

Метрики с именами *_time возвращают время в миллисекундах.

Имя метрикиОписание
pg_stat_activity.totalКол-во открытых сессий.
pg_stat_activity.activeКол-во активных запросов.
pg_stat_activity.active_1sКол-во активных запросов, работающих дольше 1 секунды.
pg_stat_activity.active_timeВремя работы самого долгого запроса. Не учитываются активные запросы процессов autovacuum.
pg_stat_activity.idleКол-во сессий в статусе idle.
pg_stat_activity.idle_in_trКол-во открытых транзакций, ожидающих в статусе idle in transaction.
pg_stat_activity.idle_in_tr_1sКол-во открытых транзакций, ожидающих в статусе idle in transaction дольше 1 секунды.
pg_stat_activity.idle_in_tr_timeСамое долгое время ожидания в статусе idle in transaction.
pg_stat_activity.xact_timeВремя работы самой долгой открытой транзакции. Не учитываются активные запросы процессов autovacuum.
pg_stat_activity.wait_lockКол-во заблокированных запросов.
pg_stat_activity.wait_lock_1sКол-во запросов, заблокированных дольше 1 секунды.
pg_stat_activity.wait_lock_timeСамое долгое время блокировки запроса.
pg_stat_activity.autovacuumКол-во работающих процессов autovacuum
pg_stat_activity.autovacuum_timeВремя работы самого старого процесса autovacuum.
pg_stat_activity.dba_task_activeЗначение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.active
pg_stat_activity.dba_task_active_timeЗначение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.active_time
pg_stat_activity.dba_task_xact_timeЗначение рассчитывается для application_name = "DBATask" аналогично pg_stat_activity.xact_time
pg_stat_database.backends_pctПроцент открытых сессий от max_connections.
pg_stat_database.xact_totalpg_stat_database
pg_stat_database.xact_commitpg_stat_database
pg_stat_database.xact_rollbackpg_stat_database
pg_stat_database.blks_readpg_stat_database
pg_stat_database.blks_hitpg_stat_database
pg_stat_database.tup_returnedpg_stat_database
pg_stat_database.tup_fetchedpg_stat_database
pg_stat_database.tup_insertedpg_stat_database
pg_stat_database.tup_updatedpg_stat_database
pg_stat_database.tup_deletedpg_stat_database
pg_stat_database.conflictspg_stat_database
pg_stat_database.temp_filespg_stat_database
pg_stat_database.temp_bytespg_stat_database
pg_stat_database.deadlockspg_stat_database
pg_stat_bgwriter.checkpoints_timedpg_stat_bgwriter
pg_stat_bgwriter.checkpoints_reqpg_stat_bgwriter
pg_stat_bgwriter.checkpoint_write_timepg_stat_bgwriter
pg_stat_bgwriter.checkpoint_sync_timepg_stat_bgwriter
pg_stat_bgwriter.buffers_checkpointpg_stat_bgwriter
pg_stat_bgwriter.buffers_cleanpg_stat_bgwriter
pg_stat_bgwriter.maxwritten_cleanpg_stat_bgwriter
pg_stat_bgwriter.buffers_backendpg_stat_bgwriter
pg_stat_bgwriter.buffers_backend_fsyncpg_stat_bgwriter
pg_stat_bgwriter.buffers_allocpg_stat_bgwriter
wal_written_bОбъем записанных в WAL данных.
replication.streaming_db02_b_lagОтставание репликации в байтах. Метрика формируется на мастере динамически(streaming_application_name_b_lag) на основе данных pg_stat_replication.
replication.is_in_recoveryВозвращает 1, если база данных в процессе восстановления.
replication.ms_lagВремя отставания репликации standby базы данных в миллисекундах. На мастере время отставания всегда 0.
response_timeУсловное время отклика базы данных. Считается время работы текущей функции.

Пример использования:

SELECT stat_name, stat_value FROM eyes.get_activity();
               stat_name                |   stat_value   
----------------------------------------+----------------
 pg_stat_activity.total                 |            150
 pg_stat_activity.active                |              5
 pg_stat_activity.active_1s             |              1
 pg_stat_activity.active_time           |           8233
 pg_stat_activity.idle                  |            134
 pg_stat_activity.idle_in_tr            |             11
 pg_stat_activity.idle_in_tr_1s         |             10
 pg_stat_activity.idle_in_tr_time       |          28972
 pg_stat_activity.xact_time             |          29967
 pg_stat_activity.wait_lock             |              0
 pg_stat_activity.wait_lock_1s          |              0
 pg_stat_activity.wait_lock_time        |              0
 pg_stat_activity.autovacuum            |              0
 pg_stat_activity.autovacuum_time       |              0
 pg_stat_activity.dba_task_active       |              0
 pg_stat_activity.dba_task_active_time  |              0
 pg_stat_activity.dba_task_xact_time    |              0
 pg_stat_database.backends_pct          |              8
 pg_stat_database.xact_total            |     2467775475
 pg_stat_database.xact_commit           |     2464139978
 pg_stat_database.xact_rollback         |        3635497
 pg_stat_database.blks_read             |    12695419761
 pg_stat_database.blks_hit              |  1595740885426
 pg_stat_database.tup_returned          | 49506807445278
 pg_stat_database.tup_fetched           |   375366791483
 pg_stat_database.tup_inserted          |      503839362
 pg_stat_database.tup_updated           |     1176437355
 pg_stat_database.tup_deleted           |      126931522
 pg_stat_database.conflicts             |              0
 pg_stat_database.temp_files            |            734
 pg_stat_database.temp_bytes            |    10883135968
 pg_stat_database.deadlocks             |            404
 pg_stat_bgwriter.checkpoints_timed     |           2656
 pg_stat_bgwriter.checkpoints_req       |            697
 pg_stat_bgwriter.checkpoint_write_time |     4068513155
 pg_stat_bgwriter.checkpoint_sync_time  |         618549
 pg_stat_bgwriter.buffers_checkpoint    |      244031859
 pg_stat_bgwriter.buffers_clean         |       40027187
 pg_stat_bgwriter.maxwritten_clean      |         271382
 pg_stat_bgwriter.buffers_backend       |       84082877
 pg_stat_bgwriter.buffers_backend_fsync |              0
 pg_stat_bgwriter.buffers_alloc         |     1290553764
 wal_written_b                          | 50313595651824
 replication.streaming_db03_b_lag       |          27384
 replication.streaming_db02_b_lag       |          27384
 replication.is_in_recovery             |              0
 replication.ms_lag                     |              0
 response_time                          |             14
(48 строк)

eyes.get_activity(p_stat_group character varying)

Функция для получения специфичных для конкретных баз данных или приложений метрик, настраиваемых дополнительно администраторами. Возвращает метрики только для заданной в параметре вызова группы. Для настройки нестандартных метрик используется таблица eyes.get_activity.

СтолбецТипОписание
stat_namecharacter varying(30)Имя метрики.
stat_groupcharacter varying(30)Группа метрик. Значение задается в качестве параметра при вызове функции eyes.get_activity(character varying).
stat_querytextЗапрос для получения значения. Запрос должен возвращать одно значение целочисленного типа.
stat_descriptiontextПроизвольное описание метрики.

Пример использования:

Например необходимо получать метрики по размеру таблицы testtable1 и ее индексов. Для настройки добавим соответствующие строки в таблицу с группой "table_size":

INSERT INTO eyes.get_activity (stat_name,
    stat_group, 
    stat_query,
    stat_description)
VALUES ( 'table_size.testtable1_size',
    'table_size',
    'SELECT pg_table_size(''testtable1'');',
    'Размер таблицы testtable1');

INSERT INTO eyes.get_activity (stat_name,
    stat_group, 
    stat_query,
    stat_description)
VALUES ( 'table_size.testtable1_idx_size',
    'table_size',
    'SELECT pg_indexes_size(''testtable1'');',
    'Размер индексов testtable1');

Получение метрик для группы "table_size":

SELECT stat_name, stat_value FROM eyes.get_activity('table_size');
           stat_name            | stat_value 
--------------------------------+------------
 table_size.testtable1_size     |      73728
 table_size.testtable1_idx_size |      32768
(2 строки)

Представления и функции для анализа текущей активности в базе данных

eyes.get_pg_stat_activity()

Функция возвращает результат запроса "SELECT * FROM pg_stat_activity;". Позволяет организовать полный доступ к данным представления pg_stat_activity пользователям без предоставления им роли superuser.

eyes.get_pg_stat_statements()

Функция возвращает результат запроса "SELECT * FROM pg_stat_statements;". Позволяет организовать полный доступ к данным представления pg_stat_statements пользователям без предоставления им роли superuser.

Представления с информацией о базе данных

eyes.db_object

Список объектов в базе данных(pg_class)

СтолбецТипОписание
object_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
object_namenamepg_class.relname
object_typetextТип объекта: table, view, materialized view, index, sequence, toast, foreign table, composite
object_ownernamepg_get_userbyid(pg_class.relowner)
tablespacenamepg_tablespace.spcname
object_optionstext[]pg_class.reloptions

eyes.db_tables

Список таблиц в базе данных

СтолбецТипОписание
table_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
table_namenamepg_class.relname
table_ownernamepg_get_userbyid(pg_class.relowner)
tablespacenamepg_tablespace.spcname
seq_scanbigintpg_stat_all_tables.seq_scan
seq_tup_readbigintpg_stat_all_tables.seq_tup_read
idx_scanbigintpg_stat_all_tables.idx_scan
idx_tup_fetchbigintpg_stat_all_tables.idx_tup_fetch
n_tup_insbigintpg_stat_all_tables.n_tup_ins
n_tup_updbigintpg_stat_all_tables.n_tup_upd
n_tup_delbigintpg_stat_all_tables.n_tup_del
n_tup_hot_updbigintpg_stat_all_tables.n_tup_hot_upd

eyes.db_tables_size

Список таблиц в базе данных с расчетом размеров

СтолбецТипОписание
table_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
table_namenamepg_class.relname
table_ownernamepg_get_userbyid(pg_class.relowner)
tablespacenamepg_tablespace.spcname
seq_scanbigintpg_stat_all_tables.seq_scan
seq_tup_readbigintpg_stat_all_tables.seq_tup_read
idx_scanbigintpg_stat_all_tables.idx_scan
idx_tup_fetchbigintpg_stat_all_tables.idx_tup_fetch
n_tup_insbigintpg_stat_all_tables.n_tup_ins
n_tup_updbigintpg_stat_all_tables.n_tup_upd
n_tup_delbigintpg_stat_all_tables.n_tup_del
n_tup_hot_updbigintpg_stat_all_tables.n_tup_hot_upd
table_sizebigintpg_table_size(pg_class.oid::regclass)
indexes_sizebigintpg_indexes_size(pg_class.oid::regclass)
total_sizebigintpg_total_relation_size(pg_class.oid::regclass)

eyes.db_indexes

Список индексов в базе данных

СтолбецТипОписание
table_oidoidpg_stat_all_indexes.relid
index_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
table_namenamepg_stat_all_indexes.relname
index_namenamepg_class.relname
tablespacenamepg_tablespace.spcname
index_deftextpg_get_indexdef(pg_class.oid)
idx_scanbigintpg_stat_all_indexes.idx_scan
idx_tup_readbigintpg_stat_all_indexes.idx_tup_read
idx_tup_fetchbigintpg_stat_all_indexes.idx_tup_fetch

eyes.db_indexes_size

Список индексов в базе данных с расчетом размеров

СтолбецТипОписание
table_oidoidpg_stat_all_indexes.relid
index_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
table_namenamepg_stat_all_indexes.relname
index_namenamepg_class.relname
tablespacenamepg_tablespace.spcname
index_deftextpg_get_indexdef(pg_class.oid)
idx_scanbigintpg_stat_all_indexes.idx_scan
idx_tup_readbigintpg_stat_all_indexes.idx_tup_read
idx_tup_fetchbigintpg_stat_all_indexes.idx_tup_fetch
index_sizebigintpg_table_size(pg_class.oid::regclass)

eyes.db_attributes

Список атрибутов в базе данных

СтолбецТипОписание
object_oidoidpg_class.oid
schema_namenamepg_namespace.nspname
object_namenamepg_class.relname
object_typenameТип объекта: table, view, materialized view, index, sequence, toast, foreign table, composite
attribute_numsmallintpg_attribute.attnum
attribute_namenamepg_attribute.attname
attribute_typetextformat_type(pg_attribute.atttypid, pg_attribute.atttypmod)
is_not_nullbooleanpg_attribute.attnotnull

eyes.db_functions

Список функций в базе данных

СтолбецТипОписание
function_oidoidpg_proc.oid
schema_namenamepg_namespace.nspname
function_namenamepg_proc.proname
function_ownernamepg_get_userbyid(pg_proc.proowner)
function_deftextpg_get_functiondef(pg_proc.oid)

eyes.db_settings

Список параметров

СтолбецТипОписание
nametextpg_settings.name
settingtextcurrent_setting(pg_settings.name)
contexttextpg_settings.context
sourcetextpg_settings.source
sourcefiletextpg_settings.sourcefile
sourcelineintegerpg_settings.sourceline