MySQL 알림
MySQL 알림 (MySQL alerting)
MySQL 데이터를 기반으로 알림을 만들려면 Grafana Alerting을 MySQL과 함께 사용할 수 있어요. 이를 통해 메트릭을 모니터링하고, 이상 징후를 감지하며, 특정 조건이 충족될 때 알림을 받을 수 있죠. Grafana Alerting에 대한 일반 정보는 Grafana Alerting 문서를 참고하세요.
출처: 문서
본문
시작하기 전에
MySQL로 알림을 만들기 전에 다음을 준비하세요.
- Grafana에 MySQL 데이터 소스가 구성되어 있어야 해요.
- 알림 규칙(alarm rule)을 만들 권한이 있어야 해요.
- 모니터링하려는 메트릭에 대한 이해가 있어야 해요.
지원되는 쿼리 유형
MySQL 알림은 시간에 따라 숫자 데이터를 반환하는 시계열(time series) 쿼리와 함께 동작해요. Table 포맷 쿼리는 알림 규칙 조건에서 지원되지 않아요.
유효한 알림 쿼리를 만들려면:
- SQL datetime 또는 UNIX epoch 타임스탬프를 반환하는
time컬럼을 포함해요. - 알림 대상이 되는 메트릭에 대한 숫자 값을 반환해요.
time컬럼 기준으로 결과를 정렬해요.
시계열 쿼리 작성에 대한 자세한 내용은 MySQL query editor 문서를 참고하세요.
쿼리 포맷 요구 사항
| Query format | Alerting support | Notes |
|---|---|---|
| Time series | Yes | 알림에 필요 |
| Table | No | 알림에는 시계열 포맷으로 변환 |
알림 규칙 만들기
MySQL을 사용한 알림 규칙을 만들려면:
- Alerting > Alert rules로 이동해요.
- New alert rule을 클릭해요.
- 알림 규칙 이름을 입력해요.
- MySQL 데이터 소스를 선택해요.
- 쿼리 편집기로 쿼리를 작성해요:
- Format을 Time series로 설정해요.
$__time()또는$__timeGroup()매크로로time컬럼을 포함해요.- 모니터링할 값의 숫자 컬럼을 추가해요.
$__timeFilter()를 사용해 대시보드 시간 범위로 데이터를 필터링해요.
- 알림 조건을 구성해요 (예: 평균이 임계값을 초과할 때).
- 평가 간격(evaluation interval)과 pending 기간을 설정해요.
- 알림과 라벨을 구성해요.
- 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보다 클 때.
제한 사항
템플릿 변수 미지원: 알림 쿼리에는 템플릿 변수를 포함할 수 없어요. Grafana는 대시보드 컨텍스트 없이 백엔드에서 알림 규칙을 평가하므로 $hostname이나 $environment 같은 변수는 해석되지 않아요. 대시보드 쿼리가 템플릿 변수를 사용한다면 알림용으로 하드코딩된 값의 별도 쿼리를 만들어요.
Table 포맷 미지원: Table 포맷을 사용하는 쿼리는 알림에 사용할 수 없어요. 쿼리 포맷을 Time series로 설정하고 쿼리가 time 컬럼을 반환하는지 확인하세요.
쿼리 타임아웃: 대용량 데이터셋을 가진 복잡한 쿼리는 알림 평가 중 타임아웃될 수 있어요. 알림용 쿼리는 다음처럼 최적화하세요.
- 데이터를 제한하는 적절한
WHERE절을 추가해요. - 시간 및 필터 컬럼에 인덱스를 사용해요.
- 평가되는 시간 범위를 줄여요.
모범 사례
- 시계열 포맷 사용: 알림 쿼리는 항상 쿼리 포맷을 Time series로 설정해요.
- 시간 필터 포함:
$__timeFilter()매크로로 데이터를 평가 창으로 제한해요. - 쿼리 최적화:
WHERE절과GROUP BY에 쓰는 컬럼에 인덱스를 추가해요. - 먼저 쿼리 테스트: 알림을 만들기 전에 Explore에서 쿼리가 예상 결과를 반환하는지 확인해요.
- 현실적인 임계값 설정: 알림 임계값은 과거 데이터 패턴을 기반으로 정해요.
- 의미 있는 이름 사용: 알림 규칙에 모니터링 대상을 나타내는 설명적인 이름을 붙여요.