Алертинг
Алертинг — это механизм автоматических оповещений, предназначенный для информирования администраторов или специалистов DevOps о событиях, требующих их внимания или вмешательства.
Он позволяет в реальном времени отслеживать критически важные параметры работы базы данных (такие как общее состояние системы, утилизация CPU, ошибки аутентификации, использование дискового пространства), а также быстро реагировать на сбои, ошибки или превышения допустимых порогов нагрузки.
Ниже приведены примеры настраиваемых правил алертинга и особенности их реализации в YDB.
Алертинг в YDB с использованием Prometheus Alerting Rules
Prometheus Alerting Rules — это набор правил, написанных в формате YAML, которые определяют условия для генерации оповещений (алертов). Эти правила основаны на языке запросов PromQL (Prometheus Query Language) и позволяют автоматически выявлять проблемы на основе собранных метрик. Например, вы можете настроить правило, которое сработает, если CPU нагрузка превысит 70% или если диск заполнен более чем на 60%.
Перед началом работы
- Необходим базово настроенный сервер Prometheus. Подробнее об установке можно прочитать здесь
- Требуется базовое понимание написания и использования правил записи
- Настроенные уведомления, чтобы получать оповещения в удобные для вас каналы. Подробнее про настройку в документации
Ключевые параметры правил:
- alert: YDBAuthTicketErrors -- Название алерта
expr: auth_TicketsErrors > 2 -- Условие срабатывания алерта
for: 1m -- Время, в течение которого условие должно выполняться для активации алерта
...
- Где они хранятся? Правила обычно определяются в отдельных файлах (например, rules.yml) и загружаются в конфигурацию Prometheus.
- Как они оцениваются? Сервер Prometheus периодически (по умолчанию каждые 1-2 минуты) вычисляет выражения
expr, указанные в правилах. Если условие истинно в течение заданного времениfor, генерируется алерт.
Состояния алерта:
- Pending (ожидание): Условие
exprдля срабатывания алерта выполняется (вычислениеexprвернулоtrue), но заданный промежуток времениforещё не истёк. - Firing (активный): Условие
exprпродолжает выполняться на протяжении всего времени, указанного в параметреfor, и алерт считается активным. - Resolved (решён): Условие
exprбольше не выполняется, и алерт считается закрытым.
Более подробно об особенности системы и структуре правил смотрите в официальной документации.
Примеры правил алертинга, которые рекомендуются к настройке для каждого кластера
YDB ExecPool High Utilization
Описание: Правило контролирует загрузку пулов в YDB. Срабатывает при превышении 90% утилизации, что может привести к деградации производительности и увеличению времени отклика запросов.
Что делать: Проанализировать нагрузку. В сообщении алерта будет указано название пула, в котором превышена нагрузка. Подробнее про диагностику проблем с CPU можно прочитать в статье
Важно
Если вы меняете конфигурацию алерта, обязательно обновляйте параметр for вместе с аргументом utils_ElapsedMicrosec, чтобы их значения соответствовали друг другу.
- alert: YDBExecPoolHighUtilization
expr: |
(
sum by (instance, execpool) (
rate(utils_ElapsedMicrosec[1m])
) / 1000000
) / (
sum by(instance, execpool) (
utils_CurrentThreadCount
)
) > 0.9
for: 1m
labels:
severity: critical
component: ydb
subsystem: execpool
instance: "{{ $labels.instance }}"
execpool: "{{ $labels.execpool }}"
annotations:
summary: "YDB ExecPool high utilization on {{ $labels.instance }}"
description: |
ExecPool {{ $labels.execpool }} on host {{ $labels.instance }}
is loaded at {{ $value | humanizePercentage }}.
This may lead to performance degradation.
- Instance: {{ $labels.instance }}
- ExecPool: {{ $labels.execpool }}
- Current utilization: {{ $value | humanizePercentage }}
Пример сработавшего алерта:

YDB Authentication Errors
Описание: Правило отслеживает ошибки аутентификации в YDB. Срабатывает при появлении более 2 ошибок за период for. Это может означать, что кто-то неправильно вводит пароль, есть проблемы с настройками безопасности или что-то не так с конфигурацией системы.
Что делать: Искать в логах ошибки аутентификации и разбираться в причинах.
- alert: YDBAuthTicketErrors
expr: auth_TicketsErrors > 2
for: 1m
labels:
severity: critical
component: ydb
subsystem: auth
instance: "{{ $labels.instance }}"
annotations:
summary: "YDB authentication ticket errors on {{ $labels.instance }}"
description: |
Authentication errors detected in YDB.
This may indicate security issues or misconfiguration.
- Current error count: {{ $value }}
- Instance: {{ $labels.instance }}
- Host: {{ $labels.host }}
Пример сработавшего алерта:

YDB Storage Usage
Описание: Это правило отслеживает уровень использования дискового пространства. Оно срабатывает, когда заполненность хранилища достигает критических значений. Рекомендуется настроить два порога: уведомление при использовании 80% диска и критическое оповещение — при 90%.
Что делать: Найти причину превышения базой ожидаемого размера. Удалить ненужные записи (например, старые логи) или увеличить лимит на размер базы, если это требуется. Подробнее про диагностику проблем с дисковым пространством можно прочитать в статье
Warning Storage Usage (80%)
- alert: YDBStorageUsageWarning
expr: |
(ydb_resources_storage_used_bytes / ydb_resources_storage_limit_bytes) * 100 > 80
and ydb_resources_storage_limit_bytes > 0
for: 5m
labels:
severity: warning
component: ydb
subsystem: storage
database: "{{ $labels.database }}"
annotations:
summary: "High storage usage in YDB database {{ $labels.database }}"
description: |
Storage usage is above warning threshold.
Consider cleaning up old data or increasing storage capacity.
- Database: {{ $labels.database }}
- Current usage: {{ printf "%.2f" $value }}%
- Threshold: 80%
- Duration: more than 5 minutes
Critical Storage Usage (90%)
- alert: YDBStorageUsageCritical
expr: |
(ydb_resources_storage_used_bytes / ydb_resources_storage_limit_bytes) * 100 > 90
and ydb_resources_storage_limit_bytes > 0
for: 5m
labels:
severity: critical
component: ydb
subsystem: storage
database: "{{ $labels.database }}"
annotations:
summary: "Critical storage usage in YDB database {{ $labels.database }}"
description: |
Storage usage is critically high. Immediate action required!
Database may stop accepting writes soon.
- Database: {{ $labels.database }}
- Current usage: {{ printf "%.2f" $value }}%
- Threshold: 90%
- Duration: more than 5 minutes
Пример сработавшего алерта:

Полный конфигурационный файл
Полный конфигурационный файл со всеми правилами указанными выше доступен по ссылке
Рекомендации по настройке
- Пороговые значения: Настройте пороги в параметре
exprв соответствии с вашими SLA и характеристиками нагрузки. - Время ожидания: Увеличьте параметр
forдля менее критичных алертов, чтобы избежать ложных срабатываний.