# Grafana

## Инструкция по работе с метриками

Доступ к метрикам кластера предоставляется после запроса соответствующих прав. После получения доступа можно перейти в систему мониторинга по ссылке: https://metrics.dfcloud.ru. После перехода по ссылке будет представлена главная страница Grafana. 

Для просмотра метрик кластера PostgreSQL выполните следующие шаги:

1. В левом боковом меню нажмите **Dashboard**;
2. В списке доступных дашбордов выберите **папку Cloud PostgreSQL**;
3. Внутри папки выберите **дашборд Cloud PostgreSQL** — в нём отображаются все метрики кластера.

## Управление отображаемыми данными

В верхней части дашборда доступны селекторы для настройки отображения:

- **InstallationID** - выбор одного опеределенного кластера;
- **Cluster node name** - выбор конкретного нода кластера, в котором значения графиков меняются в зависимости от выбранного хоста (селектор влияет на все графики, кроме блока Patroni);
- **Database** - выбор базы данных, по которым отображаются метрики;
- **Lock table** - выбор типа блокировки для отображения (применим не для всех графиков).

## Метрики PostgreSQL

Метрики отображают ключевые параметры конфигурации и текущие показатели работы экземпляра PostgreSQL.

| Наименование метрики     | Описание метрики                                                                                                                                |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------|
| **Version**              | Показывает текущую версию PostgreSQL, установленную на кластере.                                                                                |
| **Current fetch data**   | Объем данных, извлеченных из базы за текущий период (операции чтения).                                                                          |
| **Current insert data**  | Объем данных, вставленных в базу (операции записи новых данных).                                                                                |
| **Current update data**  | Объем данных, обновленных в базе.                                                                                                               |
| **Seq Page Cost**        | Стоимость последовательного чтения страницы данных. Влияет на выбор плана запроса: чем выше значение, тем реже оптимизатор будет выбирать последовательное сканирование таблиц. |
| **Random Page Cost**     | Стоимость чтения случайной страницы данных. Низкое значение говорит о том, что в системе используются быстрые диски, и оптимизатор будет чаще выбирать доступ по индексам.      |
| **Max Connections**      | Максимальное количество одновременных подключений к базе данных, разрешенное на сервере.                                                        |
| **Shared Buffers**       | Объем оперативной памяти, выделенный под кэш данных PostgreSQL. Здесь хранятся часто используемые данные для ускорения доступа к ним.           |
| **Effective Cache**      | Предполагаемый размер системного кэша файлов. Используется оптимизатором для оценки вероятности нахождения данных в кэше операционной системы.  |
| **Maintenance Work Mem** | Объем памяти для выполнения операций обслуживания.                                                                                              |
| **Work Mem**             | Объем памяти, выделяемый для внутренних сортировок и хеш-таблиц при выполнении запросов (на каждую операцию).                                   |
| **Max WAL Size**         | Максимальный размер журнала предзаписи, после достижения которого запускается процесс контрольной точки (checkpoint).                           |
| **Max Worker Processes** | Максимальное количество фоновых процессов, которые могут быть запущены в системе.                                                               |
| **Max Parallel Workers** | Максимальное количество параллельных процессов, которые могут быть задействованы при выполнении одного запроса.                                 |

## Метрики Database Stats

Метрики отображают текущую нагрузку и состояние баз данных в кластере PostgreSQL. Данные метрики позволяют:
- оценить эффективность работы баз данных;
- отследить скачки нагрузки;
- своевременно среагировать на потенциальные проблемы до того, как они повлияют на работу приложений.

| Наименование              | Описание           |
|---------------------------| -------------------|
| **Average CPU Usage**     | Показывает время, затраченное на выполнение пользовательских и системных задач, а также, насколько интенсивно используются вычислительные ресурсы сервера базы данных. |
| **Average Memory Usage**  | Средний объем оперативной памяти, используемой процессами PostgreSQL за 5-минутные интервалы. Показывает, сколько памяти потребляет база данных в процессе работы. |
| **Open File Descriptors** | Количество открытых файловых дескрипторов процессами PostgreSQL. Метрика показывает среднее (Mean), последнее (Last), максимальное (Max) и минимальное (Min) значение за интервал. |
| **Active sessions**       | Показывает, сколько в данный момент выполняется запросов к PostgreSQL. Метрика показывает среднее (Mean), последнее (Last), максимальное (Max) значение. |
| **Transcations**          | Количество транзакций в базах данных кластера. Метрика разделена на два типа операций: commits (успешно завершенные транзакции) и rollbacks (откаченные транзакции). |
| **Update data**           | Объем данных, обновленных в базах данных кластера. Показывает, сколько данных было изменено в результате выполнения операций UPDATE. |
| **Fetch data (SELECT)**   | Объем данных, извлеченных из базы с помощью запросов SELECT. Показывает, сколько данных было считано из базы в результате операций чтения. |
| **Insert data**           | Объем данных, вставленных в базы данных кластера. Показывает, сколько данных было добавлено в результате выполнения операций INSERT. |
| **Lock tables**           | Количество блокировок таблиц в базах данных кластера. Показывает, сколько раз таблицы были заблокированы для выполнения операций.<br>AccessShareLock - это блокировка, которая возникает, когда кто-то читает данные из таблицы (делает SELECT). Данная блокировка не мешает операциям чтения, но не дает удалить в этот момент таблицу или изменить ее структуру. |
| **Return data**           | Объем данных, возвращаемых клиенту в результате выполнения запросов. Показывает, сколько данных было отправлено обратно клиенту после обработки запросов в базе. |
| **Idle sessions**         | Количество бездействующих сессий подключения к базе данных. Показывает, сколько открытых подключений в данный момент не выполняют никаких запросов и просто ждут. |
| **Delete data**           | Объем данных, удаленных из базы данных в результате выполнения операций DELETE. Показывает, сколько данных было удалено из таблиц. |
| **Cache Hit Rate**        | Показывает процент запросов к данным, которые были удовлетворены из кэша (оперативной памяти), без обращения к диску. Показывает, насколько эффективно используется кэш PostgreSQL. |
| **Buffers (bgwriter)**    | Метрика, показывающая активность фонового процесса записи, который занимается синхронизацией данных из оперативной памяти на диск.  |
| **Conflicts/Deadlocks**   | Метрика, отслеживающая две проблемы при работе с базой данных: конфликты восстановления и взаимоблокировки.                                                        |
| **Temp File (Bytes)**     | Объем данных, записанных во временные файлы при выполнении запросов в базах данных. PostgreSQL создает временные файлы на диске, когда для выполнения запроса не хватает оперативной памяти.                   |
| **Checkpoint Stats**      | Метрика, показывающая время, затрачиваемое на выполнение checkpoints в PostgreSQL, где: <br>- **write_time** - время, затраченное на запись данных на диск во время checkpoint (сколько миллисекунд ушло на запись файлов).<br>- **sync_time** - время, затраченное на синхронизацию файлов с диском (чтобы данные гарантированно сохранились). |

