Перейти к основному содержимому

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

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

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

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

Название виджетаSQL-запросНазвание метрикиPromQL-запрос
Архивировано файловСтатистика работы процесса архивации WALpg_stat_archiver_archived_countЧисло файлов WAL, которые были успешно архивированы
Архивировано файловСтатистика работы процесса архивации WALpg_stat_archiver_failed_countЧисло неудачных попыток архивации файлов WAL
Время исполнения контрольных точекСтатистика работы фоновых процессовpg_stat_bgwriter_checkpoint_sync_timeВремя синхронизации на диск контрольной точкой
Время исполнения контрольных точекСтатистика работы фоновых процессовpg_stat_bgwriter_checkpoint_write_timeВремя записи на диск контрольной точкой
Доступность СУБДАктивность базы данныхpg_status_availablePromQL-запрос «Активность базы данных»
Запись на дискСтатистика работы фоновых процессов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_ageXid transaction age
Количество транзакций, оставшихся до принудительной остановки СУБД (txid wraparound)Автовакуум до лимитаpg_autovacuum_limitPromQL-запрос «Автовакуум до лимита»
Лаг репликацииОбщая задержка в байтах для процесса репликацииpg_stat_replication_total_lag_bytesPromQL-запрос «Общая задержка в байтах для процесса репликации»
Ошибки и нежелательные событияСтатистика баз данных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Количество процессов пользовательского vacuumpg_vacuum_user_runsКоличество пользовательских vacuum
Работающие процессы vacuum и autovacuumКоличество процессов wraparound autovacuumpg_vacuum_wraparoundsPromQL-запрос «Количество процессов wraparound autovacuum»
Размер табличных пространствРазмер табличных пространствpg_tablespace_sizePromQL-запрос «Размер табличных пространств»
СессииОбщее количество серверных процессов по состояниямpg_activity_countPromQL-запрос «Общее количество серверных процессов по состояниям»
Статистика контрольных точекСтатистика работы фоновых процессов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_rowsPromQL-запрос «Топ 5 запросов с максимальным числом строк, полученных или затронутых оператором»
Топ запросов по общему времени выполненияТоп 5 запросов с максимальным общим временем, затраченным на операторpg_stat_statements_total_time_secPromQL-запрос «Топ 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_bytesPromQL-запрос «WAL запись в секунду»
Использование памяти–host_memory_bytes
host_memory_used_bytes
host_memory_free_bytes
PromQL-запрос «Использование памяти»
Использование памяти программами–host_memory_used_percentagePromQL-запрос «Использование памяти программами»
Использование CPU в системе–host_cpu_usage_percentagePromQL-запрос «Использование CPU в системе»
Использование файловой системы–host_filesystem_bytes
host_filesystem_free_bytes
host_filesystem_used_bytes
PromQL-запрос «Использование файловой системы»
Использование файловой системы (в процентах)–host_filesystem_usage_percentagePromQL-запрос «Использование файловой системы (в процентах)»
Количество операций ввода-вывода на диске в секунду–host_filesystem_read_operations_sec
host_filesystem_write_operations_sec
PromQL-запрос «Количество операций ввода-вывода на диске в секунду»
Мощность потока ввода-вывода–host_filesystem_read_sec_bytes
host_filesystem_write_sec_bytes
PromQL-запрос «Мощность потока ввода-вывода»
Время в ожидании завершения операций ввода-вывода–host_filesystem_read_await_seconds
host_filesystem_write_await_seconds
PromQL-запрос «Время в ожидании завершения операций ввода-вывода»
Средний размер очереди ввода-вывода–host_filesystem_avgqu_sz_bytesPromQL-запрос «Средний размер очереди ввода-вывода»
Статистика использования сети–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).

В случае применения 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 для извлечения значений метрик из хранилища временных рядов VictoriaMetrics.

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}