SQL-запросы получения метрик для панели мониторинга «Метрики»#
Kintsugi использует поды сервиса collector для выполнения SQL-запросов на получение метрик. Полученные данные записываются в VictoriaMetrics в формате временных рядов. Далее для визуального представления метрик UI обращается к сервису kmetrics с использованием PromQL-запросов, которые выполняются непосредственно к VictoriaMetrics и возвращают необходимые серии данных.
В соответствии с данным поведением устанавливается следующее соответствие между SQL-запросами, выполняемыми подами сервиса collector для сбора метрик, и PromQL-запросами, используемыми для получения значений из VictoriaMetrics.
Сопоставление запросов метрик и графиков панели мониторинга «Метрики»#
Название виджета |
SQL-запрос |
Название метрики |
PromQL-запрос |
|---|---|---|---|
Архивировано файлов |
|
PromQL-запрос «Число файлов WAL, которые были успешно архивированы» |
|
Архивировано файлов |
|
PromQL-запрос «Число неудачных попыток архивации файлов WAL» |
|
Время исполнения контрольных точек |
|
PromQL-запрос «Время синхронизации на диск контрольной точкой» |
|
Время исполнения контрольных точек |
|
||
Доступность СУБД |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запуск операции vacuum по таблице |
Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных) |
|
|
Запуск операции vacuum по таблице |
Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных) |
|
|
Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound) |
|
||
Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound) |
|
||
Лаг репликации |
|
||
Ошибки и нежелательные события |
|
PromQL-запрос «Количество запросов, отмененных из-за конфликта» |
|
Ошибки и нежелательные события |
|
PromQL-запрос «Количество ошибок контрольных сумм в базе данных» |
|
Ошибки и нежелательные события |
|
||
Работающие процессы vacuum и autovacuum |
|
PromQL-запрос «Максимальное количество процессов автоочистки» |
|
Работающие процессы vacuum и autovacuum |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Размер табличных пространств |
|
||
Сессии |
|
PromQL-запрос «Общее количество серверных процессов по состояниям» |
|
Статистика контрольных точек |
|
||
Статистика контрольных точек |
|
PromQL-запрос «Количество запланированных контрольных точек» |
|
Страницы (блоки) измененные запросами |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Топ запросов по количеству возвращенных строк |
|
PromQL-запрос «Топ пользователей по количеству возвращенных строк из БД» |
|
Топ запросов по общему времени выполнения |
|
PromQL-запрос «Топ пользователей по общему времени выполнения в БД» |
|
Транзакций в секунду |
|
||
Транзакций в секунду |
|
||
blks_hit vs. blks_read |
|
||
heap_blks_hit vs. heap_blks_read |
Статистика по операциям ввода/вывода для пользовательских таблиц |
|
|
idx_blks_hit vs. idx_blks_read |
Статистика по операциям ввода/вывода для пользовательских таблиц |
|
|
WAL запись в секунду |
|
||
Использование памяти |
– |
|
|
Использование памяти программами |
– |
|
|
Использование CPU в системе |
– |
|
|
Использование файловой системы |
– |
|
|
Использование файловой системы (в процентах) |
– |
|
PromQL-запрос «Использование файловой системы (в процентах)» |
Количество операций ввода-вывода на диске в секунду |
– |
|
PromQL-запрос «Количество операций ввода-вывода на диске в секунду» |
Мощность потока ввода-вывода |
– |
|
|
Время в ожидании завершения операций ввода-вывода |
– |
|
PromQL-запрос «Время в ожидании завершения операций ввода-вывода» |
Средний размер очереди ввода-вывода |
– |
|
|
Статистика использования сети |
– |
|
|
Скорость передачи данных по сети |
– |
|
|
Статистика по сетевым пакетам |
– |
|
Место хранения#
При работе с 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
Количество процессов регулярного автоочистки#
SQL-запрос для PostgreSQL версии 11–12:
WITH queries AS (
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
SQL-запрос для PostgreSQL версии 12 и выше:
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#
SQL-запрос для PostgreSQL версии 11–12:
WITH queries AS (
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
SQL-запрос для PostgreSQL версии 12 и выше:
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#
SQL-запрос для PostgreSQL версии 11–12:
WITH queries AS (
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
SQL-запрос для PostgreSQL версии 12 и выше:
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
Статистика работы фоновых процессов#
SQL-запрос для PostgreSQL версии 11–17:
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
SQL-запрос для PostgreSQL версии 17–18:
SELECT
current_setting('block_size') AS block_size,
cp.num_timed AS checkpoints_timed,
cp.num_requested AS checkpoints_req,
cp.write_time AS checkpoint_write_time,
cp.sync_time AS checkpoint_sync_time,
cp.buffers_written * current_setting('block_size')::float AS buffers_checkpoint,
bg.buffers_clean * current_setting('block_size')::float AS buffers_clean,
(SELECT sum(writes * op_bytes)::float AS buffers_backend FROM pg_stat_io WHERE backend_type = 'client backend' AND context IN ('normal', 'vacuum')) AS buffers_backend
FROM pg_stat_checkpointer cp
CROSS JOIN pg_stat_bgwriter bg
SQL-запрос для PostgreSQL версии 18 и выше:
SELECT
current_setting('block_size') AS block_size,
cp.num_timed AS checkpoints_timed,
cp.num_requested AS checkpoints_req,
cp.write_time AS checkpoint_write_time,
cp.sync_time AS checkpoint_sync_time,
cp.buffers_written * current_setting('block_size')::float AS buffers_checkpoint,
bg.buffers_clean * current_setting('block_size')::float AS buffers_clean,
(SELECT sum(write_bytes)::float AS buffers_backend FROM pg_stat_io WHERE backend_type = 'client backend' AND context IN ('normal', 'vacuum')) AS buffers_backend
FROM pg_stat_checkpointer cp
CROSS JOIN pg_stat_bgwriter bg
Статистика баз данных#
SQL-запрос для PostgreSQL версии 11–12:
SELECT
datname,
deadlocks,
COALESCE(ROUND(100*blks_hit/NULLIF((blks_hit + blks_read),0),2),0) AS hit_ratio,
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, xact_commit+xact_rollback DESC, tup_returned+tup_fetched+tup_inserted+tup_updated+tup_deleted DESC
LIMIT 25
SQL-запрос для PostgreSQL версии 12 и выше:
SELECT
datname,
deadlocks,
COALESCE(ROUND(100*blks_hit/NULLIF((blks_hit + blks_read),0),2),0) AS hit_ratio,
COALESCE(checksum_failures, 0) AS checksum_failures,
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, checksum_failures DESC, conflicts DESC, xact_commit+xact_rollback DESC, tup_returned+tup_fetched+tup_inserted+tup_updated+tup_deleted DESC
LIMIT 25
Страницы (блоки), измененные запросами (Топ 5)#
SELECT
t2.rolname,
t3.datname,
(sum(t1.shared_blks_dirtied + t1.local_blks_dirtied)) * current_setting('block_size')::bigint 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
WHERE datname NOT IN ('template0', 'template1')
GROUP BY rolname, datname
ORDER BY dirty DESC
LIMIT 25
Статистика работы процесса архивации 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
Топ пользователей по общему времени выполнения в БД#
SQL-запрос для PostgreSQL версии 11–13:
SELECT
t2.rolname,
t3.datname,
SUM(total_time/1000)::bigint AS total_time_sec
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')
GROUP BY rolname, datname
ORDER BY total_time_sec DESC
LIMIT 25
SQL-запрос для PostgreSQL версии 13 и выше:
SELECT
t2.rolname,
t3.datname,
sum((total_plan_time + total_exec_time) / 1000)::bigint as total_time_sec
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')
GROUP BY rolname, datname
ORDER BY total_time_sec DESC
LIMIT 25
Топ пользователей по количеству возвращенных строк из БД#
SELECT
t2.rolname,
t3.datname,
SUM(t1.rows) as rows
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')
GROUP BY rolname, datname
ORDER BY rows DESC
LIMIT 25
Активность базы данных#
SELECT 1 AS available
Размер табличных пространств#
SELECT
spcname,
pg_tablespace_size(spcname) AS size
FROM pg_tablespace
ORDER BY size DESC
LIMIT 25
Общее количество серверных процессов по состояниям#
SELECT
CASE WHEN (state IS NULL) THEN 'backend' ELSE state END,
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 запись в секунду#
SQL-запрос для PostgreSQL версии 11–14:
SELECT pg_current_wal_lsn() - '0/0' wal_bytes
SQL-запрос для PostgreSQL версии 14 и выше:
SELECT wal_bytes
FROM pg_stat_wal
Объем данных, записанных во временные файлы#
SELECT SUM(temp_bytes) as temp_bytes
FROM pg_stat_database
WHERE datname NOT IN ('template0', 'template1')
PromQL-запросы получения метрик#
PromQL-запросы используются сервисом kmetrics для извлечения значений метрик из хранилища временных рядов VictoriaMetrics.
PromQL-запрос «Xid transaction age»#
pg_settings_autovacuum_freeze_max_age{$LABELS}
PromQL-запрос «Максимальное количество процессов автоочистки»#
pg_settings_autovacuum_max_workers{$LABELS}
PromQL-запрос «Автоочистка до лимита»#
pg_autovacuum_limit{$LABELS}
PromQL-запрос «Количество vacuum»#
ceil(rate(pg_vacuum_for_each_table_vacuum_count{$LABELS}[1m]))
PromQL-запрос «Количество автоочистки»#
ceil(rate(pg_vacuum_for_each_table_autovacuum_count{$LABELS}[1m]))
PromQL-запрос «Количество регулярной автоочистки»#
pg_vacuum_regular_runs{$LABELS}
PromQL-запрос «Количество пользовательских vacuum»#
pg_vacuum_user_runs{$LABELS}
PromQL-запрос «Количество процессов wraparound autovacuum»#
pg_vacuum_wraparounds{$LABELS}
PromQL-запрос «Записано фоновыми процессами»#
rate(pg_stat_bgwriter_buffers_backend{$LABELS}[1m])
PromQL-запрос «Записано фоновым процессам записи»#
rate(pg_stat_bgwriter_buffers_clean{$LABELS}[1m])
PromQL-запрос «Записано во время контрольных точек»#
rate(pg_stat_bgwriter_buffers_checkpoint{$LABELS}[1m])
PromQL-запрос «Количество запрошенных контрольных точек»#
ceil(rate(pg_stat_bgwriter_checkpoints_req{$LABELS}[1m]))
PromQL-запрос «Количество запланированных контрольных точек»#
ceil(rate(pg_stat_bgwriter_checkpoints_timed{$LABELS}[1m]))
PromQL-запрос «Время записи на диск контрольной точкой»#
rate(pg_stat_bgwriter_checkpoint_write_time{$LABELS}[1m])
PromQL-запрос «Время синхронизации на диск контрольной точкой»#
rate(pg_stat_bgwriter_checkpoint_sync_time{$LABELS}[1m])
PromQL-запрос «Коэффициент попаданий в кеш»#
pg_stat_database_hit_ratio{$LABELS}
PromQL-запрос «Количество взаимных блокировок»#
irate(pg_stat_database_deadlocks{$LABELS}[1m])
PromQL-запрос «Количество ошибок контрольных сумм в базе данных»#
irate(pg_stat_database_checksum_failures{$LABELS}[1m])
PromQL-запрос «Количество запросов, отмененных из-за конфликта»#
irate(pg_stat_database_checksum_conflicts{$LABELS}[1m])
PromQL-запрос «Количество зафиксированных транзакций»#
irate(pg_stat_database_xact_commit{$LABELS}[1m])
PromQL-запрос «Количество откатанных транзакций»#
irate(pg_stat_database_xact_rollback{$LABELS}[1m])
PromQL-запрос «Количество строк, возвращенное запросами»#
irate(pg_stat_database_tup_returned{$LABELS}[1m])
PromQL-запрос «Количество строк, извлеченное запросами»#
irate(pg_stat_database_tup_fetched{$LABELS}[1m])
PromQL-запрос «Количество строк, вставленное запросами»#
irate(pg_stat_database_tup_inserted{$LABELS}[1m])
PromQL-запрос «Количество строк, обновленное запросами»#
irate(pg_stat_database_tup_updated{$LABELS}[1m])
PromQL-запрос «Количество строк, удаленное запросами»#
irate(pg_stat_database_tup_deleted{$LABELS}[1m])
PromQL-запрос «Страницы (блоки), измененные запросами»#
rate(pg_dirtypages_dirty{$LABELS}[1m])
PromQL-запрос «Число файлов WAL, которые были успешно архивированы»#
ceil(rate(pg_stat_archiver_archived_count{$LABELS}[1m]))
PromQL-запрос «Число неудачных попыток архивации файлов WAL»#
ceil(rate(pg_stat_archiver_failed_count{$LABELS}[1m]))
PromQL-запрос «Объем блоков, найденных в буферном кеше против прочитанных дисковых блоков для объекта»#
pg_statio_user_tables_heap_hit_ratio{$LABELS}
PromQL-запрос «Объем блоков, найденных в буферном кеше против прочитанных дисковых блоков для всех индексов таблицы»#
pg_statio_user_tables_idx_hit_ratio{$LABELS}
PromQL-запрос «Топ пользователей по общему времени выполнения в БД»#
pg_stat_statements_total_time_sec{$LABELS}
PromQL-запрос «Топ пользователей по количеству возвращенных строк из БД»#
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}[1m])
PromQL-запрос «Объем данных, записанных во временные файлы»#
rate(pg_stat_database_temp_bytes{$LABELS}[1m])
PromQL-запрос «Использование CPU в системе»#
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_bytes{$LABELS}Поток записи.
host_filesystem_write_sec_bytes{$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}