InfluxDB 알림

InfluxDB 알림 (Alerting)

Grafana Alerting을 InfluxDB와 함께 사용해 시계열 데이터를 기반으로 알림을 만들 수 있어요. 지표를 모니터링하고 이상을 감지하며 특정 조건이 충족되면 알림을 받을 수 있어요. Grafana Alerting 일반 정보는 Grafana Alerting을 참고하세요.

출처: InfluxDB alerting

본문

Grafana Cloud를 이용하면 Grafana 인스턴스를 직접 설치·유지·확장할 필요가 없어요. 무료 계정을 만들면 10k 메트릭, 50GB 로그, 50GB 트레이스, 500VUh k6 테스트 등이 영구 무료로 제공돼요.

시작하기 전에

InfluxDB로 알림을 만들기 전에 다음을 확인해요.

  • Grafana에 InfluxDB 데이터 소스가 구성되어 있을 것
  • 알림 규칙을 만들 적절한 권한이 있을 것
  • 모니터링할 지표에 대한 이해가 있을 것

지원되는 쿼리 유형

InfluxDB 알림은 InfluxQL, SQL, Flux의 세 가지 쿼리 언어를 모두 지원해요. Grafana가 시간에 따라 값을 평가하고 임계값이 초과되면 알림을 트리거하려면 쿼리가 시계열 데이터를 반환해야 해요.

쿼리 언어 호환성

쿼리 언어 알림 지원 참고
InfluxQL GROUP BY time과 함께 집계 함수 사용
Flux 시간 기반 집계에 aggregateWindow() 사용
SQL 시간 필터링에 $__timeFilter$__dateBin 매크로 사용

알림 규칙 만들기

InfluxDB로 알림 규칙을 만들려면:

  1. Alerting > Alert rules로 이동해요.
  2. New alert rule을 클릭해요.
  3. 알림 규칙의 이름을 입력해요.
  4. InfluxDB 데이터 소스를 선택해요.
  5. 쿼리 편집기로 쿼리를 구성해요.
  6. 알림 조건을 구성해요(예: 평균이 임계값보다 높을 때).
  7. 평가 간격과 대기 기간을 설정해요.
  8. 알림과 라벨을 구성해요.
  9. Save rule을 클릭해요.

자세한 지침은 Create a Grafana-managed alert rule을 참고하세요.

예시 알림 쿼리

다음 예시는 InfluxDB의 일반적인 알림 시나리오를 보여줘요.

InfluxQL: 높은 CPU 사용량 알림

CPU 사용량을 모니터링하고 임계값을 초과하면 알림을 보내요.

  1. Query: 집계로 mean("usage_system")을 사용하는 cpu measurement 선택
  2. GROUP BY: time($__interval)
  3. Condition: mean이 90보다 높을 때

raw 쿼리 모드에서:

SELECT mean("usage_system") FROM "cpu" WHERE $timeFilter GROUP BY time($__interval) fill(null)

Flux: 메모리 압박 알림

Flux 쿼리로 메모리 사용량을 모니터링해요.

from(bucket: "telegraf")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> yield(name: "mean")

mean 값이 85를 초과하면 알리도록 조건을 설정해요.

SQL: 디스크 사용량 알림

SQL 쿼리로 디스크 사용량을 모니터링해요.

SELECT $__dateBin(time), mean(used_percent)
FROM disk
WHERE $__timeFilter(time)
GROUP BY $__dateBin(time)

mean 값이 80을 초과하면 알리도록 조건을 설정해요.

제한 사항

Grafana Alerting과 함께 InfluxDB를 사용할 때 다음 제한 사항을 알아두세요.

템플릿 변수 미지원

알림 쿼리에는 템플릿 변수를 넣을 수 없어요. Grafana는 대시보드 컨텍스트 없이 백엔드에서 알림 규칙을 평가하므로 $hostname이나 $region 같은 변수는 해석되지 않아요. 대시보드 쿼리가 템플릿 변수를 사용한다면 하드코딩된 값으로 알림용 별도 쿼리를 만들어요.

쿼리 복잡성

중첩 함수가 많거나 결과 집합이 큰 복잡한 쿼리는 타임아웃되거나 평가에 실패할 수 있어요. 알림용 쿼리를 다음으로 단순화해요.

  • 시간 범위 줄이기
  • 적절한 집계 간격 사용
  • 스캔되는 데이터를 제한하는 필터 추가

일시적 오류와 타임아웃 처리

잠깐의 InfluxDB 지연 급증이나 네트워크 중단은 알림 규칙 평가를 실패시킬 수 있어요. 기본적으로 실패한 평가는 규칙을 오류 상태로 이동시키는데, 데이터가 정상임에도 한 번에 많은 가짜 알림을 트리거할 수 있어요.

알림 규칙을 일시적 오류에 탄력적으로 만들려면:

  1. 알림 규칙 설정에서 Configure no data and error handling을 펼치고 Alert state if execution error or timeoutKeep Last State로 설정해요. 규칙이 짧은 평가 실패 동안 이전 상태를 유지해 오류 알림을 발화하지 않아요.
  2. Pending period를 설정해 알림 조건이 발화 전에 여러 평가에 걸쳐 지속적으로 충족되게 해요.
  3. 쿼리가 시간이 부족해 평가가 실패한다면 데이터 소스 타임아웃을 늘려요. 자세한 내용은 Advanced HTTP settings 참고.
  4. 알림 쿼리를 단순화하거나 좁혀 타임아웃 안에 충분히 완료되게 해요. Query complexity 참고.

오류 상태 처리에 대한 자세한 내용은 No data and error handling을 참고하세요.

모범 사례

InfluxDB 알림을 만들 때 다음 모범 사례를 따르세요.

  • 구체적인 필터 사용: 관련 데이터에 집중하고 쿼리 성능을 높이도록 WHERE 절이나 Flux 필터를 추가해요.
  • 적절한 간격 선택: GROUP BY time 간격을 평가 빈도와 일치시켜요.
  • 먼저 쿼리 테스트: 알림을 만들기 전에 Explore에서 쿼리가 예상 결과를 반환하는지 확인해요.
  • 현실적인 임계값 설정: 과거 데이터 패턴을 기준으로 알림 임계값을 설정해요.
  • 의미 있는 이름 사용: 무엇을 모니터링하는지 나타내는 설명적인 이름을 알림 규칙에 붙여요.

알림 규칙을 만들거나 평가할 때 오류가 발생하면 InfluxDB 데이터 소스 문제 해결을 참고하세요.

더 알아보기 (Learn more)