Стадия жизненного цикла модуля: Общедоступная версия

У модуля есть требования для установки

Модуль observability позволяет собирать метрики и отслеживать состояние управляемых сервисов, запущенных в кластере DKP.

Мониторинг сервисов включён по умолчанию при выполнении следующих требований:

  • DKP версии 1.76.0 или выше;
  • модуль prompp версии 3.7.10 или выше (если он используется).

Поддерживаемые сервисы

В данный момент модуль поддерживает мониторинг следующих управляемых сервисов:

Тип сервиса Область видимости У кого есть доступ
PostgreSQL Уровень проекта (неймспейса) Пользователи соответствующего проекта
Memcached Уровень проекта (неймспейса) Пользователи соответствующего проекта

Подключение инстанса PostgreSQL

Чтобы модуль мог собирать метрики с инстанса PostgreSQL, выполните на этом инстансе от имени суперпользователя (или другой роли, у которой уже есть полный доступ к представлениям pg_stat_*) следующие команды:

CREATE ROLE okagent WITH LOGIN;
CREATE SCHEMA okmeter; -- Отделяет вспомогательную функцию от остальной схемы.
GRANT USAGE ON SCHEMA okmeter TO okagent; -- Даёт okagent доступ к вспомогательной схеме.
CREATE OR REPLACE FUNCTION okmeter.pg_stats(text) RETURNS SETOF RECORD AS
$$
DECLARE r record;
BEGIN
    FOR r IN EXECUTE 'SELECT r FROM pg_' || $1 || ' r' LOOP RETURN NEXT r;
    END LOOP;
    RETURN;
END
$$ LANGUAGE plpgsql SECURITY DEFINER; -- Позволяет okagent читать защищённые представления pg_stat_* без дополнительных прав.

Агент модуля (opagent) обращается к PostgreSQL через локальный unix-сокет на той же ноде, по пути /controller/run, и подключается без пароля — pg_hba.conf должен разрешать okagent локальное подключение без проверки пароля.

Более простой вариант для PostgreSQL 10 и новее

Начиная с PostgreSQL 10, встроенная роль pg_monitor даёт тот же уровень доступа для мониторинга, что и функция okmeter.pg_stats выше, без создания отдельной схемы и функции:

CREATE ROLE okagent WITH LOGIN;
GRANT pg_monitor TO okagent;

Используйте этот вариант вместо схемы и функции, если все ваши инстансы работают на PostgreSQL 10 или новее. Функция okmeter.pg_stats выше дополнительно работает и на версиях PostgreSQL старше 10, где роли pg_monitor ещё не существует.

PostgreSQL 16 и новее

Необязательно: без зарезервированного соединения okagent получит отказ точно так же, как и любой другой клиент, если у инстанса закончатся свободные соединения. Начиная с PostgreSQL 16 выдайте okagent встроенную роль pg_use_reserved_connections и зарезервируйте для неё хотя бы одно соединение — superuser_reserved_connections на несуперпользовательские роли не распространяется:

GRANT pg_use_reserved_connections TO okagent;
ALTER SYSTEM SET reserved_connections = 1;

Параметр reserved_connections можно задать только при старте сервера, поэтому для применения изменения потребуется перезапустить PostgreSQL. Убедитесь, что сумма reserved_connections и superuser_reserved_connections меньше max_connections.

Одного зарезервированного соединения достаточно — okagent не держит больше одного подключения к инстансу одновременно. Недоступно на версиях PostgreSQL младше 16.

Дашборды

Для просмотра данных о состоянии сервиса откройте соответствующий дашборд в веб-интерфейсе Deckhouse. Для этого перейдите в раздел «Мониторинг» → «Обзор данных», после чего в вертикальном меню выберите тип сервиса (например, «PostgreSQL») и в выпадающем меню выберите нужный инстанс.

Просмотр данных мониторинга сервисов

Алерты

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

Тип сервиса Название алерта Описание
PostgreSQL PgAutovacuumWorkers Исчерпан лимит процессов автоочистки; возможен рост таблиц и деградация производительности
PostgreSQL PgCheckError Агент мониторинга не смог собрать метрики с инстанса PostgreSQL
PostgreSQL PgMaxConnections Использование пула соединений превышает 95%; новые подключения могут отклоняться
PostgreSQL PgPluginConfig Плагин мониторинга PostgreSQL настроен не полностью
PostgreSQL PgReplicationStatus Главный сервер потерял репликационное соединение с ведомым сервером; данные на ведомом сервере могут устаревать
PostgreSQL PgTxidWraparound Приближение к исчерпанию идентификаторов транзакций; без срочного выполнения VACUUM база данных будет остановлена
PostgreSQL PgWaitingConnections Более одного соединения находится в состоянии ожидания; возможна конкуренция за блокировки
PostgreSQL PgWalArchiverFails Зафиксированы сбои WAL archiver; возможно накопление WAL-сегментов и исчерпание дискового пространства

Отключение мониторинга

Мониторинг сервисов управляется лейблом observability.deckhouse.io/servicemonitoring. Его можно задать на неймспейсе (для всех инстансов в проекте) или на конкретном поде (для отдельного инстанса).

Допустимые значения:

Значение Сбор метрик Алерты
enabled Да Да
no-alerts Да Нет
disabled Нет Нет

Если лейбл отсутствует или содержит неподдерживаемое значение, используется режим enabled.

Пример конфигурации:

apiVersion: v1
kind: Namespace
metadata:
  name: project-a
  labels:
    observability.deckhouse.io/servicemonitoring: no-alerts

Лейбл на поде может только ужесточить ограничение, заданное на неймспейсе, но не ослабить его. Эффективное значение для инстанса определяется по наиболее строгому правилу: enabled < no-alerts < disabled. В таблице ниже показано, как определяется эффективное значение в зависимости от значений лейбла на неймспейсе проекта и поде.

Лейбл на неймспейсе Лейбл на поде Эффективное значение
disabled Любое значение или не задан disabled
Любое значение или не задан disabled disabled
no-alerts Любое значение, кроме disabled no-alerts
Любое значение, кроме disabled no-alerts no-alerts
enabled или не задан enabled или не задан enabled

Где запускается агент

Агент разворачивается как DaemonSet, но только на узлах, где есть хотя бы один сервис с включённым мониторингом (см. Отключение мониторинга). Такие узлы модуль отмечает лейблом observability.deckhouse.io/opagent: он ставится, когда на узел планируется первый отслеживаемый сервис, и снимается через пару минут после того, как узел покинул последний. Лейбл управляется автоматически — не ставьте и не снимайте его вручную, модуль вернёт его в нужное состояние.

После появления первого отслеживаемого сервиса на узле агенту нужно несколько минут, чтобы запуститься и начать собирать метрики. Параметр модуля nodeAffinity дополнительно ограничивает узлы, на которых может работать агент, и применяется вместе с лейблом.