SQL-запросы получения метрик для панели мониторинга «Метрики»#

Kintsugi использует поды сервиса collector для выполнения SQL-запросов на получение метрик. Далее для визуального представления метрик UI обращается к kmetrics с PromQL-запросом, возвращающим необходимые серии данных.

В соответствии с данным поведением устанавливается следующее соответствие между SQL-запросом сбора метрик поды сервиса collector и PromQL-запросом получения значений из timeseries-хранилища.

Сопоставление запросов метрик и графиков панели мониторинга «Метрики»#

Название виджета

SQL-запрос

Название метрики

PromQL-запрос

Архивировано файлов

Статистика работы процесса архивации WAL

pg_stat_archiver_archived_count

Число файлов WAL, которые были успешно архивированы

Архивировано файлов

Статистика работы процесса архивации WAL

pg_stat_archiver_failed_count

Число неудачных попыток архивации файлов WAL

Время исполнения контрольных точек

Статистика работы фоновых процессов

pg_stat_bgwriter_checkpoint_sync_time

Время синхронизации на диск контрольной точкой

Время исполнения контрольных точек

Статистика работы фоновых процессов

pg_stat_bgwriter_checkpoint_write_time

Время записи на диск контрольной точкой

Доступность СУБД

Активность базы данных

pg_status_available

PromQL-запрос «Активность базы данных»

Запись на диск

Статистика работы фоновых процессов

pg_stat_bgwriter_buffers_backend

Записано фоновыми процессами

Запись на диск

Статистика работы фоновых процессов

pg_stat_bgwriter_buffers_checkpoint

Записано во время контрольных точек

Запись на диск

Статистика работы фоновых процессов

pg_stat_bgwriter_buffers_clean

Записано фоновым процессам записи

Запись на диск

Статистика баз данных

pg_stat_database_temp_bytes

Объем данных, записанных во временные файлы

Запуск операции vacuum по таблице

Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных)

pg_vacuum_for_each_table_autovacuum_count

Количество автовакуум

Запуск операции vacuum по таблице

Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных)

pg_vacuum_for_each_table_vacuum_count

Количество vacuum

Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound)

Настройки автовакуума

pg_settings_autovacuum_freeze_max_age

Xid transaction age

Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound)

Автовакуум до лимита

pg_autovacuum_limit

PromQL-запрос «Автовакуум до лимита»

Лаг репликации

Общая задержка в байтах для процесса репликации

pg_stat_replication_total_lag_bytes

PromQL-запрос «Общая задержка в байтах для процесса репликации»

Ошибки и нежелательные события

Статистика баз данных

pg_stat_database_checksum_conflicts

Количество запросов, отмененных из-за конфликта

Ошибки и нежелательные события

Статистика баз данных

pg_stat_database_checksum_failures

Количество ошибок контрольных сумм в базе данных

Ошибки и нежелательные события

Статистика баз данных

pg_stat_database_deadlocks

Количество взаимных блокировок

Работающие процессы vacuum и autovacuum

Настройки автовакуума

pg_settings_autovacuum_max_workers

Максимальное количество процессов автовакуума

Работающие процессы vacuum и autovacuum

Количество процессов регулярного автовакуума

pg_vacuum_regular_runs

Количество регулярных автовакуум

Работающие процессы vacuum и autovacuum

Количество процессов пользовательского vacuum

pg_vacuum_user_runs

Количество пользовательских vacuum

Работающие процессы vacuum и autovacuum

Количество процессов wraparound autovacuum

pg_vacuum_wraparounds

PromQL-запрос «Количество процессов wraparound autovacuum»

Размер табличных пространств

Размер табличных пространств

pg_tablespace_size

PromQL-запрос «Размер табличных пространств»

Сессии

Общее количество серверных процессов по состояниям

pg_activity_count

PromQL-запрос «Общее количество серверных процессов по состояниям»

Статистика контрольных точек

Статистика работы фоновых процессов

pg_stat_bgwriter_checkpoints_req

Количество запрошенных контрольных точек

Статистика контрольных точек

Статистика работы фоновых процессов

pg_stat_bgwriter_checkpoints_timed

Количество запланированных контрольных точек

Страницы (блоки) измененные запросами

Страницы (блоки) измененные запросами (Топ 5)

pg_dirtypages_dirty

Страницы (блоки), измененные запросами

Строк в секунду

Статистика баз данных

pg_stat_database_tup_deleted

Количество строк, удаленное запросами

Строк в секунду

Статистика баз данных

pg_stat_database_tup_fetched

Количество строк, извлеченное запросами

