# Мониторинг состояния кластера PostgreSQL и хостов

Данные о состоянии кластера и его хостов доступны в [консоли управления](https://kz.console.yandex.cloud). Их можно посмотреть на вкладке **Мониторинг** страницы управления кластером  или в сервисе [Yandex Monitoring](../../monitoring/concepts/index.md).

Диагностическая информация о состоянии кластера представлена в виде графиков.

Период обновления графиков:

* Для хостов стандартной конфигурации и хостов с увеличенным соотношением количества гигабайт RAM к количеству vCPU (`memory-optimized`): 15 секунд.
* Для хостов с гарантированной долей vCPU ниже 100% (`burstable`): 150 секунд.

{% note info %}

На графиках автоматически применяются наиболее подходящие кратные единицы измерения (мегабайты, гигабайты и т. д.).

{% endnote %}

Вы можете [настроить алерты](#monitoring-integration) в сервисе Yandex Monitoring для получения уведомлений о сбоях в работе кластера. В Yandex Monitoring используются два порога срабатывания алерта: `Warning` и `Alarm`. При превышении заданного порога вы получите оповещения через настроенные [каналы уведомлений](../../monitoring/concepts/alerting.md#notification-channel).


## Мониторинг состояния кластера {#monitoring-cluster}

Для просмотра детальной информации о состоянии кластера Managed Service for PostgreSQL:

1. Перейдите в сервис **Managed Service for&nbsp;PostgreSQL**.

1. Нажмите на имя нужного кластера и выберите вкладку **Мониторинг**.

1. Чтобы перейти к работе с метриками, дашбордами или алертами в сервисе Yandex Monitoring, нажмите кнопку **Открыть в Monium** на панели сверху.

На странице появятся следующие графики:

* В блоке **Cluster**:

   * **PostgreSQL Alive, [boolean]** — работоспособность PostgreSQL, для каждого хоста в каждой из ролей: мастера и реплики.
   * **Is Primary, [boolean]** — показывает, какой хост является мастером и как долго.
   * **Replication lag** — время задержки репликации.

       {% note warning %}

       Время задержки репликации рассчитывается с точностью до одной секунды. Если задержка меньше одной секунды, ее невозможно отследить с помощью этой метрики.

       {% endnote %}
    
   * **Average CPU usage** — среднее время обработки транзакций и выполнения операторов.
   * **Maximum CPU usage** — пиковая загрузка процессорных ядер.
   * **Maximum memory usage** — пиковое использование оперативной памяти (в байтах). При высоких нагрузках значение параметра **Free** уменьшается, остальные — растут.
   * **Log errors** — количество логированных ошибок в секунду.
   * **OOM Count** — наличие процессов Out-Of-Memory Killer. Они останавливают приложения, которые расходуют всю память на машине, и предотвращают аварийную остановку ОС.

* В блоке **Disk**:

   * **Disk usage on primary** — использование дискового пространства на хосте-мастере (в байтах).
   * **Disk read/write bytes** — скорость дисковых операций чтения и записи (байт/с).
   * **Disk read/write IOPS** — интенсивность дисковых операций чтения и записи (операций/с).
   * **Disk usage by DB** — использование дискового пространства по базам данных (в байтах).
   * **Inode usage on primary** — использованное количество inode на хосте-мастере.
   * **Inode usage by host** — использованное количество inode по хостам.
   * **Total size of temporary files** — суммарный размер временных файлов (в байтах).
   * **Total size of WAL files** — суммарный размер [файлов WAL](../concepts/backup.md) (в байтах).
   * **Free space** — свободное дисковое пространство для каждого хоста (в байтах).
   * **WAL rate in bytes per second** — скорость записи файлов WAL в байтах в секунду.

* В блоке **Transactions**:

   * **Transactions/statements per second** — количество транзакций и операторов в секунду.
   * **Average transaction/statement time** — среднее время обработки транзакций и выполнения операторов.
   * **Age of oldest transaction/statement** — возраст самой старой транзакции/запроса.
   * **Statement quantiles** — время выполнения операторов по процентилям.
   * **Transaction quantiles** — время обработки транзакций по процентилям.
   * **Used/Free Transaction IDs (%)** — используемые/свободные идентификаторы транзакций в процентах.
   * **Used/Free Transaction IDs** — используемые/свободные идентификаторы транзакций.

* В блоке **Vacuum**:

   * **Vacuum processes** — количество процессов, выполняющих операцию вакуумирования.
   * **Scanning progress** — прогресс сканирования в процессе вакуумирования.
   * **Vacuuming progress** — прогресс выполнения операции вакуумирования.

* В блоке **Sessions**:

   * **Sessions read bytes per second** — объем прочитанных данных по видам сессий (в байтах).
   * **Sessions write bytes per second** — объем записанных данных по видам сессий (в байтах).
   * **Session CPU usage cores** — количество занятых процессорных ядер по видам сессий.
   * **Sessions per wait event** — количество ожидающих сессий по видам ожидания.

* В блоке **Connections**:

   * **Pooler is alive, [boolean]** — работоспособность менеджера подключений, для каждого хоста в каждой из ролей: мастера и реплики.
   * **Total pooler connections** — количество подключений в менеджере подключений: клиентских и серверных.
   * **TCP connections** — количество TCP-подключений в секунду.

* В блоке **Network**:

   * **Packets received/sent** — интенсивность обмена данными по сети (пакетов/с).
   * **Network received/sent bytes** — скорость обмена данными по сети (байт/с).


## Мониторинг состояния хостов {#monitoring-hosts}

Для просмотра детальной информации о состоянии отдельных хостов Managed Service for PostgreSQL:

1. Перейдите в сервис **Managed Service for&nbsp;PostgreSQL**.
1. Нажмите на имя нужного кластера и выберите вкладку **Хосты**.
1. Нажмите на строку нужного хоста в списке.

На этой странице выводятся графики, показывающие нагрузку на отдельный хост кластера:

* **CPU usage** — загрузка процессорных ядер. При повышении нагрузки значение **Idle** уменьшается.
* **Memory usage** — использование оперативной памяти (в байтах). При высоких нагрузках значение параметра **Free** уменьшается, остальные — растут.
* **Disk usage** — использование дискового пространства (в байтах).
* **Disk usage by DB** — использование дискового пространства по базам данных (в байтах).
* **Disk IOPS** — интенсивность дисковых операций (операций/с).
* **Network Packets** — интенсивность обмена данными по сети (пакетов/с).
* **Network Bytes** — скорость обмена данными по сети (байт/с).
* **Disk Metrics Details**:

   * **Disk used quota** — средний и максимальный процент использования квоты для дисковых операций.
   * **Disk read throttler latency (percentiles)** — задержка чтения, внесенная при превышении квоты диска, по процентилям.
   * **Disk write throttler latency (percentiles)** — задержка записи, внесенная при превышении квоты диска, по процентилям.
   * **Disk read latency (percentiles)** — задержка чтения с диска по процентилям.
   * **Disk write latency (percentiles)** — задержка записи на диск по процентилям.
   * **Disk read operations** — среднее и максимальное количество операций чтения в секунду.
   * **Disk write operations** — среднее и максимальное количество операций записи в секунду.
   * **Disk read bytes** — средняя и максимальная скорость чтения с диска (байт/с).
   * **Disk write bytes** — средняя и максимальная скорость записи на диск (байт/с).

На графике **Disk IOPS** характеристика **Read** растет при активном чтении из базы данных, а **Write** — при записи в нее.

Для хостов с ролью **Replica** нормально преобладание **Received** над **Sent** на графиках **Network Bytes** и **Network Packets**.


## Настройка алертов в Yandex Monitoring {#monitoring-integration}

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог с кластером, для которого нужно настроить алерты.
    1. Перейдите в сервис ![image](../../_assets/console-icons/display-pulse.svg) **Monitoring**.
    1. В блоке **Сервисные дашборды** выберите:
        * **Managed Service for PostgreSQL — Cluster Overview** для настройки алертов кластера;
        * **Managed Service for PostgreSQL — Host Overview** для настройки алертов хостов.
    1. На нужном графике нажмите на значок ![options](../../_assets/console-icons/ellipsis.svg) и выберите пункт **Создать алерт**.
    1. Если на графике несколько показателей, выберите запрос данных для формирования метрики и нажмите **Продолжить**. Подробнее о языке запросов в [документации Yandex Monitoring](../../monitoring/concepts/querying.md).
    1. Задайте значения порогов `Alarm` и `Warning` для срабатывания алерта.
    1. Нажмите кнопку **Создать алерт**.

{% endlist %}

Чтобы настроить автоматический мониторинг других показателей состояния кластера:

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. [Создайте алерт](../../monitoring/operations/alert/create-alert.md).
    1. Добавьте метрику состояния.
    1. В параметрах алерта задайте значения порогов для оповещения.

{% endlist %}

Рекомендуемые значения порогов для некоторых метрик:

| Метрика                               | Обозначение                | `Alarm`                   | `Warning`                 |
|---------------------------------------|:--------------------------:|:-------------------------:|:-------------------------:|
| Задержка репликации                   | `postgres-replication_lag` | `60`                      | `5`                       |
| Количество работоспособных хостов     | `postgres-is_alive`        | `<количество_хостов> - 2` | `<количество_хостов> - 1` |
| Среднее время выполнения запросов     | `pooler-avg_query_time`    | —                         | `2000`                    |
| Размер использованного хранилища      | `disk.used_bytes`          | 90% от размера хранилища  | 80% от размера хранилища  |

Для метрики `disk.used_bytes` значения порогов `Alarm` и `Warning` задаются только в байтах. Например, рекомендуемые значения для диска размером в 100 ГБ:

* `Alarm` — `96636764160` байтов (90%).
* `Warning` — `85899345920` байтов (80%).

Текущий размер хранилища можно посмотреть в [детальной информации о кластере](cluster-list.md#get-cluster). Полный список поддерживаемых метрик вы найдете в [документации Monitoring](../../monitoring/metrics-ref/managed-postgresql-ref.md).


## Состояние и статус кластера {#cluster-health-and-status}

**Состояние** кластера указывает на исправность его хостов, а **Статус** показывает, запущен кластер, остановлен или находится в промежуточном состоянии.

Для просмотра состояния и статуса кластера:

1. Перейдите на страницу каталога и выберите **Managed Service for&nbsp;PostgreSQL**.
1. Наведите курсор на индикатор в столбце **Доступность** в строке нужного кластера.

### Состояния кластера {#cluster-health}

Состояние | Описание | Предлагаемые действия
:--- | :--- | :---
**ALIVE** | Кластер работает в штатном режиме. | Действий не требуется.
**DEGRADED** | Кластер работает не на полную мощность: минимум один из хостов имеет состояние, отличное от `ALIVE`. | Выполните диагностику:<ul><li>Перейдите на вкладку **Хосты** и посмотрите, какие из них в нерабочем состоянии.</li><li>Перейдите на вкладку **Операции** и убедитесь, что все операции завершились.</li><li>Убедитесь, что кластер не находится в процессе технического обслуживания.</li></ul>Если причины не удалось выяснить самостоятельно, [обратитесь в службу поддержки](https://kz.center.yandex.cloud/support).
**DEAD** | Кластер неработоспособен:  ни один его хост не работает. | [Составьте обращение в службу поддержки](https://kz.center.yandex.cloud/support), указав:<ul><li>Идентификатор кластера.</li><li>Идентификаторы последних операций, которые на нем выполнялись.</li><li>Время по [графикам доступности](#monitoring-cluster), когда кластер перешел в состояние `DEAD`.</li></ul>
**UNKNOWN** | Состояние кластера неизвестно. | [Составьте обращение в службу поддержки](https://kz.center.yandex.cloud/support), указав:<ul><li>Идентификатор кластера.</li><li>Идентификаторы последних операций, которые на нем выполнялись.</li><li>Время по [графикам доступности](#monitoring-cluster), когда кластер перешел в состояние `UNKNOWN`.</li></ul>

### Статусы кластера {#cluster-status}

Статус | Описание | Предлагаемые действия
:--- | :--- | :---
**CREATING** | Идет подготовка к первому запуску | Подождите немного и приступайте к работе. Время создания кластера зависит от класса хостов.
**RUNNING** | Кластер работает в штатном режиме | Действий не требуется.
**STOPPING** | Кластер останавливается | Через некоторое время кластеру будет присвоен статус `STOPPED`, и он будет выведен из работы. Действий не требуется.
**STOPPED** | Кластер остановлен | Запустите кластер, чтобы вернуть его в работу.
**STARTING** | Остановленный ранее кластер запускается | Через некоторое время кластеру будет присвоен статус `RUNNING`. Подождите немного и приступайте к работе.
**UPDATING** | Обновляется конфигурация кластера | По завершении обновления кластеру будет присвоен статус, который был до обновления: `RUNNING` или `STOPPED`.
**ERROR** | Произошла ошибка при выполнении операции с кластером или во время окна технического обслуживания | Если кластер долго находится в этом статусе, [обратитесь в службу поддержки](https://kz.center.yandex.cloud/support). Доступность кластера можно определить по его состоянию.
**STATUS_UNKNOWN** | Кластер не может определить свой статус | Если кластер долго находится в этом статусе, [обратитесь в службу поддержки](https://kz.center.yandex.cloud/support).