Метрики QHB
В настоящее время все метрики в QHB собираются на уровне всего кластера баз данных и относятся ко всему набору процессов QHB независимо от того, являются ли они фоновыми или поддерживающими пользовательские подключения. Также часть метрик собирается на уровне баз данных и на уровне бэкендов. Данные метрик отсылаются на коллектор и агрегатор метрик metricsd, краткое описание которого можно найти в главе Сервер метрик. Далее метрики агрегируются и записываются в Graphite, в качестве интерфейса к которому выступает Grafana.
Типы метрик
- Gauge — неотрицательное целое значение. Может быть установлено, увеличено или уменьшено на заданное число.
- Counter — неотрицательное целое значение. Может быть только увеличено на заданное число.
- Timer — неотрицательное целое значение, длительность в наносекундах. Значение
может быть только записано; во время агрегации вычисляется ряд статистических
характеристик:
- sum — сумма значений
- count — количество записанных значений
- max — максимальное из записанных значений
- min — минимальное из записанных значений
- mean — среднее арифметическое
- median — медиана
- std — стандартное квадратичное отклонение
- при необходимости список перцентилей
Группы метрик
sys
К группе sys относятся различные системные метрики.
Сбор системных метрик регулируется двумя глобальными константами:
- qhb_os_monitoring — логическая константа, по умолчанию значение off (выключена). При значении on выполняется периодический сбор метрик.
- qhb_os_stat_period — период сбора системной статистики в секундах, по умолчанию 30 секунд.
Таблица 48. Метрики загрузки и ЦП
| Имя | Описание | Тип |
|---|---|---|
| sys.load_average.1min | load average за последнюю минуту | gauge |
| sys.load_average.5min | То же, но за последние 5 минут | gauge |
| sys.load_average.15min | То же, но за последние 15 минут | gauge |
| sys.cpu.1min | Процент загрузки процессоров за последнюю минуту | gauge |
| sys.cpu.5min | То же, но за последние 5 минут | gauge |
| sys.cpu.15min | То же, но за последние 15 минут | gauge |
Примечание
Значения метрик load average содержат значения с точностью до сотых, однако при передаче данных в силу технических особенностей исходные значения умножаются на 100 и передаются как целые числа. Поэтому при выводе данных следует учитывать эту особенность и делить значения на 100.
load average — усредненное количество исполняемых и ожидающих потоков за заданный
интервал времени (1, 5 и 15 минут). Обычно соответствующие значения выводятся с
помощью команд uptime, top или cat /proc/loadavg. Подробную информацию об
особенностях, связанными с этим показателем, можно найти в переводе статьи
Load Average в Linux.
Если значение этого показателя за последнюю минуту больше, чем за последние 5 и 15 минут, нагрузка растет, если меньше — падает. Однако этот показатель важен не сам по себе, а относительно общего числа процессоров. Дополнительные и производные от load average метрики по загрузке процессоров sys.cpu.Nmin показывают приблизительный процент загрузки процессоров с учетом их количества и рассчитываются по следующей упрощенной формуле:
sys.cpu.<N>min = sys.load_average.<N>min / cpu_count * 100
где cpu_count — количество процессоров в системе, а N принимает значения 1, 5 или 15.
Количество процессоров рассчитывается как произведение количества физических
сокетов, ядер на сокет и нитей на ядро. Команда lscpu выводит все необходимые
данные. Например:
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
В данном случае cpu_count = 2 * 4 * 1 = 8.
Альтернативным и более простым методом может быть получение этого значения через
команду nproc.
Таким образом, в данном случае загрузка в 100% будет достигнута, если величина load average будет стремиться к 8. Однако эти расчеты и значения будут иметь довольно приблизительный и даже условный характер, что показывает приведенная выше по ссылке статья.
Таблица 49. Метрики использования памяти
| Имя | Описание | Тип |
|---|---|---|
| sys.mem.total | Общий размер доступной памяти RAM (размер установленной за вычетом памяти, занимаемой ядром OS) | gauge |
| sys.mem.used | Используемая память | gauge |
| sys.mem.free | Неиспользуемая память | gauge |
| sys.mem.available | Память, доступная для запускаемых приложений (не включая swap, но учитывая потенциально освобождаемую память, занимаемую страничным кешем) | gauge |
| sys.swap.total | Общий размер файла подкачки | gauge |
| sys.swap.free | Неиспользуемая память файла подкачки | gauge |
Значения метрик соответствуют полям из вывода утилиты free (значения
отображаются в килобайтах, т. е. соответствуют выводу free -k).
Таблица 50. Соответствие значений метрик полям вывода утилиты free
| Метрика | Поле утилиты free |
|---|---|
| sys.mem.total | Mem:total |
| sys.mem.used | Mem:used |
| sys.mem.free | Mem:free |
| sys.mem.available | Mem:available |
| sys.swap.total | Swap:total |
| sys.swap.free | Swap:free |
Величину, соответствующую выводимому в утилите free значению Mem:buff/cache, можно рассчитать по формуле:
Mem:buff/cache = Mem:total - Mem:used - Mem:free
Таким образом, в Grafana можно, используя функцию diffSeries, рассчитывать и выводить это значение на основании других имеющихся данных.
Значение Mem:shared (данные виртуальной файловой системы tmpfs) через метрики не выводится.
Значение Swap:used можно рассчитать по формуле:
Swap:used = Swap:total - Swap:free
Это значение также можно выводить в Grafana в виде рассчитываемой величины через функцию diffSeries.
Более подробное описание этих показателей можно получить через справочную систему операционной системы для утилиты free (Для этого вызовите man free).
Таблица 51. Метрики использования дискового пространства
| Имя | Описание | Тип |
|---|---|---|
| sys.disk_space.total | Объем дисковой системы, на которой находится каталог с данными (в байтах) | gauge |
| sys.disk_space.free | Свободное пространство в дисковой системе, на которой находится каталог с данными (в байтах) | gauge |
Метрики относятся к дисковой системе, на которой расположен каталог с файлами базы данных. Этот каталог определяется параметром командной строки -D при запуске базы данных либо переменной среды $PGDATA. Параметр data_directory в файле конфигурации qhb.conf может переопределять расположение каталога с данными.
Таблица 52. Другие системные метрики
| Имя | Описание | Тип |
|---|---|---|
| sys.processes | Общее количество запущенных в системе процессов | gauge |
| sys.uptime | Количество секунд, прошедших с начала запуска системы | gauge |
db_stat
К группе db_stat относятся метрики чтения и записи блоков на уровне экземпляра QHB.
Таблица 53. Метрики чтения и записи блоков
| Имя | Описание | Тип |
|---|---|---|
| qhb.db_stat.numbackends | Количество активных серверных процессов | gauge |
| qhb.db_stat.blocks_fetched | Количество блоков, полученных при чтении | counter |
| qhb.db_stat.blocks_hit | Количество блоков, найденных в кеше при чтении | counter |
| qhb.db_stat.blocks_read_time | Время чтения блоков, в миллисекундах | counter |
| qhb.db_stat.blocks_write_time | Время записи блоков, в миллисекундах | counter |
| qhb.db_stat.conflicts.tablespace | Количество запросов, отмененных из-за удаленных табличных пространств | counter |
| qhb.db_stat.conflicts.lock | Количество запросов, отмененных из-за тайм-аутов блокировок | counter |
| qhb.db_stat.checksum_failures | Количество несовпадений контрольной суммы страницы данных | counter |
| qhb.db_stat.conflicts.snapshot | Количество запросов, отмененных из-за устаревших снимков состояния | counter |
| qhb.db_stat.conflicts.bufferpin | Количество запросов, отмененных из-за закрепленных буферов | counter |
| qhb.db_stat.conflicts.startup_deadlock | Количество запросов, отмененных из-за взаимных блокировок | counter |
| qhb.db_stat.tuples.returned | Количество строк, полученных при последовательном сканировании | counter |
| qhb.db_stat.tuples.fetched | Количество строк, полученных при сканировании по индексу | counter |
| qhb.db_stat.tuples.inserted | Количество строк, добавленных в базу данных | counter |
| qhb.db_stat.tuples.updated | Количество строк, измененных в базе данных | counter |
| qhb.db_stat.tuples.deleted | Количество строк, удаленных из базы данных | counter |
Также генерируются версии этих метрик по базам данных и отдельным бэкендам. В имена метрик включается идентификатор базы данных, например, qhb.db_stat.db_16384.numbackends, или (для некоторых метрик) номер процесса, например: qhb.db_stat.34567.blocks_fetched. Данная группа метрик может генерировать большие объемы данных, поэтому администратор должен решить, действительно ли необходимо оставлять эту группу метрик включенной.
На основании метрик qhb.db_stat.blocks_fetched и qhb.db_stat.blocks_hit рассчитывается коэффициент попадания в кеш:
k = blocks_hit / blocks_fetched * 100%
Хорошим уровнем обычно считается значение более 90%. Если значение коэффициента существенно ниже этой отметки, желательно рассмотреть возможность увеличения объема буферного кеша.
bgwr
К группе bgwr относятся метрики фонового процесса записи.
Таблица 54. Метрики фонового процесса записи
| Имя | Описание | Тип |
|---|---|---|
| qhb.bgwr.checkpoints_timed | Количество запланированных контрольных точек, которые были выполнены | counter |
| qhb.bgwr.checkpoints_req | Количество запрошенных контрольных точек, выполненных вне очереди запланированных | counter |
| qhb.bgwr.checkpoint_write_time | Время, потраченное на этап обработки контрольной точки, где файлы записываются на диск, в миллисекундах | counter |
| qhb.bgwr.checkpoint_sync_time | Время, потраченное на этап обработки контрольной точки, где файлы синхронизируются с диском, в миллисекундах | counter |
| qhb.bgwr.buffers_checkpoint | Количество буферов, записанных во время контрольных точек | counter |
| qhb.bgwr.buffers_clean | Количество буферов, записанных фоновым процессом записи | counter |
| qhb.bgwr.maxwritten_clean | Сколько раз фоновый процесс записи останавливал сброс грязных страниц, поскольку записывал слишком много буферов | counter |
| qhb.bgwr.buffers_backend | Количество буферов, записанных непосредственно обслуживающим процессом | counter |
| qhb.bgwr.buffers_backend_fsync | Сколько раз обслуживающий процесс вызывал fsync сам (обычно их обрабатывает фоновый процесс записи, даже когда обслуживающий процесс выполняет запись самостоятельно) | counter |
| qhb.bgwr.buffers_alloc | Количество выделенных буферов | counter |
Данные по перечисленным метрикам отображаются в разделе «Контрольные точки и операции с буферами» информационной панели QHB. Обычно при выполнении запланированных контрольных точек сначала происходит запись информации о начале контрольной точки, затем в течение некоторого времени идет сброс блоков на диск и по окончании контрольной точки фиксируется информация о продолжительности записи и синхронизации данных. В случае обработки запланированной контрольной точки запись блоков равномерно распределяется во времени согласно параметрам настройки, чтобы снизить влияние этого процесса на общий ввод/вывод. При контрольных точках, запрошенных через команду, сброс блоков происходит сразу, без искусственной задержки.
Также генерируются версии этих метрик по базам данных и отдельным бэкендам. В имена метрик включается идентификатор базы данных, например: qhb.bgwr.db_16384.buffers_backend, или номер процесса, например: qhb.bgwr.11156.buffers_backend
mem_stat
К группе mem_stat относятся метрики для отслеживания размера памяти work area.
Память work area может быть приблизительно описана как память, используемая внутренними операциями сортировки и хеш-таблицами. Размер этой памяти контролируется глобальным параметром конфигурации work_mem: при превышении лимита вместо оперативной памяти начинают использоваться временные файлы на диске. Параметр work_mem ограничивает память, используемую единичной операцией.
В группу mem_stat входит три разновидности метрик с общим именем work_area:
- qhb.mem_stat.work_area — показывает общий размер work area в байтах всего кластера
- qhb.mem_stat.db_<номер>.work_area — показывает размер work area в байтах для одной базы данных
- qhb.mem_stat.
.work_area — показывает размер work area в байтах для одного рабочего процесса
Метрики второй и третьей разновидностей создаются динамически.
Все метрики типа gauge, то есть их значения могут уменьшаться по мере освобождения ранее занятой памяти.
temp_stat
К группе temp_stat относятся метрики по временным файлам и таблицам QHB.
Таблица 55. Метрики по временным файлам и таблицам
| Имя | Описание | Тип |
|---|---|---|
| qhb.temp_stat.temp_files | Количество временных файлов, созданных за период агрегации | counter |
| qhb.temp_stat.temp_bytes | Общий объем временных файлов, созданных за период агрегации, в байтах | counter |
| qhb.temp_stat.temp_tables | Количество временных таблиц, созданных за период агрегации | counter |
| qhb.temp_stat.temp_table_bytes | Общий объем временных таблиц, созданных за период агрегации, в байтах | counter |
Данные собираются за период агрегации коллектора метрик. Обновление данных
происходит по окончании соответствующей операции, например, при создании временной
таблицы с указанием DROP ON COMMIT обновление статистики произойдет после
выполнения команды COMMIT при удалении временной таблицы. В некоторых случаях
объем, занимаемый временными файлами и таблицами, может быть весьма существенным.
Также генерируются версии этих метрик по базам данных и отдельным бэкендам. В имена метрик включается идентификатор базы данных, например: qhb.temp_stat.db_16384.temp_bytes, или номер процесса, например: qhb.temp_stat.22810.temp_bytes.
wal
К группе wal относятся метрики процесса архивации журнала упреждающей записи.
Таблица 56. Метрики процесса архивации WAL
| Имя | Описание | Тип |
|---|---|---|
| qhb.wal.archived | Количество успешно выполненных операций архивации файлов журнала упреждающей записи | counter |
| qhb.wal.failed | Количество попыток архивации, завершившихся сбоем | counter |
| qhb.wal.archive_time | Время, потраченное на копирование файлов журналов, в наносекундах | counter |
Эти метрики работают в том случае, если настроена архивация журнала упреждающей записи. Для этого необходимо установить параметр archive_mode в значение on (включен) и определить команду архивации в параметре archive_command.
transaction
К группе transaction относятся метрики по транзакциям.
Таблица 57. Метрики по транзакциям
| Имя | Описание | Тип |
|---|---|---|
| qhb.transaction.commit | Количество фиксаций транзакций | counter |
| qhb.transaction.rollback | Количество откатов транзакций | counter |
| qhb.transaction.deadlocks | Количество взаимоблокировок | counter |
Данные метрик собираются непосредственно при выполнении команд завершения и отмены транзакций на уровне всего кластера баз данных (метрика с именем qhb.transaction.commit), на уровне отдельных баз данных (метрики с идентификаторами баз данных, например, qhb.transaction.db_16384.commit) и на уровне бэкендов (метрики с идентификаторами процессов бэкендов, например, qhb.transaction.9411.commit).
Коэффициент подтверждения транзакций рассчитывается как процентное отношение фиксаций транзакций к сумме фиксаций и откатов транзакций:
k = commit/(commit + rollback)*100%
Обычно значение стремится к 100%, поскольку чаще всего транзакции завершаются успешно. Существенная доля откатившихся транзакций может говорить о том, что в системе существуют проблемы.
Взаимоблокировки возникают, когда различные сеансы взаимно ожидают освобождения заблокированных данных. В этом случае после автоматического определения взаимоблокировки происходит откат одной из транзакций.
wait
К группе wait относятся метрики событий ожидания.
Данный набор метрик полностью соответствует набору стандартных событий ожидания. Метрики имеют префикс qhb.wait. Далее в наименовании идет класс события ожидания и через точку название события ожидания. Все метрики по событиям ожидания имеют тип counter, однако значение отражает промежуток времени в микросекундах, который эти ожидания заняли в совокупности во всех сеансах за период сбора.
Примечание
Если в течение периода наблюдения работало множество пользовательских подключений, которые находились в состоянии ожидания, суммарное значение времени ожидания может многократно превысить этот период. Например, если в течение 10 секунд 1000 сеансов провели в ожиданиях по одной секунде, суммарное время ожидания составит 1000 секунд.
Метрики с типами событий ожидания Lock, LWLock, IO и IPC отображаются в разделе «События ожидания» информационной панели QHB. Значения метрик выводятся в микросекундах (автоматически переводясь в другие единицы при увеличении значений). На существующих графиках выводятся не все события ожиданий, а только по пять самых значимых по величине на каждом графике. Разные события ожиданий могут иметь сильно отличающиеся по величине продолжительности. Значительные колебания значений могут отражать возникающие проблемы.
Таблица 58. Наиболее значимые события ожидания
| Имя события ожидания | Описание |
|---|---|
| Lock.extend | Ожидание расширения отношения. Становится заметным при активном росте таблиц. Необходимость выделения новых блоков приводит к некоторым задержкам, которые отражаются в этой метрике. |
| Lock.transactionid | Ожидание завершения транзакции. Событие ожидания возникает в том случае, если транзакция вынуждена ждать окончания обработки предыдущих транзакций, которые также получают подтверждение своего окончания. |
| Lock.tuple | Ожидание получения блокировки для кортежа. Возникает в случае одновременной работы с теми же данными нескольких транзакций. |
| LWLock.WALWriteLock | Ожидание записи буферов WAL на диск. Часто является лидером среди событий ожиданий этого типа, так как операции с диском являются наиболее медленными в этой группе событий ожидания. |
| LWLock.wal_insert | Ожидание вставки WAL в буфер памяти. |
| LWLock.buffer_content | Ожидание чтения или записи страницы данных в памяти. Возникает и становится существенным при интенсивном вводе/выводе. |
| LWLock.buffer_mapping | Ожидание связывания блока данных с буфером в буферном пуле. |
| LWLock.lock_manager | Ожидание добавления или проверки блокировок для обслуживающих процессов. Событие становится значимым при частых транзакциях. |
bufmgr
К группе bufmgr относятся метрики буферного менеджера, касающиеся механизмов управления памятью. Сбор метрик проводится при операциях чтения данных.
Таблица 59. Метрики буферного менеджера
| Имя | Описание | Тип | Агрегат |
|---|---|---|---|
| qhb.bufmgr.BufferAlloc | Сколько раз проводился поиск буфера | timer | count |
| qhb.bufmgr.BufferAlloc | Общее время, потраченное на поиск буфера | timer | sum |
| qhb.bufmgr.happy_path | Сколько раз буфер нашелся сразу | timer | count |
| qhb.bufmgr.happy_path | Общее время, потраченное на поиск, когда буфер нашелся сразу | timer | sum |
| qhb.bufmgr.cache_miss | Количество промахов кеша буферов | timer | count |
| qhb.bufmgr.cache_miss | Общее время, потраченное на обработку промахов кеша буферов | timer | sum |
| qhb.bufmgr.disk_read | Количество чтений страницы с диска (асинхронно) | timer | count |
| qhb.bufmgr.flush_dirty | Количество выгрузок страницы на диск (асинхронно) | timer | count |
| qhb.bufmgr.retry_counter | Количество повторных обработок промаха | counter | |
| qhb.bufmgr.strategy_pop_cnt | Сколько раз срабатывала специальная стратегия получения или вытеснения буфера | counter | |
| qhb.bufmgr.strategy_reject_cnt | Количество забракованных буферов, предложенных специальной стратегией | counter | |
| tarq_cache.allocate | Сколько раз проводился поиск в TARQ | timer | count |
| tarq_cache.allocate | Общее время, потраченное на поиск в TARQ | timer | sum |
| tarq_cache.allocate_new | Сколько раз выбирался исключаемый блок в TARQ | timer | count |
| tarq_cache.rollback | Количество откатов вытеснения в TARQ | timer | count |
| tarq_cache.rollback | Общее время, потраченное на откаты вытеснения в TARQ | timer | sum |
| tarq_cache.touch | Общее время, потраченное на учет популярных страниц в TARQ | timer | sum |
lmgr
К группе lmgr относятся метрики менеджера блокировок. Блокировки бывают основные и предикатные. Предикатные блокировки называются «блокировками» по историческим причинам; сейчас они ничего не блокируют, а используются для отслеживания зависимостей по данным между транзакциями, работающими с уровнем изоляции Serializable.
Метрики менеджера блокировок отслеживают количество занятых и доступных блокировок. Необходимость существования метрик доступных блокировок вызвана тем, что размеры хеш-таблиц, хранящих блокировки, ограничены, а превышение лимита может вызвать сообщение о нехватке памяти.
Сбор метрик производится непрерывно, в фоновом режиме.
Таблица 60. Метрики менеджера блокировок
| Имя | Описание | Тип |
|---|---|---|
| qhb.lmgr.locks | Количество занятых блокировок | gauge |
| qhb.lmgr.locks_available | Количество блокировок, которые еще можно создать | gauge |
| qhb.lmgr.pred_locks | Количество занятых предикатных «блокировок» | gauge |
| qhb.lmgr.pred_locks_available | Количество предикатных «блокировок», которые еще можно создать | gauge |
queryid
К группе queryid относятся метрики, предоставляющие возможность отслеживать статистику планирования и выполнения сервером всех (почти) операторов SQL.
Эта группа отличается тем, что входящие в нее метрики создаются динамически при
начале обработки движком нового оператора. В имена новых метрик добавляется
уникальное имя или ID запроса. Например, метрика qhb.queryid.c92e145f160e7b9e.exec_calls
отражает количество исполнений некоторого оператора SQL. Текст самого оператора
можно получить из новой системной таблицы qhb_queryid запросом вида
SELECT * FROM qhb_queryid WHERE qid = 'c92e145f160e7b9e'.
Подробнее настройка метрик группы queryid описана в разделе Настройка метрик queryid.
Таблица 61. Метрики queryid
| Имя | Описание | Тип |
|---|---|---|
| qhb.queryid.id.plan_calls | Число планирований оператора | counter |
| qhb.queryid.id.total_plan_time | Общее время, затраченное на планирование оператора, в наносекундах | counter |
| qhb.queryid.id.min_plan_time | Минимальное время, затраченное на планирование оператора, в наносекундах | gauge |
| qhb.queryid.id.max_plan_time | Максимальное время, затраченное на планирование оператора, в наносекундах | gauge |
| qhb.queryid.id.mean_plan_time | Среднее время, затраченное на планирование оператора, в наносекундах | gauge |
| qhb.queryid.id.stddev_plan_time | Стандартное отклонение времени, затраченного на планирование оператора, в наносекундах | gauge |
| qhb.queryid.id.exec_calls | Число выполнений оператора | counter |
| qhb.queryid.id.total_exec_time | Общее время, затраченное на выполнение оператора, в наносекундах | counter |
| qhb.queryid.id.min_exec_time | Минимальное время, затраченное на выполнение оператора, в наносекундах | gauge |
| qhb.queryid.id.max_exec_time | Максимальное время, затраченное на выполнение оператора, в наносекундах | gauge |
| qhb.queryid.id.mean_exec_time | Среднее время, затраченное на выполнение оператора, в наносекундах | gauge |
| qhb.queryid.id.stddev_exec_time | Стандартное отклонение времени, затраченного на выполнение оператора, в наносекундах | gauge |
| qhb.queryid.id.shared_blks_hit | Общее количество попаданий в разделяемый кеш блоков для этого оператора | counter |
| qhb.queryid.id.shared_blks_read | Общее количество прочтений разделяемых блоков для этого оператора | counter |
| qhb.queryid.id.shared_blks_dirtied | Общее количество разделяемых блоков, «загрязненных» этим оператором | counter |
| qhb.queryid.id.shared_blks_written | Общее количество разделяемых блоков, записанных этим оператором | counter |
| qhb.queryid.id.local_blks_hit | Общее количество попаданий в локальный кеш блоков для этого оператора | counter |
| qhb.queryid.id.local_blks_read | Общее количество прочтений локальных блоков для этого оператора | counter |
| qhb.queryid.id.local_blks_dirtied | Общее количество локальных блоков, «загрязненных» этим оператором | counter |
| qhb.queryid.id.local_blks_written | Общее количество локальных блоков, записанных этим оператором | counter |
| qhb.queryid.id.temp_blks_read | Общее количество прочтений временных блоков для этого оператора | counter |
| qhb.queryid.id.temp_blks_written | Общее количество временных блоков, записанных этим оператором | counter |
| qhb.queryid.id.exec_rows | Общее количество строк, полученных или затронутых этим оператором | counter |
| qhb.queryid.id.blk_read_time | Общее время, затраченное оператором на чтение блоков, в миллисекундах (если включен track_io_timing; иначе 0) | counter |
| qhb.queryid.id.blk_write_time | Общее время, затраченное оператором на запись блоков, в миллисекундах (если включен track_io_timing; иначе 0) | counter |
| qhb.queryid.id.wal_records | Общее количество записей WAL, сгенерированных этим оператором | counter |
| qhb.queryid.id.wal_fpi | Общее количество образов полных страниц WAL, сгенерированных этим оператором | counter |
| qhb.queryid.id.wal_bytes | Общий объем WAL, сгенерированный этим оператором, в байтах | counter |
qss
К группе qss относятся метрики, связанные с процессами шифрования/дешифрования при работе с таблицами, обработанными QSS.
Таблица 62. Метрики для qss-таблиц
| Имя | Описание | Тип |
|---|---|---|
| qhb.qss2.wals.encrypt.count | Количество зашифрованных сообщений WAL | counter |
| qhb.qss2.wals.encrypt.bytes | Количество зашифрованных байтов сообщений WAL | counter |
| qhb.qss2.wals.encrypt.time | Время, затраченное на шифрование сообщения WAL | timer |
| qhb.qss2.wals.decrypt.count | Количество расшифрованных сообщений WAL | counter |
| qhb.qss2.wals.decrypt.bytes | Количество расшифрованных байтов сообщений WAL | counter |
| qhb.qss2.wals.decrypt.time | Время, затраченное на расшифрование сообщения WAL | timer |
| qhb.qss2.pages.encrypt.count | Количество зашифрованных страниц с данными | counter |
| qhb.qss2.pages.encrypt.bytes | Количество зашифрованных байтов страниц с данными | counter |
| qhb.qss2.pages.encrypt.time | Время, затраченное на шифрование страницы с данными | timer |
| qhb.qss2.pages.decrypt.count | Количество расшифрованных страниц с данными | counter |
| qhb.qss2.pages.decrypt.bytes | Количество расшифрованных байтов страниц с данными | counter |
| qhb.qss2.pages.decrypt.time | Время, затраченное на дешифровку страницы с данными | timer |
| qhb.qss2.blobs.encrypt.count | Количество зашифрованных объектов нефиксированного размера (Rbytea) | counter |
| qhb.qss2.blobs.encrypt.bytes | Количество зашифрованных байтов объектов нефиксированного размера (Rbytea) | counter |
| qhb.qss2.blobs.encrypt.time | Время, затраченное на шифрование объектов нефиксированного размера (Rbytea) | timer |
| qhb.qss2.blobs.decrypt.count | Количество расшифрованных объектов нефиксированного размера (Rbytea) | counter |
| qhb.qss2.blobs.decrypt.bytes | Количество расшифрованных байтов объектов нефиксированного размера (Rbytea) | counter |
| qhb.qss2.blobs.decrypt.time | Время, затраченное на расшифрование объектов нефиксированного размера (Rbytea) | timer |
Данные метрики формируются, если на сервере запущен QSS и создана шифрованная
таблица (CREATE TABLE <имя таблицы> USING qss).
Метрики пула соединений QCP
Ниже представлены метрики пула соединений, характеризующие работу пула. Сбор метрик проводится при операциях выполнения запроса.
Таблица 63. Метрики пула соединений QCP
| Имя | Описание | Тип |
|---|---|---|
| qcp.queue | Количество запросов в очереди на данный момент | gauge |
| qcp.obtain_backend | Время ожидания назначения обслуживающего процесса для исполнения запроса клиента | timer |
| qcp.obtain_backend_failed | Превышено максимальное время ожидания назначения обслуживающего процесса для исполнения запроса клиента | timer |
| <адрес субд>.in_use | Количество используемых подключений (обслуживающих процессов) к СУБД | gauge |
Включение и выключение записи значений для групп и категорий метрик
В QHB имеется механизм, который позволяет включать и выключать отправку метрик отдельно по группам и категориям. В каталоге данных расположен файл конфигурации metrics_config.toml, в котором каждая строка соответствует группе метрик:
[is_enabled]
bgwr = { basic = true, dbid = false, pid = false }
bufmgr = { basic = true, dbid = false, pid = false }
db_stat = { basic = true, dbid = false, pid = false }
default = { basic = true, dbid = false, pid = false }
lmgr = { basic = true, dbid = false, pid = false }
mem_stat = { basic = false, dbid = false, pid = false }
queryid = { basic = false, dbid = false, pid = false }
sys = { basic = true, dbid = false, pid = false }
temp_stat = { basic = true, dbid = false, pid = false }
transaction = { basic = true, dbid = false, pid = false }
wait = { basic = true, dbid = false, pid = false }
wal = { basic = true, dbid = false, pid = false }
Переменные принимают значения true (отправка метрик группы разрешена) или false (отправка запрещена).
Примечание
Метрики qss включены в группу bgwr.
Таблица 64. Настройка записи значений для групп метрик
| Группа метрик | Описание | Значение по умолчанию |
|---|---|---|
| default | Группа по умолчанию (различные метрики, не выделенные в отдельные группы) | true |
| sys | Метрики операционной системы | true |
| db_stat | Метрики чтения и записи блоков | true |
| bgwr | Метрики фонового процесса записи | true |
| mem_stat | Метрики размера памяти «work area» | false |
| temp_stat | Метрики по данным временных файлов и таблиц | true |
| wal | Метрики архивации файлов WAL | true |
| transaction | Метрики транзакций | true |
| wait | Метрики событий ожидания | true |
| bufmgr | Метрики механизмов управления памятью | true |
| lmgr | Метрики механизмов блокировок (основных и предикатных) | true |
| queryid | Метрики планирования и выполнения сервером операторов SQL | false |
Примечание
Для сбора метрик операционной системы необходимо также установить в параметре qhb_os_monitoring значение on (включен).
Для просмотра списка групп метрик и их текущего состояния можно воспользоваться SQL-функцией metrics_config_show. Пример вызова этой функции:
SELECT * FROM metrics_config_show();
group_name | glob | dbid | pid
-------------+-------+------+-----
bgwr | t | f | f
bufmgr | t | f | f
db_stat | t | f | f
default | t | f | f
lmgr | t | f | f
mem_stat | f | f | f
queryid | f | f | f
sys | t | f | f
temp_stat | t | f | f
transaction | t | f | f
wait | t | f | f
wal | t | f | f
(12 rows)
Для просмотра текущего состояния метрик отдельного процесса можно воспользоваться SQL-функцией metrics_transient_config_show. В качестве аргумента передается целое число — идентификатор нужного процесса. Пример вызова этой функции:
SELECT * FROM metrics_transient_config_show(1843);
Если для этого процесса не менялась конфигурация метрик, вывод не отличается от вывода функции metrics_config_show.
Помимо задания значений настроек через файл параметров, имеется возможность менять эти значения через функции. Функции могут вызываться с разным количеством аргументов. Если опущен аргумент параметра kind, то функция применяется ко всем категориям метрик. Если опущен аргумент параметра respect_transient_settings, то его значение по умолчанию равно false.
Изменения сразу же отображаются в файле конфигурации.
Функции включения и выключения отправки метрик
metrics_config_enable_group ( group_name: cstring ) → void
metrics_config_enable_group ( group_name: cstring, respect_transient_settings: boolean ) → void
metrics_config_enable_group ( group_name: cstring, kind: cstring, respect_transient_settings: boolean ) → void
Включает отправку значений для метрик заданной группы/категории.
metrics_config_disable_group ( group_name: cstring ) → void
metrics_config_disable_group ( group_name: cstring, respect_transient_settings: boolean ) → void
metrics_config_disable_group ( group_name: cstring, kind: cstring, respect_transient_settings: boolean ) → void
Выключает отправку значений для метрик заданной группы/категории.
metrics_config_transient_set ( backend_pid: int4, group_name: cstring, option_value: boolean ) → void
metrics_config_transient_set ( backend_pid: int4, group_name: cstring, kind: cstring, option_value: boolean ) → void
Устанавливает временную возможность отправки значений метрик для заданного обслуживающего процесса.
Категории метрик выражаются следующими значениями параметра kind: 'basic', 'dbid', 'pid'.
С помощью параметра respect_transient_settings (второго или третьего в зависимости от варианта функции) в функциях metrics_config_enable_group и metrics_config_disable_group можно указать, отдавать ли приоритет параметрам отправки групп метрик, установленным на уровне отдельных обслуживающих процессов.
С помощью функции metrics_config_transient_set можно включить или выключить отправку значений заданной группы и категории метрик для конкретного обслуживающего процесса. Настройка будет действовать в течение всего времени жизни обслуживающего процесса либо до вызова функции metrics_config_enable_group или metrics_config_disable_group с параметром respect_transient_settings = false, который в данном случае распространит действие команды также на те обслуживающие процессы, в которых устанавливалось собственное значение параметров.
При запуске обслуживающего процесса с идентификатором, использовавшимся ранее, для данного идентификатора обнуляются все временные настройки.
Примечание
Все сказанное о выключении записи групп метрик не касается метрик, которые передаются через SQL-функции. При использовании этих функций метрики записываются всегда.
Информационные панели метрик QHB для Grafana
Информационные панели (dashboards) QHB для Grafana расположены в репозитории по следующей ссылке.
QHB поставляется совместно с сервером метрик, который записывает данные метрик в Graphite. Интерфейсом к этим метрикам служит Grafana. Текущий набор информационных панелей для Grafana поставляется в качестве самодокументируемых образцов, на основе которых пользователи при необходимости могут самостоятельно создать панели, более соответствующие их потребностям. Разумеется, поставляемые панели можно использовать и в исходном виде.
Импорт информационных панелей
Экспорт JSON-описания информационных панелей выполнен в Grafana 6.7.2.
Перед импортом JSON-описания необходимо решить, будут ли названия метрик содержать в качестве префикса имя хоста. Именно таким образом устроены наименования метрик внутри панелей, и этот вариант рекомендуется оставить. В начале имен метрик добавлена переменная $server_name, по умолчанию для нее выбрано значение your_host_name. Перед импортом можно заменить в JSON-файлах это значение на наименование одного из хостов. В дальнейшем в этой переменной через интерфейс Grafana можно будет добавить через запятую все имена хостов, с которых будут собираться метрики. Это позволит быстро переключаться при просмотре метрик с одного хоста на другой. Если такая схема использоваться не будет (в случае, если будут просматриваться метрики с единственного хоста), можно удалить в файлах JSON во всех именах метрик префикс $server_name до проведения импорта описания JSON. Однако это более трудоемкий вариант и его выбирать не рекомендуется.
Для импорта описаний информационных панелей необходимо выполнить следующие шаги:
- В меню Dashboards вашего сайта Grafana выбрать пункт Manage.
- В открывшемся списке папок и панелей выбрать существующую или создать новую папку.
- Находясь в выбранной папке, выбрать в правой верхней части страницы пункт Import.
- На открывшейся странице можно либо нажать справа вверху кнопку Upload json file и загрузить файл, либо вставить содержимое JSON-файла в поле под заголовком Or paste JSON и нажать кнопку Load.
- После этого нужно заполнить необходимые параметры и выполнить загрузку JSON-описания.
- При необходимости, отредактируйте наименование источника данных в модели JSON, заменив в описаниях информационных панелей значение поля datasource с Graphite на корректное значение. Более простым вариантом может быть смена имени источника данных на Graphite. Такой вариант будет предпочтительным, если источник данных до этого нигде больше не использовался.
Перечисленные выше пункты нужно повторить для каждой импортируемой панели.
Информационная панель «Операционная система»
Информационная панель представляет основные системные показатели:
- Время работы экземпляра QHB;
- Средняя загрузка;
- Использование ОЗУ;
- Использование памяти;
- Использование дисковой системы, на которой расположен каталог баз данных.
Информационная панель «QHB»
Информационная панель содержит несколько разделов:
- Транзакции;
- Чтение и запись блоков;
- События ожидания;
- Контрольные точки и операции с буферами;
- Архивация WAL.
В каждом разделе представлены наборы тематических панелей, отражающие основные показатели.
Примечание
По умолчанию теги различных событий не заданы, поэтому необходимо самостоятельно настроить вывод дополнительных аннотаций:
- добавить необходимые комментарии к данным метрик функцией qhb_annotation (см. раздел Аннотации);
- настроить вывод доступных аннотаций в информационной панели Grafana.
QHB-мониторинг для Zabbix
Пример использования сервера Zabbix 6.2 для мониторинга узла сети с QHB и агентом Zabbix.
Необходимые файлы:
- template_db_qhb.yaml — файл шаблона «QHB by Zabbix agent», который нужно импортировать на сервер Zabbix 6.2;
- template_db_qhb.conf — файл с пользовательскими параметрами агента Zabbix для опроса QHB;
- каталог qhb/, содержащий SQL-файлы, к которым обращаются пользовательские параметры.
Архив для Zabbix 6.2 или выше расположен в репозитории по следующей ссылке.
Установка
Примечание
Более подробную информации см. в документации Zabbix по работе с шаблонами агента.
-
Установите Zabbix-агент на узле сети с QHB
-
Скопируйте каталог qhb/ в домашний каталог Zabbix-агента /var/lib/ zabbix. Если в /var/lib/ отсутствует каталог zabbix/, то его необходимо создать. Каталог qhb/ содержит SQL-файлы, необходимые для получения метрик из QHB:
# mkdir -p /var/lib/zabbix/qhb # cd /var/lib/zabbix/qhb # wget <сервер>/zabbix/qhb/qhb.tar # tar -xvf qhb.tar # chmod -R 707 /var/lib/zabbix/qhb # rm -rf qhb.tar -
Скопируйте файл template_db_qhb.conf в конфигурационную директорию Zabbix-агента /etc/zabbix/zabbix_agentd.d/:
# wget <сервер>/zabbix/template_db_qhb.conf -
Создайте пользователя zbx_monitor с правами «только чтение» и доступом к кластеру QHB:
CREATE USER zbx_monitor WITH PASSWORD '<PASSWORD>' INHERIT; GRANT pg_monitor TO zbx_monitor; -
Отредактируйте файл qhb_hba.conf, чтобы разрешить подключение к Zabbix. Для этого откройте его в текстовом редакторе nano и вставьте в него следующие строки:
host all zbx_monitor 127.0.0.1/32 trust -
Перезагрузите QHB и Zabbix-агент:
# systemctl restart qhb # systemctl restart zabbix_agentd -
Импортируйте файл template_db_qhb.yaml шаблона «QHB by Zabbix agent» на сервере Zabbix. Подробнее об импорте шаблонов см. в документации Zabbix по работе с импортом шаблонов.
-
Установите параметры макроса {$PG.HOST}, {$PG.PORT}, {$PG.USER}, {$PG.PASSWORD}, {$PG.DB} для узла сети с QHB.
-
Присоедините шаблон «QHB by Zabbix agent» к узлу сети с QHB.
Собираемые параметры
Таблица 65. Собираемые параметры
| Группа | Название | Описание |
|---|---|---|
| QHB | Bgwriter: Buffers allocated per second | Количество буферов, выделенных за секунду |
| QHB | Bgwriter: Buffers written directly by a backend per second | Количество буферов, записанных за секунду непосредственно обслуживающим процессом |
| QHB | Bgwriter: Buffers backend fsync per second | Сколько раз за секунду обслуживающему процессу пришлось самому выполнять вызов fsync (обычно этим занимается фоновый процесс записи, даже когда обслуживающий процесс проводит свои операции записи) |
| QHB | Bgwriter: Buffers written during checkpoints per second | Количество буферов, записанных за секунду во время контрольных точек |
| QHB | Bgwriter: Buffers written by the background writer per second | Количество буферов, записанных за секунду фоновым процессом записи |
| QHB | Bgwriter: Requested checkpoints per second | Количество запрошенных контрольных точек, которые были выполнены за секунду |
| QHB | Bgwriter: Scheduled checkpoints per second | Количество запланированных контрольных точек, которые были выполнены за секунду |
| QHB | Bgwriter: Checkpoint sync time | Общее количество времени, затраченное на синхронизацию файлов с диском при обработке контрольных точек |
| QHB | Bgwriter: Checkpoint write time | Общее количество времени, затраченное на запись файлов на диск при обработке контрольных точек, в миллисекундах |
| QHB | Bgwriter: Max written per second | Сколько раз за секунду фоновый процесс записи останавливал очищающее сканирование из-за того, что записал слишком много буферов |
| QHB | Status: Cache hit ratio % | Доля попаданий в кеш |
| QHB | Status: Config hash | Хеш конфигурации QHB |
| QHB | Connections sum: Active | Общее количество соединений, выполняющих запросы |
| QHB | Connections sum: Idle | Общее количество соединений, ожидающих от клиента новой команды |
| QHB | Connections sum: Idle in transaction | Общее количество соединений в состоянии транзакции, но не выполняющих запрос |
| QHB | Connections sum: Prepared | Общее количество подготовленных транзакций |
| QHB | Connections sum: Total | Общее количество соединений |
| QHB | Connections sum: Total % | Общее количество соединений в процентах |
| QHB | Connections sum: Waiting | Общее количество ожидающих транзакций |
| QHB | Status: Ping time | Время ответа |
| QHB | Status: Ping | Проверка связи |
| QHB | Replication: standby count | Количество резервных серверов |
| QHB | Replication: lag in seconds | Задержка репликации с основного сервера в секундах |
| QHB | Replication: recovery role | Роль репликации: 1 — восстановление еще продолжается (режим резервного сервера), 0 — режим основного сервера |
| QHB | Replication: status | Статус репликации: 0 — потоковая передача снижается, 1 — потоковая передача возрастает, 2 — режим основного сервера |
| QHB | Transactions: Max active transaction time | Текущая максимальная продолжительность активной транзакции |
| QHB | Transactions: Max idle transaction time | Текущая максимальная продолжительность простаивающей транзакции |
| QHB | Transactions: Max prepared transaction time | Текущая максимальная продолжительность подготовленной транзакции |
| QHB | Transactions: Max waiting transaction time | Текущая максимальная продолжительность ожидающей транзакции |
| QHB | Status: Uptime | Полное время работы системы |
| QHB | Status: Version | Версия QHB |
| QHB | WAL: Segments count | Количество сегментов WAL |
| QHB | WAL: Bytes written | Объем записей WAL в байтах |
| QHB | DB {#DBNAME}: Database size | Размер этой базы данных |
| QHB | DB {#DBNAME}: Blocks hit per second | Сколько раз дисковые блоки были обнаружены уже в буферном кеше, благодаря чему в чтении не было необходимости |
| QHB | DB {#DBNAME}: Disk blocks read per second | Общее количество дисковых блоков, прочитанных в этой базе данных |
| QHB | DB {#DBNAME}: Detected conflicts per second | Общее количество запросов, отмененных из-за конфликтов с восстановлением в этой базе данных |
| QHB | DB {#DBNAME}: Detected deadlocks per second | Общее количество выявленных взаимоблокировок в этой базе данных |
| QHB | DB {#DBNAME}: Temp_bytes written per second | Общий объем данных, записанных во временные файлы запросами в этой базе данных |
| QHB | DB {#DBNAME}: Temp_files created per second | Общее количество временных файлов, созданных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Tuples deleted per second | Общее количество строк, удаленных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Tuples fetched per second | Общее количество строк, выбранных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Tuples inserted per second | Общее количество строк, добавленных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Tuples returned per second | Общее количество строк, возвращенных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Tuples updated per second | Общее количество строк, измененных запросами в этой базе данных |
| QHB | DB {#DBNAME}: Commits per second | Количество зафиксированных транзакций в этой базе данных |
| QHB | DB {#DBNAME}: Rollbacks per second | Общее количество откатившихся транзакций в этой базе данных |
| QHB | DB {#DBNAME}: Frozen XID before autovacuum % | Доля замороженных идентификаторов транзакций перед автоочисткой, в процентах |
| QHB | DB {#DBNAME}: Frozen XID before stop % | Доля замороженных идентификаторов транзакций перед остановкой, в процентах |
| QHB | DB {#DBNAME}: Locks total | Общее количество блокировок в этой базе данных |
| QHB | DB {#DBNAME}: Queries slow maintenance count | Счетчик медленных обслуживающих запросов |
| QHB | DB {#DBNAME}: Queries max maintenance time | Максимальная продолжительность обслуживающего запроса |
| QHB | DB {#DBNAME}: Queries sum maintenance time | Суммарная продолжительность обслуживающих запросов |
| QHB | DB {#DBNAME}: Queries slow query count | Счетчик медленных запросов |
| QHB | DB {#DBNAME}: Queries max query time | Максимальная продолжительность запроса |
| QHB | DB {#DBNAME}: Queries sum query time | Суммарная продолжительность запросов |
| QHB | DB {#DBNAME}: Queries slow transaction count | Счетчик медленных транзакционных запросов |
| QHB | DB {#DBNAME}: Queries max transaction time | Максимальная продолжительность транзакционного запроса |
| QHB | DB {#DBNAME}: Queries sum transaction time | Суммарная продолжительность транзакционных запросов |
| QHB | DB {#DBNAME}: Index scans per second | Количество сканирований по индексу в этой базе данных |
| QHB | DB {#DBNAME}: Sequential scans per second | Количество последовательных сканирований в этой базе данных |
| Исходные элементы Zabbix | QHB: Get bgwriter | Статистика по активности фонового процесса записи |
| Исходные элементы Zabbix | QHB: Get connections sum | Сбор всех метрик из pg_stat_activity |
| Исходные элементы Zabbix | QHB: Get dbstat | Сбор всех метрик из pg_stat_database для каждой базы данных |
| Исходные элементы Zabbix | QHB: Get locks | Сбор всех метрик из pg_locks для каждой базы данных |
| Исходные элементы Zabbix | QHB: Get queries | Сбор всех метрик по времени выполнения запросов |
| Исходные элементы Zabbix | QHB: Get transactions | Сбор метрик по времени выполнения транзакций |
| Исходные элементы Zabbix | QHB: Get WAL | Основной элемент для сбора метрик WAL |
| Исходные элементы Zabbix | DB {#DBNAME}: Get frozen XID | Количество замороженных идентификаторов транзакций |
| Исходные элементы Zabbix | DB {#DBNAME}: Get scans | Количество сканирований, проведенных для таблицы/индекса в этой базе данных |
Триггеры
Таблица 66. Триггеры
| Название | Описание |
|---|---|
| QHB: Required checkpoints occurs too frequently | Запрашиваемые контрольные точки происходят слишком часто |
| QHB: Cache hit ratio too low | Слишком низкая доля попаданий в кеш |
| QHB: Configuration has changed | Изменилась конфигурация |
| QHB: Total number of connections is too high | Общее количество соединений слишком велико |
| QHB: Response too long | Слишком большое время отклика |
| QHB: Service is down | QHB не функционирует |
| QHB: Streaming lag with {#MASTER} is too high | Задержка репликации с основного сервера слишком велика |
| QHB: Replication is down | Репликация не функционирует |
| QHB: Service has been restarted | Время функционирования QHB меньше 10 минут |
| QHB: Version has changed | Версия QHB изменилась |
| DB {#DBNAME}: Too many recovery conflicts | Слишком много конфликтов между основным и резервным серверами при восстановлении |
| DB {#DBNAME}: Deadlock occurred | Произошла взаимоблокировка |
| DB {#DBNAME}: VACUUM FREEZE is required to prevent wraparound | Для предотвращения зацикливания идентификаторов транзакций требуется выполнить команду VACUUM FREEZE |
| DB {#DBNAME}: Number of locks is too high | Количество блокировок слишком велико |
| DB {#DBNAME}: Too many slow queries | Слишком много медленных запросов |
| QHB: Failed to get items | Zabbix не получал данные для элементов в течение последних 30 минут |
Настройка сбора метрик
Для того чтобы информационной панели отображали данные метрик, необходимо выполнить некоторые настройки.
Настройка сервера метрик
Настройка сервера метрик описана в главе Сервер метрик.
Рекомендуется в параметре prefix конфигурационного файла /etc/metricsd/config.yaml сервера метрик прописать имя хоста, на котором он работает. Если сделать это для каждого сервера, все метрики будут организованы иерархически, и первый уровень иерархии будет уровнем серверов. В именах метрик в предлагаемых панелях для этих целей присутствует переменная $server_name. Подразумевается, что на хосте работает только один кластер баз данных.
Настройка параметров базы данных
Для настройки отправки метрик до релиза QHB 1.3.0 необходимо в qhb.conf установить параметр metrics_collector_id в значение, с которым запускается коллектор метрик, например 1001. Начиная с релиза QHB 1.3.0 вместо metrics_collector_id используется параметр metrics_collector_path, который по умолчанию имеет значение @metrics-collector (представляет собой путь к сокету домена Unix); сервер метрик по умолчанию запускается именно на этом адресе.
Для настройки отправки аннотаций необходимо в qhb.conf прописать следующие параметры:
- grafana.address — адрес Grafana, например http://localhost:3000
- grafana.token — необходимо указать токен, полученный в Grafana по адресу http://localhost:3000/org/apikeys
Пример настроек в qhb.conf для отправки метрик и аннотаций:
# До релиза QHB 1.3.0
# metrics_collector_id = 1001
# С релиза QHB 1.3.0:
metrics_collector_path = '@metrics-collector'
grafana.address = 'http://localhost:3000'
grafana.token = 'eyJrIjoiNGxTaloxMUNTQkFUMTN0blZqUTN6REN6OWI5YjM1MzMiLCJuIjoidGVzdCIsImlkIjoxfQ=='
Примечание
При необходимости записи данных метрик в CSV-файлы в качестве значения параметра metrics_collector_path нужно указать путь к файлу сокета домена Unix, например /tmp/metrics-collector.sock. Это же значение нужно указать в параметре bind_addr раздела collection в настройках сервера метрик (/etc/metricsd/config.yaml).
Для сбора системных метрик (информационная панель «Операционная система») необходимо установить параметр qhb_os_monitoring в значение on (включен). Можно также задать период сбора системной статистики qhb_os_stat_period (значение по умолчанию — 30 секунд). Не рекомендуется задавать для этого параметра слишком низкое значение, поскольку сбор системной статистики требует некоторых затрат.
В файле параметров можно прописать:
qhb_os_monitoring = on
qhb_os_stat_period = 60 # если период по умолчанию в 30 секунд не устраивает
Либо выполнить команды:
ALTER SYSTEM SET qhb_os_monitoring = ON;
ALTER SYSTEM SET qhb_os_stat_period = 60;
SELECT pg_reload_conf();
Примеры использования метрик в функциях SQL
Помимо встроенных метрик пользователи могут использовать свои метрики через следующие функции SQL.
Тип метрик Timer
Используется при фиксации промежутка времени, единицы измерения — наносекунды.
SELECT qhb_timer_report('qhb.timer.nano',10000000000 /* 10 секунд в наносекундах */);
Тип метрик Counter
Используется, когда нужно зафиксировать количество произошедших за промежуток времени событий.
SELECT qhb_counter_increase_by('qhb.example.counter',10);
Тип метрик Gauge
Используется, когда нужно установить некий статичный показатель в определенное значение или изменить его.
SELECT qhb_gauge_update('qhb.gauge_example.value', 10); /* Установка значения */
SELECT qhb_gauge_add('qhb.gauge_example.value',1); /* Увеличение значения */
SELECT qhb_gauge_sub('qhb.gauge_example.value',1); /* Уменьшение значения */
Аннотации
Используются, если нужно добавить комментарий к данным метрик. Первый параметр функции — текст комментария, последующие параметры — теги.
SELECT qhb_annotation('Начало выполнения теста', 'test','billing'); /* Текст аннотации и два тега */