Строк в секунду

Статистика баз данных

pg_stat_database_tup_inserted

Количество строк, вставленное запросами

Строк в секунду

Статистика баз данных

pg_stat_database_tup_returned

Количество строк, возвращенное запросами

Строк в секунду

Статистика баз данных

pg_stat_database_tup_updated

Количество строк, обновленное запросами

Топ запросов по количеству возвращенных строк

Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором

pg_stat_statements_rows

PromQL-запрос «Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором»

Топ запросов по общему времени выполнения

Топ 5 запросов с максимальным общим временем, затраченным на оператор

pg_stat_statements_total_time_sec

PromQL-запрос «Топ 5 запросов с максимальным общим временем, затраченным на оператор»

Транзакций в секунду

Статистика баз данных

pg_stat_database_xact_commit

Количество зафиксированных транзакций

Транзакций в секунду

Статистика баз данных

pg_stat_database_xact_rollback

Количество откатанных транзакций

blks_hit vs. blks_read

Статистика баз данных

pg_stat_database_hit_ratio

Коэффициент попаданий в кеш

heap_blks_hit vs. heap_blks_read

Статистика по операциям ввода/вывода для пользовательских таблиц

pg_statio_user_tables_heap_hit_ratio

Объем блоков, найденных в буфферном кеше против прочитанных дисковых блоков для объекта

idx_blks_hit vs. idx_blks_read

Статистика по операциям ввода/вывода для пользовательских таблиц

pg_statio_user_tables_idx_hit_ratio

Объем блоков, найденных в буфферном кеше против прочитанных дисковых блоков для всех индексов таблицы

WAL запись в секунду

WAL запись в секунду

pg_wal_bytes

PromQL-запрос «WAL запись в секунду»

Использование памяти

host_memory_bytes
host_memory_used_bytes
host_memory_free_bytes

PromQL-запрос «Использование памяти»

Использование памяти программами

host_memory_used_percentage

PromQL-запрос «Использование памяти программами»

Использование ЦПУ в системе

host_cpu_usage_percentage

PromQL-запрос «Использование ЦПУ в системе»

Использование файловой системы

host_filesystem_bytes
host_filesystem_free_bytes
host_filesystem_used_bytes

PromQL-запрос «Использование файловой системы»

Использование файловой системы (в процентах)

host_filesystem_usage_percentage

PromQL-запрос «Использование файловой системы (в процентах)»

Количество операций ввода-вывода на диске в секунду

host_filesystem_read_operations_sec
host_filesystem_write_operations_sec

PromQL-запрос «Количество операций ввода-вывода на диске в секунду»

Мощность потока ввода-вывода

host_filesystem_read_sec_mbytes
host_filesystem_write_sec_mbytes

PromQL-запрос «Мощность потока ввода-вывода»

Время в ожидании завершения операций ввода-вывода

host_filesystem_read_await_seconds
host_filesystem_write_await_seconds

PromQL-запрос «Время в ожидании завершения операций ввода-вывода»

Средний размер очереди ввода-вывода

host_filesystem_avgqu_sz_bytes

PromQL-запрос «Средний размер очереди ввода-вывода»

Статистика использования сети

host_network_received_bytes
host_network_sent_bytes
host_network_average_received_package
host_network_average_sent_package

PromQL-запрос «Статистика использования сети»

Скорость передачи данных по сети

host_network_received_sec_bytes
host_network_sent_sec_bytes

PromQL-запрос «Скорость передачи данных по сети»

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

host_network_received_package
host_network_sent_package

PromQL-запрос «Статистика по сетевым пакетам»

Место хранения#

Kintsugi хранит все метрики в timeseries-хранилище (системы VictoriaMetrics или TimescaleDB).

В случае применения TimescaleDB сервис collector использует маршрут /write сервиса tsdbmon для сохранения метрик, в ином случае, при работе с VictoriaMetrics collector использует маршрут /import сервиса Prometheus.

SQL-запросы получения значений метрик#

Настройки автовакуума#

SELECT
  (SELECT setting::BIGINT
   FROM pg_settings
   WHERE name = 'autovacuum_freeze_max_age') autovacuum_freeze_max_age,

  (SELECT setting::int
   FROM pg_settings
   WHERE name = 'autovacuum_max_workers') autovacuum_max_workers

Автовакуум до лимита#

SELECT datname,
       CASE
           WHEN
                  (SELECT typlen
                   FROM pg_type
                   WHERE oid = 28) = 4 THEN 2147483647 - age(datfrozenxid)
           ELSE (9223372 * 10 ^ 18)-1 - age(datfrozenxid)
       END AS
