SQL-запросы получения метрик для панели мониторинга «Метрики»#
Kintsugi использует поды сервиса collector для выполнения SQL-запросов на получение метрик. Далее для визуального представления метрик UI обращается к kmetrics с PromQL-запросом, возвращающим необходимые серии данных.
В соответствии с данным поведением устанавливается следующее соответствие между SQL-запросом сбора метрик поды сервиса collector и PromQL-запросом получения значений из timeseries-хранилища.
Сопоставление запросов метрик и графиков панели мониторинга «Метрики»#
Название виджета |
SQL-запрос |
Название метрики |
PromQL-запрос |
|---|---|---|---|
Архивировано файлов |
|
||
Архивировано файлов |
|
||
Время исполнения контрольных точек |
|
||
Время исполнения контрольных точек |
|
||
Доступность СУБД |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запись на диск |
|
||
Запуск операции vacuum по таблице |
Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных) |
|
|
Запуск операции vacuum по таблице |
Запуск операции vacuum по таблице (по каждой таблице в выбранных базах данных) |
|
|
Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound) |
|
||
Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound) |
|
||
Лаг репликации |
|
PromQL-запрос «Общая задержка в байтах для процесса репликации» |
|
Ошибки и нежелательные события |
|
||
Ошибки и нежелательные события |
|
||
Ошибки и нежелательные события |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Работающие процессы vacuum и autovacuum |
|
||
Размер табличных пространств |
|
||
Сессии |
|
PromQL-запрос «Общее количество серверных процессов по состояниям» |
|
Статистика контрольных точек |
|
||
Статистика контрольных точек |
|
||
Страницы (блоки) измененные запросами |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Строк в секунду |
|
||
Топ запросов по количеству возвращенных строк |
Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором |
|
PromQL-запрос «Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором» |
Топ запросов по общему времени выполнения |
Топ 5 запросов с максимальным общим временем, затраченным на оператор |
|
PromQL-запрос «Топ 5 запросов с максимальным общим временем, затраченным на оператор» |
Транзакций в секунду |
|
||
Транзакций в секунду |
|
||
blks_hit vs. blks_read |
|
||
heap_blks_hit vs. heap_blks_read |
Статистика по операциям ввода/вывода для пользовательских таблиц |
|
Объем блоков, найденных в буфферном кеше против прочитанных дисковых блоков для объекта |
idx_blks_hit vs. idx_blks_read |
Статистика по операциям ввода/вывода для пользовательских таблиц |
|
|
WAL запись в секунду |
|
||
Использование памяти |
– |
|
|
Использование памяти программами |
– |
|
|
Использование CPU в системе |
– |
|
|
Использование файловой системы |
– |
|
|
Использование файловой системы (в процентах) |
– |
|
PromQL-запрос «Использование файловой системы (в процентах)» |
Количество операций ввода-вывода на диске в секунду |
– |
|
PromQL-запрос «Количество операций ввода-вывода на диске в секунду» |
Мощность потока ввода-вывода |
– |
|
|
Время в ожидании завершения операций ввода-вывода |
– |
|
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-запрос «Использование 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}