## Метрики Patroni

Метрик отображают состояние и конфигурацию кластера PostgreSQL под управлением Patroni. Эти метрики позволяют контролировать отказоустойчивость кластера, отслеживать переключения мастера и убеждаться, что репликация работает штатно.

| Наименование                       | Описание                                                                                                                               |
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| **Patroni Leader**                 | Метрика, которая показывает, какая нода в кластере PostgreSQL в данный момент является master-сервером, принимающим запросы на запись. |
| **Patroni Replica**                | Метрика, которая показывает, какие узлы кластера PostgreSQL в данный момент выполняют роль реплики.                                    |
| **Sync Standby**                   | Метрика, которая показывает, какая из реплик в кластере PostgreSQL назначена синхронной.                                               |
| **PostgreSQL WAL Replay**          | Метрика, которая показывает, включена ли на узлах кластера синхронизация данных через WAL.                                             |
| **PostgreSQL Pending Restart**     | Метрика, которая показывает, требуется ли перезагрузка PostgreSQL на узлах кластера после изменения конфигурационных параметров.       |
| **Patroni Primary Node**           | Метрика, которая показывает, какой узел в кластере PostgreSQL в данный момент является основным и принимает запросы на запись.         |
| **Patroni Secondary Nodes**        | Метрика, которая показывает, какие узлы кластера PostgreSQL в определенные моменты времени выполняли роль реплик.                      |
| **Replicas Received WAL Location** | Метрика, показывающая объем журналов предзаписи (WAL), полученных каждой репликой кластера.                                            |
| **Primary WAL Location**           | Метрика, показывающая объем журналов предзаписи (WAL), на основном сервере кластера PostgreSQL.                                        |
| **Replicas Replayed WAL Location** | Метрика, показывающая объем журналов предзаписи (WAL), которые были не просто получены, а уже применены на репликах кластера.          |
| **WAL Replay Paused**              | Метрика, которая отслеживает, не приостановлен ли процесс применения WAL-журналов на узлах кластера. Если передача или применение WAL-файлов останавливается, на графике происходит скачок. |

## Метрики Hosts

Блок Hosts управляется селектором **Cluster node name**. Метрики отображают состояние и ресурсы серверов, на которых развернут кластер PostgreSQL. Данные метрики позволяют оценить, хватает ли серверу ресурсов для текущей нагрузки, и своевременно обнаружить проблемы с производительностью или нехваткой места на дисках.

| Наименование                   | Описание                                                                                                                      |
| -------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| **CPU Busy**                   | Метрика, показывающая общую загруженность всех процессорных ядер на сервере, где работает PostgreSQL.                         |
| **RAM Used**                   | Метрика, показывающая процент оперативной памяти, который занят на сервере всеми процессами.                                  |
| **CPU Cores**                  | Метрика, показывающая общее количество процессорных ядер, доступных на сервере, где работает PostgreSQL.                      |
| **RAM Total**                  | Метрика, показывающая общий объем оперативной памяти, установленный на сервере.                                               |
| **DB Disk Total**              | Метрика, показывающая общий объем дискового пространства, выделенного для хранения данных базы данных PostgreSQL на сервере.  |
| **CPU Basic**                  | Метрика, которая показывает детальную разбивку загрузки процессора по типам выполняемых задач. Она позволяет увидеть, на что именно тратится процессорное время на сервере. |
| **Memory Basic**               | Метрика, которая показывает детальную разбивку использования оперативной памяти на сервере, а также информацию о SWAP.        |
| **Disk IOps**                  | Метрика, показывающая количество операций чтения и записи, выполняемых на диске сервера в секунду.                            |
| **Disk Space Used Basic**      | Метрика, показывающая процент занятого дискового пространства на всех подключенных файловых системах сервера.                 |
| **Disk R/W Data**              | Показывает объем данных в байтах, читаемых с диска и записываемых на диск в секунду.                                          |
| **Filesystem space available** | Метрика, показывающая объем свободного дискового пространства на файловой системе сервера.                                    |