LIMIT
FROM pg_database
ORDER BY 2 ASC
LIMIT 25

Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных)#

SELECT schemaname,
       relname,
       vacuum_count,
       autovacuum_count
FROM pg_stat_user_tables
ORDER BY vacuum_count DESC,
         autovacuum_count DESC
LIMIT 25

Количество процессов регулярного автовакуума#

WITH queries AS MATERIALIZED
  (SELECT datname, query
   FROM pg_stat_activity act
   WHERE act.query ~ * '^autovacuum*(?:(?!.*\bwraparound\b))')
SELECT dat.datname,
       COUNT(query) AS regular
FROM pg_database dat
LEFT JOIN queries q ON dat.datname = q.datname
WHERE NOT dat.datistemplate
GROUP BY dat.datname
ORDER BY regular DESC
LIMIT 25

Количество процессов пользовательского vacuum#

WITH queries AS MATERIALIZED
  (SELECT datname, query
   FROM pg_stat_activity act
   WHERE act.query ~ * '^vacuum')
SELECT dat.datname,
       COUNT(query) AS USER
FROM pg_database dat
LEFT JOIN queries q ON dat.datname = q.datname
WHERE NOT dat.datistemplate
GROUP BY dat.datname
ORDER BY USER DESC
LIMIT 25

Количество процессов wraparound autovacuum#

WITH queries AS MATERIALIZED
  (SELECT datname, query
   FROM pg_stat_activity act
   WHERE act.query ~ * '^autovacuum.*to prevent wraparound')
SELECT dat.datname,
       COUNT(query) AS wraparounds
FROM pg_database dat
LEFT JOIN queries q ON dat.datname = q.datname
WHERE NOT dat.datistemplate
GROUP BY dat.datname
ORDER BY wraparounds DESC
LIMIT 25;

Статистика работы фоновых процессов#

SELECT current_setting('block_size') AS block_size,
       checkpoints_timed,
       checkpoints_req,
       checkpoint_write_time,
       checkpoint_sync_time,
       buffers_checkpoint * current_setting('block_size')::float AS buffers_checkpoint,
       buffers_clean * current_setting('block_size')::float AS buffers_clean,
       buffers_backend * current_setting('block_size')::float AS buffers_backend
FROM pg_stat_bgwriter

Статистика баз данных#

SELECT datname,
       deadlocks,
       COALESCE(ROUND(100 * blks_hit / NULLIF((blks_hit + blks_read),0), 2), 0) AS hit_ratio,
       temp_bytes,
       conflicts,
       xact_commit,
       xact_rollback,
       tup_returned,
       tup_fetched,
       tup_inserted,
       tup_updated,
       tup_deleted
FROM pg_stat_database
WHERE datname NOT IN ('template0',
                      'template1')
ORDER BY deadlocks DESC,
         hit_ratio DESC,
         temp_bytes DESC,
         xact_commit + xact_rollback DESC,
         tup_returned + tup_fetched + tup_inserted + tup_updated + tup_deleted DESC
LIMIT 25

Страницы (блоки), измененные запросами (Топ 5)#

SELECT current_setting('block_size') AS block_size,
       t2.rolname,
       t3.datname,
       queryid::text,
       (t1.shared_blks_dirtied + t1.local_blks_dirtied) * current_setting('block_size')::float AS dirty
FROM pg_stat_statements t1
JOIN pg_roles t2 ON t1.userid = t2.oid
JOIN pg_database t3 ON t1.dbid = t3.oid
ORDER BY dirty DESC
LIMIT 5

Статистика работы процесса архивации WAL#

SELECT archived_count,
       failed_count
FROM pg_stat_archiver

Статистика по операциям ввода/вывода для пользовательских таблиц#

SELECT relname,
       COALESCE(ROUND(100 * heap_blks_hit / NULLIF((heap_blks_hit + heap_blks_read),0), 2), 0) AS heap_hit_ratio,
       COALESCE(ROUND(100 * idx_blks_hit / NULLIF((idx_blks_hit + idx_blks_read),0), 2), 0) AS idx_hit_ratio
FROM pg_statio_user_tables
ORDER BY heap_hit_ratio DESC,
         idx_hit_ratio DESC
LIMIT 25

Топ 5 запросов с максимальным общим временем, затраченным на оператор#

SELECT t2.rolname,
       t3.datname,
       total_time / 1000 AS total_time_sec,
       left(query, 32) AS query,
       queryid
