Бизнес метрики сервиса inform#
Kintsugi использует Pods сервиса inform для выполнения SQL-запросов на получение метрик для обзорной панели. Для визуального представления метрик ui обращается к inform, указывая в запросе идентификатор объекта мониторинга.
Сервис inform предоставляет следующие метрики для обзорной панели объекта мониторинга.
Список поддерживаемых метрик#
Имя метрики |
Запрос метрики для PostgreSQL 11, 12, 13 и Pangolin 4, 5 |
Описание |
|---|---|---|
Версия PostgreSQL и версия Pangolin |
||
Время старта СУБД и время работы СУБД + роль в кластере + дата обновления конфигурации |
||
Репликация и конфигурация репликации |
||
Статус подключения |
||
Производительность СУБД |
Для PostgreSQL 13 и Pangolin 5: Query 7; Query 8, Query 17. |
Среднее время – среднее время выполнения запроса. Вычисляется по формуле |
Очищено контрольными точками |
Отображает в процентах количество буферов, очищенных с помощью процесса контрольной точки. Вычисляется по формуле |
|
Статистика БД |
Процент попадания в кэш – оценка объема данных, берущихся из кэша shared buffers против объем прочитанного с диска. Вычисляется по формуле |
|
Зацикливание |
Оценка в процентах количества доступных номеров счетчиков транзакций. Вычисляется по формуле |
|
Временные файлы |
Показывает последнее значение объема данных, временно записанных на диск для выполнения запросов |
|
Транзакции > 1 мин |
Транзакции со статусом «active» в наблюдаемой базе данных дольше 1 минуты |
|
Список БД |
Информация о базах данных в наблюдаемой СУБД |
SQL Query 1#
SELECT version() AS version, (SELECT 'Platform V Pangolin' AS edition WHERE EXISTS (SELECT * FROM pg_catalog.pg_proc WHERE proname='sber_version'));
Пример выходных данных для Pangolin 4, 5:
| version | edition |
|---------------------------------------------------------------------------------------------------------+---------------------|
| PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit | Platform V Pangolin |
Пример выходных данных для PostgreSQL 11, 12, 13:
| version | edition |
|-------------------------------------------------------------------------------------------------------------------------------+---------|
| PostgreSQL 11.22 (Debian 11.22-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit | |
SQL Query 2#
SELECT now() - pg_postmaster_start_time() AS uptime,pg_postmaster_start_time() AS boot_time, now() - pg_conf_load_time() AS conf_reload_time, pg_is_in_recovery() AS is_in_recovery;
Пример выходных данных:
| uptime | boot_time | conf_reload_time | is_in_recovery |
|-------------------------+-------------------------------+-------------------------+----------------|
| 49 days 02:35:27.154125 | 2024-01-19 07:26:44.149556+00 | 49 days 02:35:27.25775 | f |
SQL Query 3#
SELECT setting, name FROM pg_settings WHERE name IN ('wal_keep_segments', 'synchronous_commit', 'synchronous_standby_names');
Пример выходных данных:
| setting | name |
|----------------------+---------------------------|
| on | synchronous_commit |
| | synchronous_standby_names |
| 0 | wal_keep_segments |
SQL Query 4#
SELECT client_addr, state, pg_size_pretty(pg_current_wal_lsn() - replay_lsn) AS total_lag_bytes, slot_type, active FROM pg_stat_replication stat LEFT JOIN pg_replication_slots slot ON stat.pid=slot.active_pid;
Пример выходных данных:
| client_addr | state | total_lag_bytes | slot_type | active |
|--------------+-----------+-----------------+------------+--------|
| 10.40.0.166 | streaming | 15 MB | physical | t |
Если сервер не является кластером, то выходные значения будут пустыми.
SQL Query 5#
SELECT current_setting('max_connections') AS max_connections, (current_setting('max_connections')::integer - count(*)::integer) AS available_connections, (current_setting('max_connections')::integer) - (current_setting('max_connections')::integer - count(*)::integer) AS used_connections, current_setting('superuser_reserved_connections') AS superuser_reserved_connections FROM pg_stat_activity;
Пример выходных данных:
| max_connections | available_connections | used_connections | superuser_reserved_connections |
|-----------------+-----------------------+------------------+--------------------------------|
| 400 | 373 | 27 | 10 |
SQL Query 6#
SELECT CASE WHEN (state IS NULL) THEN 'backend' ELSE state END, count(*) FROM pg_stat_activity GROUP BY state;
Пример выходных данных:
| state | count |
|----------------------+-------|
| backend | 5 |
| active | 1 |
SQL Query 7#
WITH
a AS (SELECT sum(calls) s FROM pg_stat_statements),
b AS (SELECT sum(calls) s FROM pg_stat_statements , pg_sleep(1))
SELECT b.s-a.s AS QPS FROM a,b;
Пример выходных данных:
| qps |
|-----|
| 45 |
SQL Query 8#
WITH
a AS (SELECT sum(xact_commit+xact_rollback) s FROM pg_stat_database),
b AS (SELECT sum(xact_commit+xact_rollback) s FROM pg_stat_database,
pg_stat_clear_snapshot(),
pg_sleep(1))
SELECT b.s-a.s AS TPS FROM a,b;
Пример выходных данных:
| tps |
|-----|
| 0 |
SQL Query 9#
SELECT round((sum(total_time) / sum(calls))::numeric , 3) AS avg_time
FROM pg_stat_statements;
Пример выходных данных:
| avg_time |
|----------|
| 29.802 |
SQL Query 10#
SELECT round(100.0*buffers_checkpoint/(buffers_checkpoint + buffers_clean + buffers_backend),1) AS clean_by_chkp FROM pg_stat_bgwriter;
Пример выходных данных:
| clean_by_chkp |
|----------------|
| 64.4 |
SQL Query 11#
SELECT round((100*sum(blks_hit)/(sum(blks_hit) + sum(blks_read)))::numeric , 3) as cache_hit_ratio, round((100 * sum(xact_commit) /(sum(xact_commit) + sum(xact_rollback)))::numeric, 3) as commit_ratio FROM pg_stat_database;
Пример выходных данных:
| cache_hit_ratio | commit_ratio |
|------------------+--------------|
| 99.999 | 99.956 |
SQL Query 12#
SELECT max(round(100*(age(datfrozenxid)/2147483647))) AS percent_towards_wraparond FROM pg_database;
Пример выходных данных:
| percent_towards_wraparound |
|------------------------------|
| 0 |
SQL Query 13#
SELECT pg_size_pretty(sum(temp_bytes)) AS temp_file_size FROM pg_stat_database;
Пример выходных данных:
| temp_file_size |
|----------------|
| 12 MB |
SQL Query 14#
SELECT extract(epoch FROM (CASE WHEN state = 'active' THEN age(now(), query_start) END)) AS idle,datname,usename,client_addr,application_name,pid,client_port,query,state FROM pg_stat_activity WHERE backend_type='client backend' AND state = 'active' AND (now() - xact_start) > time '00:01:00' LIMIT 10;
Пример выходных данных:
| idle | datname | usename | client_addr | application_name | pid | client_port | query | state |
|-----------------------+----------+----------+-------------+------------------+-------+-------------+------------------------+--------|
| 78.749085 | postgres | postgres | 10.40.20.3 | psql | 30603 | 55276 | SELECT PG_SLEEP(1000); | active |
SQL Query 15#
SELECT extract(epoch FROM (CASE WHEN state = 'idle in transaction' THEN age(now(), query_start) END)) AS idle,datname,usename,client_addr,application_name,pid,client_port,query,state FROM pg_stat_activity WHERE backend_type='client backend' AND state = 'idle in transaction' AND (now() - xact_start) > time '00:01:00' LIMIT 10;
Пример выходных данных:
| idle | datname | usename | client_addr | application_name | pid | client_port | query | state |
|---------------+----------+----------+-------------+------------------+-------+-------------+--------+---------------------|
| 22.921783 | postgres | postgres | 10.40.20.3 | psql | 31990 | 55300 | BEGIN; | idle in transaction |
SQL Query 16#
SELECT datname,pg_catalog.pg_get_userbyid(datdba) AS owner
,pg_catalog.pg_encoding_to_char(encoding) AS encoding
,datcollate
,datctype
,datallowconn
,datconnlimit
,pg_size_pretty(pg_catalog.pg_database_size(datname)) AS SIZE
,t.spcname as "Tablespace"
,pg_catalog.shobj_description(d.oid, 'pg_database') as "Description"
FROM pg_catalog.pg_database d
JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid
ORDER BY 1;
Пример выходных данных:
| datname | owner | encoding | datcollate | datctype | datallowconn | datconnlimit | size | Tablespace | Description |
|-------------+-----------+----------+-------------+-------------+--------------+--------------+-----------+------------+---------------------------------------------|
| First_db | db_admin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | t | -1 | 15 MB | Tbl_t | |
| postgres | postgres | UTF8 | en_US.utf-8 | en_US.utf-8 | t | -1 | 10049 kB | pg_default | default administrative connection database |
SQL Query 17#
SELECT round((sum(total_exec_time) / sum(calls))::numeric , 3) AS avg_time
FROM pg_stat_statements;
Пример выходных данных:
| avg_time |
|----------|
| 29.664 |
SQL Query 18#
SELECT setting, name FROM pg_settings WHERE name IN ('wal_keep_size', 'synchronous_commit', 'synchronous_standby_names');
Пример выходных данных:
| setting | name |
|----------------------+---------------------------|
| on | synchronous_commit |
| | synchronous_standby_names |
| 0 | wal_keep_size |