Алертинг MySQL
Вы можете использовать Grafana Alerting с MySQL, чтобы создавать правила алертинга на основе ваших данных MySQL. Это позволяет отслеживать метрики, обнаруживать аномалии и получать уведомления при выполнении определённых условий.
Общую информацию о Grafana Alerting см. в разделе Grafana Alerting.
Перед началом
Прежде чем создавать правила алертинга с MySQL, убедитесь, что у вас есть:
- Источник данных MySQL, настроенный в Grafana.
- Соответствующие разрешения на создание правил алертинга.
- Понимание метрик, которые вы хотите отслеживать.
Поддерживаемые типы запросов
Алертинг MySQL работает с запросами временных рядов, возвращающими числовые данные за период времени. Запросы в табличном формате не поддерживаются в условиях правил алертинга.
Чтобы создать корректный запрос для алертинга:
- Включите столбец
time, возвращающий дату-время SQL или метку времени UNIX epoch - Возвращайте числовые значения для метрик, по которым хотите получать алерты
- Сортируйте результаты по столбцу времени
Подробнее о написании запросов временных рядов см. в разделе Редактор запросов MySQL.
Требования к формату запроса
Создание правила алертинга
Чтобы создать правило алертинга с использованием MySQL:
- Перейдите в Alerting > Alert rules.
- Нажмите New alert rule.
- Введите имя правила алертинга.
- Выберите ваш источник данных MySQL.
- Постройте запрос с помощью редактора запросов:
- Установите для параметра Format значение Time series
- Включите столбец времени, используя макрос
$__time()или$__timeGroup() - Добавьте числовые столбцы для значений, которые нужно отслеживать
- Используйте
$__timeFilter(), чтобы фильтровать данные по временному диапазону дашборда
- Настройте условие алертинга (например, когда среднее значение превышает порог).
- Задайте интервал вычисления и период ожидания (pending period).
- Настройте уведомления и метки (labels).
- Нажмите Save rule.
Подробные инструкции см. в разделе Create a Grafana-managed alert rule.
Примеры запросов для алертинга
Приведённые ниже примеры иллюстрируют типичные сценарии алертинга с MySQL.
Алерт при большом числе ошибок
Отслеживайте количество ошибок за период времени:
SELECT
$__timeGroup(created_at, '1m') AS time,
COUNT(*) AS error_count
FROM error_logs
WHERE $__timeFilter(created_at)
AND level = 'error'
GROUP BY time
ORDER BY time
Условие: когда error_count превышает 100.
Алерт при высоком среднем времени отклика
Отслеживайте время отклика API:
SELECT
$__timeGroup(request_time, '5m') AS time,
AVG(response_time_ms) AS avg_response_time
FROM api_requests
WHERE $__timeFilter(request_time)
GROUP BY time
ORDER BY time
Условие: когда avg_response_time превышает 500 (миллисекунд).
Алерт при низком объёме заказов
Обнаруживайте падение активности заказов:
SELECT
$__timeGroup(order_date, '1h') AS time,
COUNT(*) AS order_count
FROM orders
WHERE $__timeFilter(order_date)
GROUP BY time
ORDER BY time
Условие: когда order_count опускается ниже 10.
Алерт при высоком проценте использования диска
Отслеживайте метрики хранилища базы данных:
SELECT
$__timeGroup(recorded_at, '5m') AS time,
AVG(disk_used_percent) AS disk_usage
FROM system_metrics
WHERE $__timeFilter(recorded_at)
AND metric_type = 'disk'
GROUP BY time
ORDER BY time
Условие: когда disk_usage превышает 85.
Ограничения
При использовании MySQL с Grafana Alerting учитывайте следующие ограничения:
Переменные шаблонов не поддерживаются
Запросы для алертинга не могут содержать переменные шаблонов. Grafana вычисляет правила алертинга на бэкенде без контекста дашборда, поэтому переменные вида $hostname или $environment не будут подставлены.
Если запрос на дашборде использует переменные шаблонов, создайте отдельный запрос для алертинга с жёстко заданными значениями.
Табличный формат не поддерживается
Запросы с форматом Table нельзя использовать для алертинга. Установите для формата запроса значение Time series и убедитесь, что запрос возвращает столбец времени.
Тайм-аут запроса
Сложные запросы с большими наборами данных могут завершаться по тайм-ауту во время вычисления алерта. Оптимизируйте запросы для алертинга следующим образом:
- Добавляйте подходящие условия
WHERE, чтобы ограничить объём данных - Используйте индексы по столбцам времени и фильтрации
- Сокращайте вычисляемый временной диапазон
Рекомендации
Придерживайтесь этих рекомендаций при создании алертов MySQL:
- Используйте формат временных рядов: всегда устанавливайте для запросов алертинга формат Time series.
- Включайте фильтры по времени: используйте макрос
$__timeFilter(), чтобы ограничить данные окном вычисления. - Оптимизируйте запросы: добавляйте индексы по столбцам, используемым в условиях
WHEREиGROUP BY. - Сначала тестируйте запросы: убедитесь, что запрос возвращает ожидаемые результаты в Explore, прежде чем создавать алерт.
- Задавайте реалистичные пороги: основывайте пороги алертов на исторических закономерностях данных.
- Используйте осмысленные имена: давайте правилам алертинга описательные имена, указывающие, что они отслеживают.