FROM pg_stat_statements t1
JOIN pg_roles t2 ON t1.userid = t2.oid
JOIN pg_database t3 ON t1.dbid = t3.oid
WHERE datname NOT IN ('template0',
                      'template1')
ORDER BY total_time DESC
LIMIT 5

Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором#

SELECT t2.rolname,
       t3.datname,
       ROWS,
       left(query, 32) AS query,
       queryid::text
FROM pg_stat_statements t1
JOIN pg_roles t2 ON t1.userid = t2.oid
JOIN pg_database t3 ON t1.dbid = t3.oid
WHERE datname NOT IN ('template0',
                      'template1')
ORDER BY ROWS DESC
LIMIT 5

Активность базы данных#

SELECT 1 AS available

Размер табличных пространств#

SELECT spcname,
       pg_tablespace_size(spcname) AS SIZE
FROM pg_tablespace
ORDER BY SIZE DESC
LIMIT 25

Общее количество серверных процессов по состояниям#

SELECT state,
       count(*)
FROM pg_stat_activity
GROUP BY state

Общая задержка в байтах для процесса репликации#

SELECT client_addr,
       pg_current_wal_lsn() - replay_lsn AS total_lag_bytes
FROM pg_stat_replication
ORDER BY client_addr DESC
LIMIT 25;

WAL запись в секунду#

SELECT wal_bytes from pg_stat_wal;

PromQL-запросы получения метрик#

PromQL-запросы используются сервисом kmetrics для извлечения значений метрик из БД timeseries-хранилища.

Xid transaction age#

pg_settings_autovacuum_freeze_max_age{$LABELS}

Максимальное количество процессов автовакуума#

pg_settings_autovacuum_max_workers{$LABELS}

PromQL-запрос «Автовакуум до лимита»#

pg_autovacuum_limit{$LABELS}

Количество vacuum#

floor(increase(pg_vacuum_for_each_table_vacuum_count{$LABELS}[30s]))

Количество автовакуум#

floor(increase(pg_vacuum_for_each_table_autovacuum_count{$LABELS}[30s]))

Количество регулярных автовакуум#

pg_vacuum_regular_runs{$LABELS}

Количество пользовательских vacuum#

pg_vacuum_user_runs{$LABELS}

PromQL-запрос «Количество процессов wraparound autovacuum»#

pg_vacuum_wraparounds{$LABELS}

Записано фоновыми процессами#

rate(pg_stat_bgwriter_buffers_backend{$LABELS}[30s])

Записано фоновым процессам записи#

rate(pg_stat_bgwriter_buffers_clean{$LABELS}[30s])

Записано во время контрольных точек#

rate(pg_stat_bgwriter_buffers_checkpoint{$LABELS}[30s])

Количество запрошенных контрольных точек#

ceil(rate(pg_stat_bgwriter_checkpoints_req{$LABELS}[1m]))

Количество запланированных контрольных точек#

ceil(rate(pg_stat_bgwriter_checkpoints_timed{$LABELS}[1m]))

Время записи на диск контрольной точкой#

rate(pg_stat_bgwriter_checkpoint_write_time{$LABELS}[1m])

Время синхронизации на диск контрольной точкой#

rate(pg_stat_bgwriter_checkpoint_sync_time{$LABELS}[1m])

Объем данных, записанных во временные файлы#

sum(rate(pg_stat_database_temp_bytes{$LABELS}[30s]))

Коэффициент попаданий в кеш#

pg_stat_database_hit_ratio{$LABELS}

Количество взаимных блокировок#

irate(pg_stat_database_deadlocks{$LABELS}[30s])

Количество ошибок контрольных сумм в базе данных#

irate(pg_stat_database_checksum_failures{$LABELS}[30s])

Количество запросов, отмененных из-за конфликта#

irate(pg_stat_database_checksum_conflicts{$LABELS}[30s])

Количество зафиксированных транзакций#

irate(pg_stat_database_xact_commit{$LABELS}[30s])

Количество откатанных транзакций#

irate(pg_stat_database_xact_rollback{$LABELS}[30s])

Количество строк, возвращенное запросами#

irate(pg_stat_database_tup_returned{$LABELS}[30s])

Количество строк, извлеченное запросами#

irate(pg_stat_database_tup_fetched{$LABELS}[30s])

Количество строк, вставленное запросами#

irate(pg_stat_database_tup_inserted{$LABELS}[30s])

Количество строк, обновленное запросами#

irate(pg_stat_database_tup_updated{$LABELS}[30s])

Количество строк, удаленное запросами#

irate(pg_stat_database_tup_deleted{$LABELS}[30s])

Страницы (блоки), измененные запросами#

