Алертинг PostgreSQL
Источник данных PostgreSQL поддерживает Grafana Alerting. Вы можете создавать правила алертинга, которые вычисляют запросы временных рядов к вашей базе данных PostgreSQL и отправляют уведомления при выполнении условий.
Перед началом
- Убедитесь, что ваш источник данных PostgreSQL настроен.
- Ознакомьтесь с разделами Правила алертинга и Создание управляемого Grafana правила алертинга.
Поддерживаемый формат запроса
В условиях правил алертинга можно использовать только запросы временных рядов.
- Ваш запрос должен возвращать столбец с именем
time(нативный тип даты/времени SQL или UNIX epoch) и один или несколько числовых столбцов значений. - Запросы в формате Table не поддерживаются в условиях правил алертинга.
Подробности о написании запросов временных рядов см. в разделе Запросы временных рядов в документации редактора запросов PostgreSQL.
Ограничения
Учитывайте следующие ограничения при использовании PostgreSQL с Grafana Alerting:
- Только формат временных рядов: правила алертинга требуют, чтобы Format запроса был установлен в Time series. Запросы в формате Table нельзя использовать в качестве условий алертинга.
- Нет режима заполнения в алертах: параметр заполнения в
$__timeGroup(например,$__timeGroup(col, '5m', 0)) не применяется во время вычисления алерта. Пропущенные точки данных остаются в виде разрывов. - Один запрос на условие: каждое условие алертинга вычисляет один запрос. Если вам нужно объединить результаты нескольких запросов, используйте математические выражения в правиле алертинга.
- Переменные шаблонов не поддерживаются: запросы алертов не поддерживают переменные шаблонов дашборда, поскольку алерты вычисляются независимо от контекста какого-либо дашборда. Жёстко задавайте значения или используйте метки правил алертинга вместо этого.
Создание правила алертинга
Чтобы создать правило алертинга, использующее PostgreSQL:
- Перейдите в Alerting в меню слева и выберите Alert rules.
- Нажмите New alert rule.
- В разделе запроса выберите ваш источник данных PostgreSQL.
- Установите Format запроса в Time series.
- Напишите SQL-запрос, возвращающий столбец
timeи одно или несколько числовых значений. - Настройте условие, группу вычисления и параметры уведомлений.
- Сохраните правило.
Пошаговое руководство см. в разделе Создание управляемого Grafana правила алертинга.
Примеры запросов для алертинга
В следующих примерах показаны распространённые шаблоны алертинга PostgreSQL.
Алерт по пороговому значению
Следующий запрос возвращает временной ряд, подходящий для порогового алерта (например, алерт, когда среднее значение превышает лимит):
SELECT
$__timeGroupAlias("time_date_time", '5m'),
avg("value_double") AS value
FROM test_data
WHERE $__timeFilter("time_date_time")
GROUP BY time
ORDER BY time
Используйте такие типы условий, как Is above или Is below, в правиле алертинга для вычисления ряда.
Многомерный алерт
Чтобы создать отдельные экземпляры алертов для каждого значения столбца метки, включите в запрос строковый столбец. Grafana создаёт один экземпляр алерта на каждое уникальное значение метки, что позволяет независимо отслеживать каждый хост, службу или регион.
SELECT
$__timeGroupAlias("time_date_time", '5m'),
avg("value_double") AS value,
hostname
FROM test_data
WHERE $__timeFilter("time_date_time")
GROUP BY time, hostname
ORDER BY time
Этот запрос создаёт отдельный временной ряд для каждого hostname. Правило алертинга вычисляет условие для каждого ряда независимо, поэтому вы получаете отдельные уведомления по каждому хосту.
Алерт по количеству строк
Чтобы создать алерт, когда количество строк в окне времени превышает пороговое значение (например, количество ошибок):
SELECT
$__timeGroupAlias("created_at", '5m'),
count(*) AS error_count
FROM error_logs
WHERE $__timeFilter("created_at")
AND severity = 'ERROR'
GROUP BY time
ORDER BY time
Аннотации и метки шаблонов
Вы можете использовать аннотации и метки шаблонов, чтобы включать результаты запросов или метаданные в уведомления и метки алертов.
Рекомендации
Следуйте этим рекомендациям при использовании PostgreSQL для алертинга:
- Поддерживайте скорость запросов: правила алертинга вычисляются по расписанию (например, каждую минуту). Избегайте дорогостоящих соединений, подзапросов или сканирования больших таблиц без индексов. Добавьте индексы на столбцы времени и любые столбцы, используемые в предложениях
WHERE. - Используйте
$__timeFilter: всегда включайте макрос$__timeFilterили$__unixEpochFilter, чтобы ограничить данные окном вычисления. Без него запрос сканирует всю таблицу при каждом вычислении. - Обрабатывайте значения
NULL: если ваши данные содержат значенияNULL, Grafana рассматривает их как «нет данных». Настройте поведение правила алертинга при No data в соответствии с вашими ожиданиями (например, Alerting, No data или OK). - Сначала тестируйте в Explore: проверьте, что ваш запрос возвращает ожидаемый временной ряд в Explore, прежде чем использовать его в правиле алертинга. Проверьте, что Format установлен в Time series и результаты отсортированы по времени.
- Задавайте реалистичные интервалы вычисления: выбирайте интервал вычисления, который даёт вашему запросу достаточно времени на выполнение. Если ваш запрос занимает 10 секунд, не вычисляйте каждые 10 секунд — оставляйте запас.