rate(pg_dirtypages_dirty{$LABELS}[30s])

Число файлов WAL, которые были успешно архивированы#

ceil(rate(pg_stat_archiver_archived_count{$LABELS}[30s]))

Число неудачных попыток архивации файлов WAL#

ceil(rate(pg_stat_archiver_failed_count{$LABELS}[30s]))

Объем блоков, найденных в буферном кеше против прочитанных дисковых блоков для объекта#

pg_statio_user_tables_heap_hit_ratio{$LABELS}

Объем блоков, найденных в буферном кеше против прочитанных дисковых блоков для всех индексов таблицы#

pg_statio_user_tables_idx_hit_ratio{$LABELS}

PromQL-запрос «Топ 5 запросов с максимальным общим временем, затраченным на оператор»#

pg_stat_statements_total_time_sec{$LABELS}

PromQL-запрос «Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором»#

pg_stat_statements_rows{$LABELS}

PromQL-запрос «Активность базы данных»#

pg_status_available{$LABELS}

PromQL-запрос «Размер табличных пространств»#

pg_tablespace_size{$LABELS}

PromQL-запрос «Общее количество серверных процессов по состояниям»#

pg_activity_count{$LABELS}

PromQL-запрос «Общая задержка в байтах для процесса репликации»#

pg_stat_replication_total_lag_bytes{$LABELS}

PromQL-запрос «WAL запись в секунду»#

irate(pg_wal_bytes{$LABELS}[30s])

PromQL-запрос «Использование ЦПУ в системе»#

host_cpu_usage_percentage{$LABELS}

PromQL-запрос «Использование памяти»#

В виджете Использование памяти строится три графика:

  • Всего.

    host_memory_bytes{$LABELS}
    
  • Использовано.

    host_memory_used_bytes{$LABELS}
    
  • Всего свободно.

    host_memory_free_bytes{$LABELS}
    

PromQL-запрос «Использование памяти программами»#

host_memory_used_percentage{$LABELS}

PromQL-запрос «Использование файловой системы»#

В виджете Использование файловой системы строится три графика:

  • Всего.

    host_filesystem_bytes{$LABELS}
    
  • Использовано.

    host_filesystem_used_bytes{$LABELS}
    
  • Всего свободно.

    host_filesystem_free_bytes{$LABELS}
    

PromQL-запрос «Использование файловой системы (в процентах)»#

host_filesystem_usage_percentage{$LABELS}

PromQL-запрос «Количество операций ввода-вывода на диске в секунду»#

В виджете Количество операций ввода-вывода на диске в секунду строится два графика:

  • Количество операций чтения в секунду.

    host_filesystem_read_operations_sec{$LABELS}
    
  • Количество операций записи в секунду.

    host_filesystem_write_operations_sec{$LABELS}
    

PromQL-запрос «Мощность потока ввода-вывода»#

В виджете Мощность потока ввода-вывода строится два графика:

  • Поток чтения.

    host_filesystem_read_sec_mbytes{$LABELS}
    
  • Поток записи.

    host_filesystem_write_sec_mbytes{$LABELS}
    

PromQL-запрос «Время в ожидании завершения операций ввода-вывода»#

В виджете Время в ожидании завершения операций ввода-вывода строится два графика:

  • Ожидание чтения.

    host_filesystem_read_await_seconds{$LABELS}
    
  • Ожидание записи.

    host_filesystem_write_await_seconds{$LABELS}
    

PromQL-запрос «Средний размер очереди ввода-вывода»#

host_filesystem_avgqu_sz_bytes{$LABELS}

PromQL-запрос «Статистика использования сети»#

В виджете Статистика использования сети строится четыре графика:

  • Принято байт.

    host_network_received_bytes{$LABELS}
    
  • Отправлено байт.

    host_network_sent_bytes{$LABELS}
    
  • Средний размер принятого пакета.

    host_network_average_received_package{$LABELS}
    
  • Средний размер отправленного пакета.

    host_network_average_sent_package{$LABELS}
    

PromQL-запрос «Скорость передачи данных по сети»#

В виджете Скорость передачи данных по сети строится два графика:

  • Скорость приема данных.

    host_network_received_sec_bytes{$LABELS}
    
  • Скорость отправки данных.

    host_network_sent_sec_bytes{$LABELS}
    

PromQL-запрос «Статистика по сетевым пакетам»#

В виджете Статистика по сетевым пакетам строится два графика:

  • Принято пакетов.

    host_network_received_package{$LABELS}
    
  • Отправлено пакетов.

    host_network_sent_package{$LABELS}